今天,我将告诉您,在JMeter的帮助下,我们如何设置产品页面的缓存过程,如何在没有应用程序本身的情况下测试移动应用程序的操作,并在系统中创建2,000个用户而无需访问数据库。
谁不知道这里发生了什么,请阅读
文章的
第一部分 -我在其中讲述了JMeter如何帮助我们“抓住”一些用户在网站崩溃方面的问题。
如何快速缓存数千个产品页面
我们的另一个客户是一家意大利公司,生产用于室内,室外和装饰照明的设备。
我们客户的设备照亮了世界绘画,建筑古迹,古迹,商务中心和机场建筑物的杰作我们在Kentico上为该公司开发了网站。 它展示了照明设备的所有材料和模型-20,000份。 每个都有一个单独的页面。
网站发布后,我们发现了Kentico的一个令人不快的功能:它没有将媒体文件自动加载到缓存中的工具。 在更新并重新启动站点(这是经常发生的)之后,将重置缓存,并且大多数页面将打开10秒钟。 并非每个用户都准备好等待这么多。
我们看到了两种将媒体文件加载到缓存中的选项。 首先:要花很长时间才能通过浏览器手动浏览网站。 第二:写一个脚本来为我们做这件事-很合适!
我们决定使用JMeter:我们只是向他提供了完整的站点地图,他在上面行走,并将媒体文件发送到缓存。
这是一个简单的解决方案,但不是非常理想。 该脚本花费了六个(!!!)小时来完成。 需要一些更快的方法。
在对主题进行了一些研究之后,我们决定使用正则表达式。 JMeter能够从服务器请求页面中内置的资源以获取某些掩码。 这就是我们所利用的。 消除了不在服务器上的内容以及不需要加载到缓存中的内容(第三方图像,字体,样式等)之后,我们将脚本浏览页面所需的时间减少到两个小时。
这看起来像JMeter中的HTTP请求,仅加载某种类型的资产但这太长了:填充从车里雅宾斯克(Chelyabinsk)的9:00开始,需要一个小时,然后又花了两个小时在脚本上,结果我们将在12:00完成。 在意大利,时间是08:00,一些当地居民已经在早上6-7点开始工作。 网站运行缓慢,投诉不断涌现...我们需要进一步优化!
当我们意识到在所有20,000个产品页面上使用几乎相同的图像时,就做出了决定。 我们进行了分析,发现仅使用随机存储器的30%即可完全加载(使用所有内置资源),其余部分可以在不加载媒体文件的情况下运行。 因此,绝大多数材料-产品页面的图片,字体,脚本和样式-都属于缓存。 当用户与其中之一联系时,从服务器下载将仅需要一小部分内容,并且所花费的时间不超过1-2秒。
通过从“用户定义的变量”表中请求一个随机页面号,每次我们从列表中获得一个随机页面使用上述方法,我们得到了一个在90%的情况下都能快速运行的站点。 是的,在十分之一的情况下,最多需要30秒才能等待页面加载,而在另外九个情况下,一切都飞起来了。 只需15至30分钟。
现在,不再需要这些技巧-开发人员已经优化了缓存系统本身。 但是在那时,这个决定是真正的救赎,而且即使在释放和浇注之后,JMeter仍然是一个非常有用的工具。
如果只有他们的电子邮件和两个小时的工作时间,如何创建2000个应用程序用户
我要谈到的第三个客户是一家开发,制造和销售医疗设备的公司:从简单的手术刀到激光切割机,再到带有内置摄像头的复杂钻头。 他们的经理去诊所,与外科医生交流并向他们介绍他们的产品。 为此,他们在iPad上有一个特殊的应用程序:将医生的数据和感兴趣的工具列表输入其中。 随后,医生的电子邮件中出现了指向个人页面的链接,其中列出了所有这些工具,详细的描述和特征。 我们开发的正是这些针对外科医生的页面。 该应用程序和电子邮件通讯是由另一家公司制作的。
尽管我们只有一个后端,但JMeter在该项目上的任务之一是测试系统以创建此类页面的不同版本。 我们编写了一个脚本,以便使用随机数生成器创建各种类型的页面,然后将其发送到我们的工作电子邮件中进行验证。 一切都很简单。 如果没有一个案例,我什至不会在这篇文章中提到这个客户。
发布前几天,我的经理打电话给我,要求为该应用程序创建2000个用户。 困难在于我们无法访问实时服务器或数据库。 我们只需要通过CMS(在这种情况下,通过Umbraco)创建2,000个用户。 同时,在注册后,每个用户应收到近似以下类型的字母:
收到此类电子邮件后,用户将安装该应用程序并将默认密码更改为自己的密码要注册用户,需要五个字段:
我只有两个小时完成任务。 再次:2000个用户,每个用户五个字段,两个小时...来自管理器的数据以以下形式出现:

如果我是开发人员而不是QA专家,那么我将在perl中编写一个脚本:他将解析这些数据并迅速分散所有内容。 但是我选择了另一条路径,并且使用了最多(也许是)用于快速数据组织的理想工具-MS Excel。 电子表格可以拯救世界!
通过使用简单的操作来替换数据,消除多余的技巧,我创建了一个约1万行的文件,格式为:
登录1 | 约翰·史密斯
登录2 | 医生
...
名称1 | 约翰
...
我并不太在乎密码-我只写了PasswordNumber1并将此列在Excel中“扩展”到了所有2000个用户。 没关系,因为它仅用于第一个条目。 是的,我没有按字母顺序对一般电子邮件列表进行排序,这意味着随机密码猜测的可能性已降至最低。
通过剪贴板将这个文件提供给JMeter,我向后靠在椅子上,愉快地看着用户的创建过程。 处理数据和创建新用户的整个过程花费了1小时45分钟-甚至还剩咖啡时间!
结论: JMeter证明是一种方便的工具,可用于自动化测试移动应用程序的后端,并且突然间,还可用于自动化非标准任务-像这样的任务,该任务具有大量用户并提供有关它们的最少信息。
通常,JMeter可以用于(并且由我本人使用)各种任务。 例如,用于:
- 优化分析:进行负载测试,滚动优化修复,再次进行测试,比较结果;
- 查询安全性测试:使用代理编写脚本,不进行前端检查就直接向服务器发送请求,从请求中删除各种密钥,检查服务器是否响应充分;
- 检查标头的响应:我们编写了一个脚本,该脚本以循环的方式将请求发送到具有不同标头的同一页面,检查服务器的反应并查看应删除的内容;
- 列举授权组合:将带有密码的循环放入具有登录名的循环中,测试授权表;
- 检查攻击防范措施:我们发送请求以分流方式提交表单,并查看您的防护措施是否有效;
- API系统的自动化:API请求的任何结果都可以通过脚本进行处理,并在测试周期的下一步中使用-这样,您可以自动化任何此类系统的测试。
从以上所述,我们可以得出一个一般性的结论:JMeter是一种通用工具,是测试人员(老实说,对于开发人员)的真正瑞士刀。