背景
在负载测试中需要考虑的一个重要要素是思考时间(Think Time), 也就是在两次成功的访问请求之间的暂停时间。
有多种情形会导致延迟的发生: 用户需要时间阅读文字内容,或者填表, 或者查找正确的链接等。未认真考虑思考时间经常会导致测试结果的失真。例如,估计数值不恰当,也就是被测系统可以支持的最多用户量(并发用户)看起来好像要少一些等。
问题
Jmeter 提供了一整套的计时器(timer)来模拟思考时间(Think Time), 但是仍旧存在一个问题:如何确定适当的思考时间呢?
解决办法
幸运的是, JMeter 提供了一个不错的答案:使用 JMeter HTTP 代理服务器(Proxy Server)元件。
代理服务器会记录在使用一个普通的浏览器(如 FireFox 或 Internet Explorer)浏览一个 web 应用时的操作。 另外, JMeter 在记录操作的同时会建立一个测试计划(test plan)。 这个功能能提供以下便利:
- 不必手工建立 HTTP 访问请求, 尤其是当要设置一些令人乏味的参数时(然而,非英文的参数也许不能正常工作) ,JMeter 将会录制包括隐含字段(hidden fields)在内的所有内容。
- 在生成的测试计划中,Jmeter 会包含浏览器生成的所有的 HTTP 报头,如 User-Agent (e。g。, Mozilla/4。0), 或 AcceptLanguage (e。g。, zh-tw,en-us;q=0。7,zh-cn;q=0。3) 等。
- JMeter 会根据设置在录制操作的同时建立一些定时器,其延迟时间是完全根据真实的操作来设置的,现在让我们来看一下如何配置 Jmeter 的录制功能。 在 JMeter 的控制台上, 在工作台(WorkBench)元件上单击右键,然后选择” add the HTTP Proxy Server “。 注意是在 WorkBench 上单击右键而不是在 Test Plan 上, 因为现在是要为记录操作进行配置而不是要运行测试计划。 HTTP Proxy Server 的实现原理就是通过配置浏览器的代理服务器而使所有的访问请求通过 JMeter 发送(,因而被 Jmeter 把访问过程录制下来)。 HTTP 代理服务器(HTTP Proxy Server)元件的一些参数必须被配置: 端口 (port): 代理服务器的监听端口
- 目标控制器(Target Controller): 是代理用于存储生成的数据的控制器,默认情况下,JMeter 将会在当前的测试计划中找一个记录用的控制器用于存储,此外也可以在下拉菜单中选择任意控制起来存储,通常默认值就可以了。
- 分组 (Grouping):确定在测试计划中如何来为生成的元件分组。 有多个选项, 一般可以选择 “只存储每个组的第一个样本”,否则,将会原样录制 URLs,包括包含图像和 JavaScripts 脚本的页面。当然 也可以尝试一下默认值 “不对样本分组”("Do not group samples")。
- 包含模式 (Patterns to Include) 和 排除模式 (Patterns to Exclude):帮助过滤一些不需要的访问请求。
- JMeter 代理服务器 (Proxy Server),当你点击开始(Start)按钮时,代理服务器就会开始记录所接受的 HTTP 访问请求。 当然,在开始记录前,要首先设置好浏览器的代理服务器设置。在代理服务器元件中可以增加一个定时器子元件(配置元件),用于告知 Jmeter 来在其生成的 HTTP 请求中自动的增加一个定时器。Jmeter 会自动把实际的延迟时间存储为一个被命名为 T 的 Jmeter 变量,因此,如果在代理服务器元件里使用了高斯随机定时器,就应该在其中的固定延迟偏移(Constant Delay Offset)设置项里添上 ${T}(用于自动引用纪录的延迟时间),如图 4 所示。这是另一个节省时间的便利特性。
- 在代理服务器组建中增加一个高斯随机定时器,定时器将会使相应的的取样器被延迟。 延时的规则是,在上一个访问请求被响应并延时了指定的时间后,下一个被定时器影响的取样访问请求才会被发送出去。 因此, 你必须手工删除第一个取样器中自动生成的定时器,因为第一个取样器不需要定时器。
在启动 HTTP 代理服务器以前,要在测试计划中增加一个线程组(thread group),在线程组中增加一个录制控制器(recording controller)用于存储生成的结果。 否则, 生成的元件将会被直接添加到工作台里。另外, 在录制控制器里增加一个 HTTP 请求默认值元件 HTTP Request Defaults 元件 (是一个配置元件) 也很重要,这样 Jmeter 就不填写使用了默认值的字段。 录制完成后, 停止 HTTP 代理服务器; 在录制控制器元件上单击右键将记录的元件保存为一个文件用于以后重用,另外,不要忘了恢复浏览器的代理服务器设置。