Jmeter录制脚本的方式有两种,一种是自身提供的HTTP代理方式进行录制,第二种是第三方工具Badboy也提供了录制支持。HTTP代理方式进行录制的原理是解析网络数据包,按Http协议包装成Http Request、Http Response等对象,这些对象就是我们能够方便识别的东西。

Jmeter脚本(.jmx)为xml格式,树形结构,由元件组成,使用“取样器”产生请求。

一、下面先讲解Badboy进行录制

简单点说Badboy就是一个浏览器模拟工具,具有录制及回放功能,还可以进行调试。我们可以用它来做自动化测试,因为它有捕获表单数据的功能。我们也可以用它来对web页面进行诊断,诊断系统响应快慢,响应数据大小。Badboy录制的脚步可以直接生产.jmx格式。

步骤1:

下载Badboy,下载网址为:http://www.badboy.com.au/,下载.exe文件直接点击安装到自己指定的目录下就可以了

步骤2:

打开Badboy,在地址栏输入请求的页面,回车或者点击-》开始进行录制。

jmeter可以写java脚本吗 jmeter写脚本步骤_测试计划

Badboy的录制方式有两种,一种是Request方式,一种是Navigation方式。在工具栏上点击“N”即切换Navigation方式。

jmeter可以写java脚本吗 jmeter写脚本步骤_jmeter可以写java脚本吗_02

这两种方式的区别如下:

request:模仿浏览器发送表单信息到服务器,每一个资源都将作为请求发送。

Navigation:记录用户鼠标动作,类似于著名的自动化工具QTP,回放时模拟一个点击。基于Jmeter脚本的要求,我们需要选用request方式进行录制,这些请求将会以jmx的格式保存下来,从而我们才可以导入Jmeter进行复用。

Bodboy打开就是默认的request方式,所以不用去设置。

在这里解释一下script的目录树结构:

  1. Test Suite1:默认的脚步根节点,类似于Jmeter中的测试计划根节点。
  2. Test1:测试活动根节点,我们可以理解成一个业务功能的脚步存放在此目录下。
  3. Step2:测试活动的步骤,如果一个业务过程比较长,我们可以分成多个测试步骤。比如录制登录CSDN,进入论坛,发布帖子

我们可以把录制的步骤分为三步:一是登录CSDN,二是进入论坛模块,三是发布帖子,录制的脚步如下图所示:

jmeter可以写java脚本吗 jmeter写脚本步骤_jmeter可以写java脚本吗_03

录制完成之后导出成Jmeter脚步,下面我们就可以在Jmeter中打开刚才录制的脚步。Jmeter会以树型结构显示脚步,执行时原则上按节点先后顺序往下执行,如下图所示

jmeter可以写java脚本吗 jmeter写脚本步骤_测试计划_04

下面我们来认识一下脚步中的各个元件

  • Test Plan:测试计划,Jmeter测试脚本根节点,每一个测试脚本都是一个测试计划,名称可以自己定义

在这个元件里面我们可以做什么呢?

(1)设置用户全局变量,即在“用户定义的变量”中定义

(2)独立运行每个线程组,如果一个测试计划中有多个线程组,设置此项可以生效

(3)Run teardown Thread Groups after shutdown of main threads,关闭住线程后运行teardown程序来正常关闭线程组(运行的线程本次迭代完成后关闭)

(4)函数测试模式,在调式脚本的过程中我们可能需要获取服务器返回的详细信息就可以选择此项

(5)add directory or jar to classpath,把测试需要依赖的jar包或包所在的目录加入类路径。

  • ThreadGroup:线程组,模拟虚拟用户的发起点,这里就不过多解释,不懂请看这个系列之前的文章
  • HTTP Cookie Manager:在IE访问web页面时会记录Cookie信息,Jmeter通过加入HTTP Cookie Manager来自动记录Cookie信息,如下图所示

jmeter可以写java脚本吗 jmeter写脚本步骤_线程组_05

  • User Defined Variables:用户自定义的变量,在此我们可以定义后面元件需要引用的变量对其进行赋值。jsessionid一般是服务器返回的,每个用户返回的都不一样,但是Badboy转换的脚步把jsessionid放到了此元件中,所以我们要把它去掉。

jmeter可以写java脚本吗 jmeter写脚本步骤_线程组_06

  • HTTP Header Manager:管理HTTP头信息,我们可以从中找到诸如User-Agent、Connection、content-type、Accept、Cookie、location302重定向地址等信息。

jmeter可以写java脚本吗 jmeter写脚本步骤_jmeter可以写java脚本吗_07

剩下的Step1、Step2、Step3就我们录制时候的步骤,现在转换成Jmeter脚本

现在我们来回放一下脚本,不幸的是脚本根本不通过,我们还需要调整一下脚本。

二、Jmeter配置代理进行录制

1、浏览器配置管理

打开浏览器顺着【工具】-【Internet选项】-【连接】-【局域网设置】进入如图所示页面

jmeter可以写java脚本吗 jmeter写脚本步骤_线程组_08

在代理服务器中,按上图进行设置,可以把localhost换成 127.0.0.1 ,端口换成你想设置的,但是不要与别的端口进行冲突,一般四位数的端口冲突比较少

2、Jmeter中配置代理

(1)添加线程组,在线程组里面添加HTTP Cookie管理器如下图所示

添加路径是:【线程组】右键--【添加】--【配置元件】-【HTTP Cookie管理器】

jmeter可以写java脚本吗 jmeter写脚本步骤_测试计划_09

(2)添加HTTP代理服务器,添加路径是:【测试计划】右键--【添加】--【非测试元件】-【HTTP代理服务器】

jmeter可以写java脚本吗 jmeter写脚本步骤_线程组_10

接下来设置代理服务器,(端口号既是我们在浏览器中设置的端口号)

目标控制器:决定将来录制的脚本放在哪个目录(我们把测试计划看成一颗目录树的话,这个目录就是树中的一个节点)。我们可以在【测试计划】-【线程组】下面添加节点,然后指定脚本放在此节点。如下图,我们在【线程组】下添加了【简单控制器】节点,然后我们就可以在“目标控制器”处选择它。

jmeter可以写java脚本吗 jmeter写脚本步骤_线程组_11

分组:录制脚本时将会增加很多节点,这些节点我们可以给它分组,便于查看与管理。对于HTTP请求我们可以把每一个URL看成是一个组,这样更好理解。如下图

jmeter可以写java脚本吗 jmeter写脚本步骤_jmeter可以写java脚本吗_12

  • 不对样本分组:罗列出录制到的所有HTTP请求。
  • 在组间添加分隔:加入以分割线命名的简单控制器。
  • 每个组放入一个新的控制器:每个URL产生的请求放在一个控制器下。
  • 只存储每个组的第一个样本:我们知道一个URL产生的HTTP请求可能不只一个,一张图片、一个样式表都会是一个HTTP请求,录制时将会产生很多的http请求,但是有时我们测试时会考虑缓存,实际上一些图片不用每次下载,我们也不关心这些图片产生的负载,我们可以根据实际情况选择忽略他们,只录制产生动态数据的http请求
  • Put each group in a new transaction controller:通俗点说就是每个URL的请求放入一个事务中,不管它有多少个HTTP请求,只要这个URL请求产生的

记录HTTP头信息:把Header头信息也录制下来。

添加断言:通俗讲就是检查点,在录制时加入空的检查点,后续我们需要自己填写断言规则。

Regex matching:检查点用正则表达式来匹配内容。

如何排除我们不需要的信息呢?看下图

例如:在包含模式里我们可以填“.*\.jsp”,意思是只在请求JSP文件时录制脚本

在排除模式上填“.*\.js”,在请求js文件时不录制脚本(通常js png gif css php woff 这些类型的文件都是不需要的)

这样可以根据实际情况来过滤自己不需要的文件

jmeter可以写java脚本吗 jmeter写脚本步骤_线程组_13

3、开始录制