妖碧落

导航

jmeter笔记

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_USER\Software\JavaSoft\Prefs\org\apache\jmeter\gui\action

 

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 + "&timestamp=" + 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(,)}"));

 

posted on 2020-01-09 10:00  妖碧落  阅读(341)  评论(0编辑  收藏  举报