如何编写Load Impact负载测试脚本以仅模拟Chrome用户?

时间:2015-04-17 15:13:48

标签: scripting load-testing stress-testing

我们在Load Impact上经常遇到这个问题,因此我将其添加到Stack Overflow社区以便于查找

问:从服务器加载内容时,不同浏览器的行为会有所不同。此外,某些网站/应用根据正在使用的浏览器提供不同的内容。如何使我的Load Impact负载测试模拟某个浏览器?

1 个答案:

答案 0 :(得分:0)

要模拟特定浏览器,您可以使用加载脚本API函数http.set_user_agent_string()和http.set_max_connections()来配置模拟客户端,使其行为就像是有问题的浏览器一样。

这是我们执行IE6

仿真的代码
-- Emulating IE6
http.set_user_agent_string("Mozilla/5.0 (Windows; U; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)")
http.set_max_connections(34, 2)
-- make several HTTP requests as IE6
http.request_batch({
  {"GET", "http://test.loadimpact.com/"},
  {"GET", "http://test.loadimpact.com/index.php"},
  {"GET", "http://test.loadimpact.com/news.php"},
  {"GET", "http://test.loadimpact.com/contacts.php"}
})

在上面的示例中,我们将模拟客户端配置为执行以下两项操作:

使用Windows XP上运行的Internet Explorer 6浏览器使用的特定 User-Agent 字符串 每个目标主机使用最多2个并发连接,第一个示例中使用最多34个并发连接like IE6 would 结果是因为我们所做的所有四个请求都是针对同一个主机(“test.loadimpact.com”),所以将使用2个连接来并行获取2个内容。如果每次交易都需要100毫秒意味着整批请求将为IE6完成总共200毫秒。

以下是相同的代码,但改为模仿Chrome 22

-- Emulating Chrome 22
http.set_user_agent_string("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1")
http.set_max_connections(17, 6)
-- make several HTTP requests as Chrome 22
http.request_batch({
  {"GET", "http://test.loadimpact.com/"},
  {"GET", "http://test.loadimpact.com/index.php"},
  {"GET", "http://test.loadimpact.com/news.php"},
  {"GET", "http://test.loadimpact.com/contacts.php"}
})

Chrome 22最多使用6 concurrent connections to the same host, and up to 17 concurrent connections in total。在我们的示例中,这意味着Chrome可以打开4个并发连接到“test.loadimpact.com”主机并并行获取所有四个项目。如果每个项目需要100毫秒才能获取,这意味着整批请求仅在100毫秒内完成。

当我们的模拟客户端发出请求时,我们在两个示例中设置的 User-Agent 字符串将在“User-Agent:”HTTP标头中发送到Web服务器,从而生成远程Web服务器相信客户端正在使用这种特定的浏览器/平台组合。对于某些站点,它可以触发已经适应特定浏览器和/或平台的专用内容的传递。

由于Chrome在获取内容时使用的IE3并发连接数是同一主机的三倍,这意味着它可以更快地获取内容(最多快三倍)。这也会使目标主机/系统承受更大的压力,这就是为什么在运行负载测试时模拟正确的浏览器组合非常重要。

要详细了解影响性能的浏览器特性,Browserscope是一个很好的信息来源。