测试计划
Test Plan (测试计划):用来描述一个测试,包含与本次测试所有相关的功能,也就是说一个测试的所有内容都是基于一个测试计划的,一个测试都以一个测试计划开始,所以要测试,就需要有一个测试计划,然后在这个测试计划下再创建和添加其他组件。
打开一个JMeter界面,只能打开一个测试计划,不能在一个面板上创建多个测试计划,要打开多个测试计划,就只能打开多个JMeter界面;
测试计划面板可以添加“用户定义变量”和“依赖的库”等;
Threads Users(线程组):性能测试需要模拟大量用户的访问,线程组就是用来完成该工作的,一个线程组可以看做一个虚拟用户组,线程组中可以设置很多线程,每个线程代表一个虚拟用户,线程组中设置好的线程数量在测试执行过程中不会发生改变。
做性能测试,设置线程组是必不可少的一步,它是一个测试计划的基本组成部分;
线程组面板可以设置线程数、多长时间启动设置的线程数、每个线程执行的次数;
取样器(Sampler)是性能测试中向服务器发送请求的元件,模拟用户的一个操作,如果是向服务器发送http请求,那该取样器可以看做是一个没有界面的浏览器;
JMeter支持多种不同的取样器Sampler ,如 HTTP Request Sampler 、 FTP Request Sampler 、Java Request Sampler 、JDBC Request Sampler 等,每一种不同类型的取样器Sampler 可以根据设置的参数向服务器发出不同类型的请求。
取样器我们可以理解为:与要测试的系统进行交互的一个媒介,就像生活中你要给别人打电话,那你需要一部手机,手机就是媒介;
下面我们分别介绍三种取样器:Http请求取样器、JDBC请求取样器、Java请求取样器;
用以发送Http请求,请求http接口
用以发送jdbc请求,以jdbc协议请求访问数据库
用以发送java请求,测试Java程序,需要基于JMeter测试框架编写测试用例。
步骤如下:
1) 新建一个普通的Java工程
2) 添加JMeter的包引用,这些包位于 JMeter安装目录/lib/ext下,一般只需要ApacheJMeter_core.jar和ApacheJMeter_java.jar这两个jar依赖。
3) 新建一个Java Class,并继承“AbstractJavaSamplerClient”,AbstractJavaSamplerClient中默认实现了四个可以覆盖的方法,分别是“getDefaultParameters”,“setupTest”,“runTest”和“teardownTest”方法。
getDefaultParameters 方法主要用于设置传入界面的参数;
setupTest方法为初始化方法,用于在执行测试前的一些初始化工作;
runTest方法为性能测试时的线程运行主体,执行的业务都放在该方法中;
teardownTest方法为测试结束方法,可以用来进行一些资源释放工作;
4) 代码编写完毕后,将代码打成jar包,然后拷贝到JMeter的安装目录\lib\ext下,然后启动JMeter即能在Java请求面板的下拉列表中看到刚才编写的Java类;
注意:
● 如果你的jar依赖了其他第三方jar,需要将其一起放到\lib\ext下,否则会出现ClassNotFound错误;
● 如果将jar放入\lib\ext后,在Java请求面板下依然无法找到编写的类,通常重启一下JMeter即可。
监听器用来收集JMeter的测试结果,JMeter的测试结果由监听器监听并记录下来的,记录下来的测试结果它能以多种方式展示;
用来展示测试的结果信息
对每个请求,统计它的响应信息并提供请求数,平均值,最大值,最小值,错误率,大约吞吐量(以请求数/秒为单位)和以kb/秒为单位的吞吐量。
添加聚合报告是非常重要的,通过聚合报告可以观察性能测试的平均值情况;
● Label - 请求对应的name属性值。
● Samples - 具有相同标号的样本数,总的发出请求数。
● Average - 请求的平均响应时间。
● Median - 50%的样本都没有超过这个时间。这个值是指把所有数据按由小到大将其排列,就是排列在第50%的值。
● 90% Line - 90%的样本都没有超过这个时间。这个值是指把所有数据按由小到大将其排列,就是排列在第90%的值。
● 95% Line - 95%的样本都没有超过这个时间。这个值是指把所有数据按由小到大将其排列,就是排列在第95%的值。
● 99% Line - 99%的样本都没有超过这个时间。这个值是指把所有数据按由小到大将其排列,就是排列在第99%的值。
● Min - 最小响应时间。
● Max - 最大响应时间。
● Error % - 本次测试中,有错误请求的百分比。
● Throughput - 吞吐量是以每秒/分钟/小时的请求量来度量的。这里表示每秒完成的请求数。
● Received KB/sec - 收到的千字节每秒的吞吐量测试。
● Sent KB/sec - 发送的千字节每秒的吞吐量测试。
以上数据没有显示单位的都为毫秒;
以图形的方式展示测试的结果,图表底部参数的含义如下:
样本数目:总共发送到服务器的请求数。
最新样本:代表时间的数字,是服务器响应最后一个请求的时间。
吞吐量:服务器每分钟处理的请求数。
平均值:总运行时间除以发送到服务器的请求数。
中间值:代表时间的数字,有一半的服务器响应时间低于该值而另一半高于该值。
偏离:服务器响应时间变化、离散程度等,换句话说,就是数据的分布。
将数据以表格的形式展示出来;
该组件可以为我们的http请求设置默认的值。比如:我们创建一个测试计划有很多个请求且都是发送到相同的server,这时我们只需添加一个 Http request defaults组件并设置“Server Name or IP”,然后添加多个http请求且都不用再设置"server name or ip",这些http请求会默认使用Http request defaults组件设置的值。
配置JDBC请求的数据库连接信息,用来访问数据库;
配置Java请求的默认值信息;
对于一个测试计划中,多次被使用的公共值,可以通过自定义变量为后续JMeter脚本修改带来很大便利,修改一个变量,其他引用该变量的位置将全部被修改。
JMeter自定义变量,在配置元件下,可以添加用户定义变量,到时候在脚本的地方直接引用即可,引用方式:${变量名}
执行测试在固定的时间后开始执行;
在性能测试时,为了能模拟真实的用户请求,我们需要将每次请求发送的参数数据都不一样,这个过程称为参数化。
JMeter提供一种函数助手可以帮我们实现这一功能;
函数参数化,通过菜单栏的 options –>函数助手 打开,在打开的对话框中可以有多种函数方式;
我们介绍一种csvread 的方式,通过读取一个csv的文件,也就是一个txt文件来实现参数值的变化;
上面一行添加我们的txt文件及路径,txt文件里面两个值逗号分开即可,最后通过生成一个变量,把这个参数变量放到你需要的地方,替换原来写死的内容。