一、接口业务流程
1、获取 token 接口
http://192.168.1.4:9900/rest/getToken/
2、获取图片链接口
http://192.168.1.4:9900/regist/getImagePath/?token=89bd9d88f4f3421c9e639dfab0c
a423c&type=fql
返回数据:
{"msg": "\u6210\u529f", "code": 0, "detail":
{"image_path":
"/images/regist/20160822/img1471837595.25.jpg"}}
3、获取图片验证码接口
http://192.168.1.4:9900/images/regist/20160822/img1471850521.18.jpg
4、获取注册结果接口
http://192.168.1.4:9900/regist/imageView/?imagecode=zds4&phone=18202733159&t
oken=89bd9d88f4f3421c9e639dfab0ca423c&type=fql
二、JMETER 的使用
1、基本操作
1.1、新增测试计划
新增线程组,接着在该线程组下方新增 4 个“HTTP 请求”(添加-Sampler-HTTP 请求),
再在该线程组下方添加“察看结果树”(添加-监听器察看结果树)。也可以在每个 HTTP 请
求下方添加“察看结果树”,方便找到需要正则或参数化的数据。
一个完整的测试计划诞生了,如下图 2.1 所示
图 2.1
1.2、配置 HTTP 请求
以上图中的“HTTP 请求 01”为例进行说明。在 HTTP 请求窗口中的 Basic 标签页面上输
入服务器名称或 IP、端口号和路径(路径 URL 地址端口号后面的),其他默认,如下图 2.2-1
所示。此时可以执行下然后在当前的 HTTP 请求 01 的察看结果树里检查接口是否能正常访
问(如下图 2.2-2 所示)。
图 2.2-1
图 2.2-2
1.3、使用正则表达式
还是以上图 2.2-1 中的“HTTP 请求 01”为例进行说明。因为这个接口会得到一个动态值,
而 且 这 个 动 态 值 会 被 其 他 接 口 使 用 。 在 上 图 2.2-2 中 得 到 一 个 响 应 数 据 : {"msg":
"\u6210\u529f", "code": 0, "detail": {"token": "a53b93507c9d4f3fa43de4a44073bbb6"}}。
在使用第二个接口(HTTP 请求 02)时需要一个参数值 token,而这个值必须调用第一个接
口后才能获取到。如果让其他接口使用这个动态值,那么我们就需要在第一个接口(HTTP
请求 01)上使用正则表达式来获取这个返回值。
A、首先在第一个“HTTP 请求 01”上点击添加后置处理器-正则表达式提取器,如下图
3.3-1 所示
图 3.3-1
B、在下图 3.3-2 中输入“引用名称”(自定义数据名称,在其他接口中会用到)、“正则
表达式”、“模板”、“匹配数字(0 代表随机)”,其他默认。
图 3.3-2
说明:正则表达式可以看做是 LR 中的手动关联,从“察看结果树”-“响应数据”区域找到
返回值:{"token": "a53b93507c9d4f3fa43de4a44073bbb6"}。这条字符串就是需要关联的,
所以正则表达式输入为:"token": "(.+?)"。其他的不解释,照写即可,哈哈。完成以上设
置后运行下 JMETER,在“察看结果树”区域察看结果是否正确(绿色表示正确)。
C、在第二个接口(获取图片地址)中需要这个正则后的数据,此时在“HTTP 请求 2”
的 Basic 标签页面的 Parameters 区域添加接口参数(token 和 type),其中 token 值使用接
口 1 中的正则表达式中的变量名(token),此 token 值为${token},如下图 3.3-3 所示。最
后保存并执行,如果 HTTP 请求 2(获取图片地址)的响应数据显示为绿色则表示设置成功。
图 3.3-3
同理,HTTP 请求 3(获取验证码)接口中需要动态生成的图片地址,那么就需要设置
HTTP 请求 2(获取图片地址)接口中的正则表达式,然后再在 HTTP 请求 3 接口中的 URL
地址上引用接口 2 的正则变量即可。
1.4、变量参数化
此业务流程是首先获取 token 然后得到图片地址,接着获得验证码,最后得出注册信息。
在 HTTP 请求 4(获取注册信息)的接口信息中发现多了一个手机号(phone)。如果想得
到不同手机号对应的注册信息,那么就需要对接口 4 的手机号进行变量参数化。
A、在 HTTP 请求 4 上添加“配置元件-CSV Data Set Config”,如下图 4.4-1 所示
图 4.4-1
B、元件添加成功后,使用 TXT 新建一个 CSV 文件(注意,这里必须使用 TXT 文件然
后另存为 CSV 文件,不然执行时会报错全是乱码)。在 CSV 文件中输入多个值(这里是手
机号,一行显示一条手机号,我在 CSV 文件中写了 5 个不同的手机号),然后保存 CSV 文
件(记住存放路径)。
C、新建 CSV 文件后,切换到刚才添加成的 CSV Data Set Config 窗口,在“Filename”
输入 CSV 的存放地址(包括 CSV 文件名称),在 Variable Names(comma-elimited)中输
入自定义的变量名称(此变量会用到 HTTP 请求 4 的参数值中,我这里设置为 phonenum),
其他默认,如下图 4.4-2 所示
图 4.4-2
D、现在切换到 HTTP 请求 4(获取注册信息)窗口中,在 Parameters 标签页面中添加
4 个参数(因为此接口带 4 个参数)imagecode、token、type、phone。参数值分别是 zds4、
${token(HTTP 请求 1 中的正则表达式)、fql、${phonenum}(刚刚设置的参数化),如
下图 4.4-3 所示
图 4.4-3
1.5、循环次数
我们之前在 HTTP 请求 4(获取注册信息)中设置了手机号的参数化(CSV 文件中包含
5 个不同的手机号),现在返回到当前测试计划下的线程组窗口中。在线程属性区域输入线
程数、Ramp-Up Periond(in seconds)和循环次数即可。最后运行查看当前线程组下的察
看结果树结果是否正常。
1.6、并发之集合点
可以在线程组的任意位置添加集合点。集合点可以和线程组的“线程属性”和“调度器”结
合使用,主要是为了保证所有的用户能到达集合点并能发生并发。
添加方法:
1、鼠标右键-定时器-Synchronizing Timer,如下图所示
2、接着在 Synchronizing Timer 界面中的“Number of Simulated Users to Grounp by:”输入并
发数(表示当 X 个用户到达此集合点时就开始并发),如下图所示
注意:集合点中的并发数最好能被线程组中设置的用户数整除(线程用户数%并发数
=0),不然跑脚本会报错。集合点在线程组中可以随意拖动,放在请求前面。
1.7、测试计划组成
图 1
在上图 1 中可以禁用单个 HTTP 请求中的“察看结果树”(如下图 2 所示),这样看上去
更直观。因为我们需要的是最终结果。
图 2
2、资源监控
2.1、监控 Tomcat 服务
使用 jmeter 的 tomcat 监视器功能,可以通过向 tomcat 的 status 页面发送 get 请求,得到