开始试验
声明:JMeter能支持写代码的就是beanshell元件,是的,任何它的元件。
过程分析
粉丝说很难的原因是因为没有java代码基础和对jmeter元件的数量使用;如果是关于JMeter不支持的功能,首先想到的就是手写代码带包成插件或者是beanshell编程,题主推荐第一种方式,因为它比较通用些。
·postman截图的第一句意思:获取13位时间戳;
· 第二句以及后面频繁出现的var,它是定义变量的关键字;
· console.log类似JMeter的log.info()都是日志输出;
· 对于方法:Math、SHA256等都是方法的引用,如果JMeter不支持就需要手写代码;
· 巧了,JMeter偏偏提供了对应的功能:函数助手了解一下
· 后面的那么多set都是设置全局变量。
# 关于时间函数
${__time(yyyy-mm-dd hh:mm:ss,)}
${__time(yyyy-mm-dd,)}
# 13位时间戳
${__time(,)}
# 10位时间戳
${__time(/1000,)}
# 规则字符串
${__UUID}
# 加密算法,它支持MD5、SHA-256;具体参见JMETER功能函数助手介绍
${__digest(SHA-256,string,,true,)}
测试计划实现
通过JMeter创建测试计划来实践,思路:由beanshell前置处理器代码处理参数,然后赋值给HTTP sampler,也可以在下一个接口请求直接使用;
·beanshell前置处理接口入参
·入参使用函数引用加密的参数
· 测试函数功能
· 校验测试结果
代码片段
// 时间戳字符串
String?timeStamp?=?"${__time(,)}";
// 控制台输出
log.info(timeStamp);
// 定义或者获取token,或获取变量
String?token?=?"aslfjlajlskfslf";
String?key?=?"123456";
// 赋值,在下一个请求:${key}引用
vars.put("key","value_abc");
// 这里关于随机字符串的算法,可能需要自己定义;Jmeter提供了uuid;结构与你的案例符合
String?randStr?=?"${__UUID}";
String?sigStr?= timeStamp + token + key + timeStamp;
vars.put("sigStr",sigStr);
// 签名算法,在jmeter支持md5,sha256可能需要自己写好;恰恰又有函数支持;如果在同一个脚本中可能有问题,但是在外面作为入参或者引用是没问题的
// String signature = "${__digest(SHA-256,vars.get("sigStr"),,true,)}";
// log.info(signature);
小结
经过上面的试验,postman的代码过程都在JMeter实现了,所以对于JMeter工具的使用必须要掌握,在不能满足功能需求的时候,才考虑二次开发,就如加密算法,如果不支持就手写。在上面的引用中,如{__digest()}函数,对于需要加密的字符串时是活的,每次请求都会发生改变,所以如何让它能动态获取才是关键,建议了解:{__V()}、{__eval()}、{__beanshell()}等函数的用途。
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理