目录
结果监听器,Text模式下中文显示Unicode码&中文断言失败
正则表达式提取器Regular Expression Extractor
Jmeter工作原理
JMeter通过线程组来驱动多个线程(类似LoadRunner中的虚拟用户) 运行测试脚本对被测试服务器发起负载,每一个负载机上都可以运行多个线程组,如图3-13中此测试计划有两个线程组。JMeter运行场景不仅可以在GUI方式中完成, 还可以使用命令行, 而且命令行运行的方式对于负载机的资源消耗会更小。
JMeter支持远程运行,下图是JMeter远程运行架构图。
(1) 控制机:运用多台JMeter负载机进行性能测试时, 被选中作为管理机的那台机器即是控制机。JMeter控制机也可以参与脚本的运行, 同时它也担负着管理远程负载机指挥远程
负载机运行的任务,并且收集远程负载机的测试结果。
(2) 负载机:向被测试应用服务器发起负载的机器, 控制机同时也是一台负载机。JMeter负载机受控制机(JMeter负载机) 管理。与其他支持远程运行的测试工具一样, 负载机受控
制机管理首先要启动一个客户端程序(Agent:jmeter-server.bat),这样控制机才可以接管负
载机。控制机会把运行的脚本隐蔽地发送到远程负载机,但是如果运行的测试脚本有参数文
件及依赖的jar包时, 控制机并不能把它们发送到远程负载机, 这种情况就需要手动拷贝了,
当然在利用JMeter做性能测试自动化时可不能这样, 我们可以用工具来实现自动拷贝。
(3)远程运行逻辑:
远程负载机首先启动Agent程序, 待控制机连接;
控制机连接上远程负载机:
控制机发送指令(脚本及启动命令)启动线程;
负载机运行脚本,回传状态(包括测试结果);
控制机收集结果并显示。
Jmeter操作手册
1.添加虚拟用户组
即添加线程组,Jmtert用线程组来驱动多个线程,用线程模拟虚拟用户,运行被测脚本对被测服务发起负载,每个负载机上可以运行多个线程组。
1)线程数:这里就是指虚拟用户数,默认的输入是“1”,则表明模拟一个虚拟用户访问被测系统,如果想模拟100个用户,则此处输入100。
2)Ramp-Up Period (in seconds): 虚拟用户增长时长。默认为1,虚拟用户从0递增到线程总数,所耗费的时长。比如这里输30,含义为:在30秒内,用户数从0增到100
3)循环次数:该处设置一个虚拟用户做多少次的测试。默认为1,意味着一个虚拟用户做完一遍事情之后,该虚拟用户停止运行。如果选中“永远”,则意味着测试运行起来之后就根本停不下来了,除非你把它强制咔嚓。
2.添加被测页面
3.添加结果监听器
4.添加图型结果
5.添加聚合报告
6.添加断言
1、apply to:通常发出一个请求只触发一个请求,所以勾选“main sampie only”就可以;若发一个请求可以触发多个服务器请求,就有main sample 和sub-sample之分了
2、要测试的响应字段:
(1)一般的http响应,都勾选“响应文本”;
(2)url样本是对sample的url进行断言,如果请求没有重定向,就请求url,如果有重定向,就请求url和重定向url;
(3)响应代码:http响应代码,如101,200,302,404,501等。当我们要验证404,501等http响应代码时,需要勾选“ ignore status”。因为当http 响应代码为400,500时,jmeter默认这个请求时失败的;
(4)响应信息:响应代码对应得响应信息,例如“OK"
3、模式匹配:
(1)包括:返回结果包括你指定的内容,支持正则匹配
(2)匹配: 相当于 equals 。当返回值固定时,可以返回值做断言,效果和equals相同 ;
正则匹配 。 用正则表达式匹配返回结果,但必须全部匹配。 即正则表达式必须能匹配整个返回值,而不是返回值的一部分。
(3) SubString:与 “包括”差不多,都是指返回结果包括你指定的内容,但是subString不支持正则字符串
(4) 否:就相当于取反。 如果断言结果为true,勾选“否”后,最终断言结果为false。如果断言结果为false,勾选“否”后,则最终断言结果为 true
4、要测试的模式:输入结果期望值(空格要去掉)
引入参数文件&自定义变量
定义请求头
结果监听器,Text模式下中文显示Unicode码&中文断言失败
断言响应文本时,取的是结果监听器里text模式下的内容,所以如果监听器text模式下中文异常,那用中文断言也会失败,解决这个问题,其实就是要解决text模式下的编码格式问题。三步:1.修改配置文件,申请编辑格式为utf-8 2.新增BeanShell脚本文件 3.重启Jmeter
1.修改配置文件,申请编辑格式为utf-8
Jmeter安装目录bin/jmeter.properties
开启如下开关,并指定格式为UTF-8
sampleresult.default.encoding=UTF-8
2.新增BeanShell脚本文件
脚本内容如下:
String s=new String(prev.getResponseData(),"UTF-8");
char aChar;
int len= s.length();