jmeter 学习
log:写入信息到jmeber.log文件,使用方法:log.info(“This is log info!”);
vars - (JMeterVariables):操作jmeter变量,这个变量实际引用了JMeter线程中的局部变量容器(本质上是Map),它是测试用例与BeanShell交互的桥梁,常用方法:
a) vars.get(String key):从jmeter中获得变量值 b) vars.put(String key,String value):数据存到jmeter变量中
props - (JMeterProperties - class java.util.Properties):操作jmeter属性,该变量引用了JMeter的配置信息,
可以获取Jmeter的属性,它的使用方法与vars类似,但是只能put进去String类型的值,而不能是一个对象。对应于java.util.Properties。
用于存取jmeter 全局静态变量 a) props.get("START.HMS"); 注:START.HMS为属性名,在文件jmeter.properties中定义 b) props.put("PROP1","1234"); 设置全局变量 : props.put(key,value) ${__setProperty(REGNAME,${REGNAME},)}; 引用全局变量 : props.get(key) ${__property(变量名)}
${__setProperty(property name,property value,True/False)} 设置全局变量 注:该函数的参数无需使用双引号引用################
该函数用来给JMeter属性设置值,默认返回值为空字符串,所以函数在任何地方被调用都是有效的
Property Name:要设置的属性名,必要属性
Property Value:要设置的属性的值,必要属性
True/False:原值是否要返回,非必要属性;当设置为“true”,将返回原始值
作用域:跨线程组调用,可以在任意地方调用,但不能跟在import xxx后面
${__P(property name,default value)} 如果没有提供默认值,则默认给1
这是简化版的属性函数,旨在为用户在命令行使用属性定义。它不像__property函数那样有可以存值的变量,
并且如果没有提供默认值,侧假定默认给1,原因是它对常见的测试变量(如循环、线程数、ramp up等)有效
prev - (SampleResult):获取前面的sample返回的信息,常用方法: beanShell 中使用, 不需要导包 a) String response_data = prev.getResponseDataAsString() :获取响应信息 b) String code = prev.getResponseCode() :获取响应码 c) String ctime = prev.getConnectTime().toString() :获取连接到服务器的时间 d) String cType = prev.getContentType(); :获取头文件中ContentType类型
更多方法可参考:org.apache.jmeter.samplers.SampleResult
ctx - 代表上下文信息,能直接用。
ctx.getCurrentSampler(); 获取当前 sampler 请求
ctx.getPreviousSampler(); 获取前一个 sampler 请求
ctx.getThreadNum(); 获取当前线程的序号,从 0 开始计数
ctx.getThread(); 获取当前线程
ctx.getThreadGroup(); 获取当前线程组
ctx.getProperties(); 获取所有属性
ctx.getVariables(); 获取当前线程的所有变量
函数助手: 如果参数为时间戳__time(,),那公式为:
${__time(,)} : 默认该公式精确到毫秒级别, 13位数
${__time(/1000,)} : 该公式精确到秒级别, 10位数
//String timestamp = Long.valueOf("${__time(,)}").toString();
String timestamp = "${__time(,)}".toString(); // 获取时间戳
//String timestamp = String.valueOf(Long.valueOf("${__time(,)}"));
当使用jdbc request的结果作为参数时,要写成${username_1}这样子,1代表你查出来的数据第一行,想取第几行就把1改成几。
清理打开的历史记录
HKEY_CURRENT_USERSoftwareJavaSoftPrefsorgapachejmeterguiaction
BeanShell断言,使用Failrue来标识断言失败,FailureMessage标示断言失败的原因
Failure = false;-----表示断言成功,
FailureMessage = "……"; ----自定义的成功信息
Failure = true;-----表示断言失败,
FailureMessage = "……";-----自定义的失败信息。
code=vars.get("rescode");
if (!code.equals("00000")) { //响应信息的状态值status_str不等于0,则断言其他与实际值不一致
Failure=true;
FailureMessage="请求失败";
};
beanshell计算签名
sample 是sample对象 ,使用时 #########需要引入包import org.apache.jmeter.config.Arguments;#########
Arguments args = sampler.getArguments();
String str1 = args.toString();
log.info("str1 : " + str1);
String bodyStr = str1.substring(1, str1.length()).replace("(","").replace(")",""); // 去掉括号
log.info("bodyStr : " + bodyStr);
String bodyStrCQ = sampler.getArguments().getArgument(0).getValue(); // 获取当前请求的body
String query_str = "body=" + bodyStr + "×tamp=" + timestamptmp + "&user=" + "${regName}"; //&req_id=123
String sig = DigestUtils.sha256Hex(query_str); // 签名
//String timestamp = Long.valueOf("${__time(,)}").toString();
String timestamp = "${__time(,)}".toString(); // 获取时间戳
//String timestamp = String.valueOf(Long.valueOf("${__time(,)}"));