JMeter脚本录制入门

摘要:初学JMeter或者从其他性能测试工具如LoadRunner转到JMeter,上手之初总是很痛苦,本文使用JMeter录制一个简单的百度搜索的脚本,并实现参数化,来演示JMeter的基本使用,先跑起来再进一步地学习会容易很多。

JMeter脚本录制原理

JMeter工具本身可以采用代理的方式进行脚本的录制,JMeter录制时会启用一个代理服务器,浏览器配置了代理之后所有的请求就会经过JMeter再转到最终的服务器,这样浏览器和服务器之间的请求和响应就可以被JMeter捕获。

启用代理

JMeter默认使用8888端口作为代理服务器端口,录制前也需要把浏览器的代理启用并和JMeter的代理端口保持一致,以chrome浏览器和8888端口为例,在浏览器设置中打开代理设置并启用8888端口的代理服务。

JMeter通过File>Templates菜单项,选择Recording模板就可以创建一个带录制控制器的测试计划,点击其中的start按钮就会启动代理服务器。

录制前的准备

事务:性能测试中所谓的事务就是系统中的请求,如点击页面中的某个按钮会触发向后台的请求,这个操作就可以作为一个事务;为避免事务划分过于精细,也可以把一组紧凑功能的请求组合起来作为一个事务,这个需要根据不同的系统来灵活分配。

JMeter中的测试计划可以包含一个和多个线程组,线程组可以理解为就是一个测试用例,线程组内可以通过启用多个线程来模拟多个虚拟用户,线程组中包含录制的一个个请求,这些请求通过事务进行分组。

通过recording模板创建好的测试计划,我一般会稍作调整,因为我会事先规划好事务(根据个人习惯而定,也可以便录制边增加事务),而不是使用JMeter的自动分组功能,改动部分如下,由于这个示例非常简单,只是演示打开百度首页输入文本搜索,所以只规划两个事务。

开始录制

接下来就可以开始正式地录制了,首先要确保chrome浏览器启用了代理,然后点击JMeter脚本录制控制器中的start按钮启用代理服务。

其中Target Controller通过下来框选择第一个事务“01-打开百度首页”,这样录制的所有请求就会归到这个事务下。

点击start后首先会弹出证书相关提示,可以直接点击ok或者按照提示安装根证书,这样下次录制时就不再提示这个了。

点击OK后如果出现了Recorder: Transactions Control弹出框,就表示JMeter代理服务已经启用,这个弹出框就可以在录制过程中改变事务名称,由于事先我们已经规划好了事务,这里不要做任何操作,保留打开状态就好了。

然后就是打开chrome浏览器或者直接在已经打开的chrome浏览器中输入百度URL()后按回车打开百度首页(如果弹出不安全的链接提示,选择高级并继续访问)。

打开百度首页后,接下来目标控制器选择第二个事务(02-执行搜索),接下来的操作请求都会归并到新的事务下,在百度首页输入框输入python并点击搜索。

最后点击stop完成脚本录制,查看脚本发现两个事务控制中均多出了几个http请求,这就是刚才我们百度操作过程中产生的请求。脚本录制完成后记得保存到执行目录,脚本文件的后缀名为.jmx。

回放调测

先浏览一遍录制到的http请求,发现有个和百度毫不相干的请求,像这种无关的请求可以直接删除或者禁用掉就好了。

注意:回放前记得关闭浏览器的代理配置

点击启动按钮执行脚本回放,通过回放记录发现回放成功(因为本次示例不涉及任何登录操作,不需要做任何关联操作就可以正常回放,包含登录操作的系统需要执行关联操作才能正常回放,关于关联操作在后续文章中会介绍)。

参数化

接下来我们来配置线程组来模拟多个用户执行搜索操作,不同的用户可能搜索的内容也不同,我们可以通过参数化来实现。

右键线程组添加CSV Data Set Config元件,并在脚本所在目录下创建search.csv文件,文件内容如下。

执行搜索的http请求中wd参数原来为搜索的内容"python",现在使用${content}代替,表示从search.csv文件中的数据中取值。

线程组的配置中线程数(用户数)从默认值为1修改为5

再次回放脚本,然后查看回放记录发现每个请求会执行了5次,每个线程搜索的内容会从search.csv中逐行遍历,到达结尾后会从头开始遍历。