Jmeter中使用py插件

-安装插件

1、下载插件jython-standalone-2.7.0.jar到jmeter的lib\ext目录下

链接:

https://pan.baidu.com/s/13ZXtUwoQEV62M98GaIR26w

提取码:ioyk

2、重启jmeter,查看是否生效,如果这个语言有python的选项说明可以了,注意这里支持的是python2,没有支持python3的插件呢(如果你没有安装py2,也不会有py2的选项)

3、插件管理器下载插件(尽管没有搜索到对应的插件)

jmeter官网(除了慢没有毛病):Apache JMeter - Apache JMeter™

插件管理器下载地址:https://jmeter-plugins.org/install/Install/

然后我们将下载下来的jar包放入JMeter目录下的lib/ext目录,重启jmeter

然后我们会发现JMeter的选项下回多出一个新东西,这个就是我们的插件管理器了

虽然这里没有这个插件!!!!!哈哈哈哈哈

- 处理请求前参数

被测试接口中参数需要处理加工,利用JSR223 Sampler做入参处理,你要将控件放在http Request 控件之前

1、jmeter内置变量vars

你在用户参数中定义的参数都是放入jmeter的vars中的

获取参数:vars.get(参数名string类型)

放入参数:vars.put(参数名string类型,string类型的value)

2、其他代码参考python语法即可

我的示例:我把一些参数没有值的情况给予默认值,可做安全参数转化,特殊入参的拼接,直接上代码吧

python 复制代码
import random
import re

def tian_code(ctt):
    """把入参做安全传输转化"""
    pattern1 = re.compile(r"\/")
    pattern2 = re.compile(r"[\'\"]")
    res = re.sub(pattern2,r"\'",ctt)
    res = re.sub(pattern1,r"\/",res)   
    return res
#一些固定值
vars.put("mode","strategy")
vars.put("pid","homework")
vars.put("token","200075")
vars.put("qid","${__Random(10000000,99999999,)}")
vars.put("rid","${__Random(10000000,99999999,)}")
#一些非固定值处理没有入参值时给如默认值
dict_param = {}
dict_param["uid"] = vars.get("uid")
dict_param["content"] = vars.get("content")
dict_param["avatar"] = vars.get("avatar")
dict_param["uname"] = vars.get("uname")
dict_param["title"] = vars.get("title")
dict_param["pic"] = vars.get("pic")
for k,v in dict_param.items():
    if not v:
        if k=="uid":
            dict_param[k]= str(random.randint(11111111,99999999))
        elif k =="pic":
            dict_param[k]= "https://b-ssl.duitang.com/uploads/item/201807/17/20180717232644_resnw.thumb.700_0.jpg"
        else:
            dict_param[k]= u"${__RandomString(11,unicode,)}"
    dict_param[k] = tian_code(dict_param[k])
    vars.put(k,dict_param[k] )


#unique_key的拼接
unique_key = str(vars.get("pid"))+"_"+str(vars.get("token"))+"_"+ str(vars.get("qid")) +"_"+str(vars.get("rid"))+"_"+str(vars.get("uid"))
vars.put("unique_key",unique_key )

- 处理断言

1、在http请求控件右键添加JSR223Assertion

2、常用的内置参数

(1)获取http请求的结果:prev.getResponseDataAsString()

(2)修改请求断言结果:AssertionResult.setFailure(False)或者True

(3)修改断言失败信息:AssertionResult.setFailureMessage( u"失败\n"+vars.get("msg"))

(4)返回参数是json但是为字符串格式,转化的时候我用eval方式拿出参数,json包使用报错

给予我自己的代码做参考:

python 复制代码
log.info(u"+++++++++++{}_{}_处理结果+++++++++++++++".format(vars.get("Tname"), vars.get("ceshi")))
name = vars.get("Tname")
# setThreadName(u"{}".format(name))
response = prev.getResponseDataAsString()
log.info("response:" + response)
vars.put("result", response)

def other_action(param, test):
    result_other = {}
    if isinstance(param, dict):
        for k, v in param.items():
            if v != "default" and k != test:
                result_other[k] = v
    return result_other

myResult = vars.get("result")
test = vars.get("ceshi")
res = eval(myResult)
error = str(res["errno"])
is_success = 1
errMsg = u""
action = ""
result_other = ""
if error == "0":
    result = eval(res["result"])
    action = result[test]
    if action not in ("PutFile", "DivertDel", "smartmis"):
        is_success = 0
        result_other = other_action(result, test)
        if action == "smartmis" and len(result_other) != 0:
            is_success = 0
else:
    is_success = 0
    errMsg = eval(str(res["result"]))
re = ""
if action:
    re += u"期望action({}_{}):{}".format(name, test, action)
else:
    re += u"期望action({}_{}):没有结果".format(name, test)
if result_other:
    re += u"其他命中策略有:{}".format(str(result_other))
if errMsg:
    re += u"错误日志是:{}".format(errMsg)

vars.put("is_success", str(is_success))
vars.put("msg", re)

log.info(u"+++++++++++{}_{}断言+++++++++++++++".format(name, test))
log.info(vars.get("is_success"))

if (vars.get("is_success") == "1"):
    AssertionResult.setFailure(False)
    AssertionResult.setFailureMessage(u"成功\n" + vars.get("msg"))
else:
    AssertionResult.setFailure(True)
    AssertionResult.setFailureMessage(u"失败\n" + vars.get("msg"))
log.info(AssertionResult.getFailureMessage())

#以下为数据库断言使用参数
if action == "smartmis":
    vars.put("dbNum", str(1))
else:
    vars.put("dbNum", str(0))

- 我们一起看看我的成果吧

复制代码

调试的时候可以加一个Debug Sampler去看你所有的jmeter内置参数值,或者打开日志去看

失败的情况

相关推荐
tester Jeffky5 小时前
JMeter 性能测试计划深度解析:构建与配置的树形结构指南
jmeter
tester Jeffky5 小时前
深入探索JMeter逻辑控制器:构建复杂测试场景的利器
jmeter
tester Jeffky15 小时前
深入探索JMeter的执行器时间线:从CLArgsParser到JmeterEngine
jmeter
惜.己15 小时前
Jmeter中的断言(二)
测试工具·jmeter·1024程序员节
tester Jeffky16 小时前
深入探索JMeter bin目录中的Properties文件:优化性能测试的关键
jmeter
tester Jeffky1 天前
掌握移动端性能测试利器:深入JMeter手机录制功能
jmeter·智能手机
惜.己1 天前
Jmeter中的断言(四)
测试工具·jmeter·1024程序员节
凌云行者1 天前
JMeter的简单使用
jmeter·性能测试
tester Jeffky1 天前
深入探索Apache JMeter:HashTree结构解析与应用
jmeter
tester Jeffky1 天前
深入JMeter核心引擎:揭秘JmeterEngine、StandardJmeterEngine、ClientJmeterEngine与Remote的奥秘
jmeter