如何使用Jmeter模拟爬虫测试
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Jmeter模拟爬虫测试相关的知识,希望对你有一定的参考价值。
参考技术A在构建Web应用程序负载压力测试时,您可能需要模拟一组用户“抓取”网站并随机单击链接。 特别是对于动态网站,如博客,新闻门户,社交网络等,新内容被频繁添加或甚至实时添加。 这种形式的测试能确保用户将获得流畅的浏览体验,并检查断开的链接或任何意外错误。
本文介绍了模拟网站“爬网”的3种最常用的方法:点击网页中找到的所有链接、使用html链接解析器和高级spidering测试计划。
1.单击网页中找到的所有链接
使用正则表达式提取得到的链接的过程在 JMeter的使用正则表达式 一文被描述。算法如下:
1a。 从响应中提取的所有链接 正则表达式提取 并将它们存储到JMeter的变量。 相关的正则表达式将是:
<a [^>] * href =“([^”] *)“
不要忘记设置 匹配编号No. 为 -1 提取所有的链接。 如果将其留空,则只返回第一个匹配项。
1b。 使用 的ForEach控制器 迭代提取的链接。
1c。 使用HTTP请求取样器点击选择URL,在 Output Variable 输出变量名中 。
演示
优点
配置简单。
稳定性。
故障转移和恢复能力。
缺点
正则表达式很难开发,对标记变化敏感,因此很脆弱。
实际上不是“爬虫”或“蜘蛛”,只是对链接进行请求。
2.使用HTML链接解析器
JMeter的提供了一个特殊的测试元件, HTML解析器的链接 。 此元素设计用于提取HTML链接和表单,并使用提取的值替换匹配的HTTP请求采样器相关字段。 因此,HTML链接解析器可用于模拟使用最少配置抓取网站。 方法如下:
2a。 把HTML解析器链接放入 Logic Controller 逻辑控制器 下
2b。 把HTTP请求取样器放入逻辑控制器下,配置 服务器名称或IP地址 和 路径 字段提取值限制在一个“有趣”的范围。 您可能希望专注于属于被测试应用程序的域,并且不希望它在Internet上爬网,因为如果您的应用程序有任何链接到外部资源; JMeter会去外面抓爬。 Perl5风格的正则表达式可以用来设置提取的链接范围。
演示
优点
易于配置和使用。
行为像一个“蜘蛛”。
缺点
零误差公差; 任何从响应中提取链接的失败将导致后续请求的级联失败。
3.高级“Spidering”测试计划
假设上述方法的局限性,您可能想要一个解决方案,它不会因为错误而崩溃,并且将爬行整个被测试的应用程序。 下面你可以找到一个参考测试计划大纲,可以用作你的“蜘蛛”的骨架:
3a。 打开主页面。
从中提取所有链接。
点击随机链接。
如果返回值有“good”的 MIME类型 (如果图片或PDF文件或任何链接提取链路结果将被跳过); 从响应中提取所有链接
所用元素的说明:
While Controller 是用来设置请求的最大额,所以测试不会永远持续下去。 如果您透过排程scheduling限制,可以略过。
Once Only Controller 用于执行调用的主网页只有一次。
XPath Extractor 用于过滤掉不属于该应用程序下测试不感兴趣例如 mailto, callto ,等等。一个示例XPath查询将看起来像网址等各个环节:
//a[starts-with(@href,'/') or starts-with(@href,'.') or contains(@href,'$SITE') and not(contains(@href,'mailto'))]/@href
使用XPath不是必须的,在某些情况下,它可能是非常内存密集型。 您可能需要考虑从响应中提取链接的其他方法。 它用于演示目的,因为通常XPath查询比CSS / JQuery,特别是正则表达式更加人性化。
__javascript() function 实际上做了三件事:
从XPath提取器提取的选择一个随机链接。
从URL的开始删除 ../。
将HTTP请求标题设置为当前随机URL。
Regular Expression Extractor 用于从响应中提取Content-Type头
If Controller 使得它使下一轮从响应中提取链接,如果响应已匹配的内容类型才启动。
性能测试之Jmeter学习
分布式部署(转载)
一、分布式介绍:
Jmeter 是java 应用,对于CPU和内存的消耗比较大,因此,当需要模拟数以千计的并发用户时,使用单台机器模拟所有的并发用户就有些力不从心,甚至会引起JAVA内存溢出错误。为了让jmeter工具提供更大的负载能力,jmeter短小精悍一有了使用多台机器同时产生负载的机制。
那么,是如何实现多台负载机同时运行的呢?当然不会多个人坐在多台负载机面前,一喊开始,大家同时启动jmeter。这种方式很笨,也很难达到真正的同步。其实,我们通过单个jmeter 客户端就可以控制多个远程的jmeter服务器,使它们同步的对服务器进行压力测试。
通过远程运行jmeter,测试人员可以跨越多台低端计算机复制测试,这样就可以模拟一个比较大的服务器压力,一个jmeter客户端实例,理论上可以控制任意多的远程jmeter实例,并通过他们收集测试数据。这样一样,就有了如下特性:
* 保存测试采样数据到本地机器
* 通过单台机器管理多个jmeter执行引擎。
* 没有必要将测试计划复制到每一台机器,jmeter GUI客户端会将它发往每一台jmeter服务器。
* 每一台jmeter远程服务器都执行相同的测试计划,jmeter不会在执行期间做负载均衡,每一台服务器都会完整地运行测试计划。
在1.4G Hz~3GHz 的CPU 、1GB 内存的 JMeter 客户端上,可以处理线程 100~300。但是Web Service 例外。XML处理是 CPU 运算密集的,会迅速消耗掉所有的CPU 。一般来说,以XML技术为核心的应用系统,其性能将是普通Web 应用的 10%~25% 。另外,如果所有负载由一台机器产生,网卡和交换机端口都可能产生瓶颈,所以一个JMeter 客户端线程数不应超过 100 。
采用JMeter 远程模式并不会比独立运行相同数目的非GUI 测试更耗费资源。但是,如果使用大量的JMeter 远程服务器,可能会导致客户端过载,或者网络连接发生拥塞。
二、分布式部署操作步骤:
(1)在所有期望运行jmeter作为 负载生成器的机器上安装jmeter, 并确定其中一台机器作为 controller ,其他的的机器作为agent 。
(2) 运行所有 agent 机器上的jmeter-server 文件(假定使用两台机器192.168.9.99 和192.168.9.130 作为agent)
(3)在controller机器的jmeter的bin目录下,找到jmeter.properties 文件,编辑该文件:
查找:
remote_hosts=127.0.0.1
修改为:
remote_hosts=192.168.9.99:1099,192.168.9.130:1099
(4)启动controller 机子上的jmeter应用jmeter.bat,选择菜单“运行”--->“远程启动”,来分别启动agent ,也可以直接选择“远程全部启动”来将所有的agent启动。
其它说明:
1、调度机(master)和执行机(slave)最好分开,由于master需要发送信息给slave并且会接收slave回传回来的测试数据,所以mater自身会有消耗,所以建议单独用一台机器作为mater。
2、参数文件:如果使用csv进行参数化,那么需要把参数文件在每台slave上拷一份且路径需要设置成一样的。
3、每台机器上安装的Jmeter版本和插件最好都一致,否则会出一些意外的问题。
以上是关于如何使用Jmeter模拟爬虫测试的主要内容,如果未能解决你的问题,请参考以下文章