性能测试工具篇-jmeter实现关联以及jmeter乱码问题解决
关联:上一步返回的数据,下一步能拿到
后置处理器:关联概念的应用器,用于对Sampler发出请求后的服务器响应进行处理,一般用来提取响应中特定的数据
示例:以正则表达式处理器为例
- 入口,添加一个正则表达式处理器
正则表达式配置:
<title>(.+?)</title> //<title>开头,</title>结尾,
?注意1:这是错误示范,配错了,为了加深记忆,列出来了,下面会有正确示范。
添加一个访问百度的http请求
一会儿需要截取的内容:百度一下,你就知道(乱码了,讲完例子解决掉它)
3.添加一个结果树,观察结果用
4.添加一个Beanshell 取样器,在控制台把我们正则表达式提出来的值打印一下
代码如下:注意2:这里也是错误示范
System.out.println(${title})
5.运行后,http执行成功,Beanshell执行失败,这是为什么呢?
因为Beanshell需要自己定义一下字符串类型: 对应注意2
System.out.println("${title}") //不定义字符串类型,就会报错。
6.定义字符串后,Beanshell是执行成功了,但是,正则表达式的取样没有取出来,这是为什么呢?
因为 正则表达式处理器配置错了,没有定义title这个变量,应该是:
变量名称:title 对应注意1
7.这下截取是OK的,就是乱码了,下来我解决一下乱码的问题。
添加一个Beanshell后置处理器,写代码如下:
prev.setDataEncoding("UTF-8")
运行一下:
但是发送请求仍是乱码:
如何处理呢?在百度中找到一个一劳永逸的解决方法:
在jmeter.properties 中加入下面代码,重启即可,其他百度代码试了,不生效,就这个有用。
注意3:有了这个全局配置,可以不需要后置处理器那个动态处理返回结果乱码的配置了,这个配置一劳永逸,只要不重新安装jmeter都一直生效。
sampleresult.default.encoding=UTF-8
String contentEncoding = sampler.getContentEncoding();
if (contentEncoding == null || contentEncoding.length() == 0) {
contentEncoding = "UTF-8";
}
重启后运行一下之前脚本,解决了 好开心~
附加:1.正则表达式知识拓展:
http://www.runoob.com/regexp/regexp-syntax.html
2.解决jmeter请求和响应乱码问题:中:https://www.cnblogs.com/wushujun/p/7771165.html
https://www.cnblogs.com/tangmaokai/p/5830344.html
这两篇文章中的代码要结合起来使用才有效,亲测:
sampleresult.default.encoding=UTF-8
String contentEncoding = sampler.getContentEncoding();
if (contentEncoding == null || contentEncoding.length() == 0) {
contentEncoding = "UTF-8";
}