实验简介
在前面的学习中,我们已经利用JMeter完成了针对Agileone系统的协议级接口测试。我们也知道,性能测试技术的核心便是利用多线程技术发送协议请求,完成对大量用户访问系统的模拟。而JMeter的设计初衷其实就是为了性能测试,比如我们创建一个测试计划的第一步便是创建一个线程组。本实验就为大家讲解如果利用JMeter完成对Phpwind的登录和发帖的性能测试。
实验目的
(1) 掌握JMeter中的关联查找的用法。
(2) 掌握JMeter中的线程设计及用法。
(3) 掌握JMeter中的测试报告的用法。
实验流程
1. 实现Phpwind的登录取样器
我们已经为Phpwind创建了从testuser_1到testuser_100共100个用户,那么在性能测试过程中,我们应该实现用户的随机登录,这样更能模拟真实场景。
(1) 创建一个“HTTP请求”取样器,并命名为“DoLogin”,填写好对应的登录的POST请求参数。
(2) 为该取样器创建“响应断言”和“察看结果树”,后续请求同。
(3) 为该取样器创建一个“前置处理器”,并实现一个从1到100的随机数。
(4) 最终实现的测试请求如下:
2. 利用正则表达式关联验证码
由于在Phpwind中发帖时,必须指定一个字段“verify”,该值是一个随机数,我们必须使用正则表达式关联响应中的对应的值。这部分在接口测试的实现过程中已经有所掌握,此处我们主要看看在JMeter中如何实现:
(1) 添加一个“HTTP请求”取样器,并发送GET请求给“/phpwind/post.php?fid=2”获取响应。
(2) 为该取样器添加一个后置处理器,设置为“正则表达式提取器”,并为其进行如下设置:
(3) 对上述的几个输入字段简单做一个说明:
a) 引用名称:下一个请求要引用的参数名称,如填写verifycode,则可用${verifycode}引用它。
b) 正则表达式:圆括号包含的就是要提取的内容,这也是我们熟练应用的内容。
c) 模板:用$-$引用起来,如果我们设置的正则表达式查找到多个值,则序号表示处理哪一个值。
d) 匹配数字:0代表随机取值,1代表全部取值,通常情况下填0就好。
e) 缺省值:如果参数没有取得到值,那默认给一个值让它取。
3. 添加发帖请求
(1) 为该取样器设置一个用户参数,使用函数助手生成一个随机数,用为帖子标题和内容的随机数。
(2) 将上一步中获取到的verifycode作为POST请求正文verify字段的值。
(3) 最后生成的测试请求如下:
4. 确保每个请求下载全部资源
默认情况下,JMeter与接口测试一样,只负责当前请求页面的下载,而不会下载页面的其它附加资源,这显然是不符合真实情况的。所以我们需要下载页面的全部资源,在HTTP取样器中的“Advanced”标签页中,勾选“从HTML文件中获取所有包含的资源”即可。
5. 设计并发场景
本次执行我们仍然按照前面的Java脚本相同的场景设计:50个用户,每10秒钟并发5个用户,每个用户运行100次。具体设置如下: