TesterJingel 2020-01-31
JMeter-性能测试
参考文档:https://jmeter.apache.org/usermanual/boss.html
一、问题
1、预计的平均用户数是多少(正常负载)?
2、预计的高峰用户数是多少?
3、考虑到这负载测试可能会使一台或多台服务器崩溃,什么时候是对我们的应用程序进行负载测试的好时间(下班时间或周末)?
4、应用程序有状态吗? 如果有,那应用程序如何管理状态的呢(用的cookie,会话重写还是其他方法)?
5、要达到的测试目的是什么?
二、资源
1、网络 :谁知道我们的网络拓扑情况? 如果遇到任何防火墙或代理问题,找谁帮忙解决。 如果能有一个专用测试网络(具有非常低的网络延迟)将是一件非常好的事情, 知道谁可以为您设置这将非常有用。 如果应用程序无法按预期扩展,谁可以帮忙添加其他硬件?
2、应用程序:谁知道我们要测试的应用程序是如何运行的? 正常测试顺序是:
小批量测试(我们可以对我们的应用进行基准测试吗?)
基准测试(平均用户数)
负载测试(最大用户数)
破坏性测试(我们的硬性限制是什么?)
测试过程可能会从黑盒测试发展到白盒测试(不同之处在于第一个不需要应用程序知识[被视为“黑盒子”],而第二个则需要应用程序的知识)。 在此过程中可能会发现应用程序的很多问题,因此请做好保护工作的准备。
三、平台
应该使用哪个平台来运行基准测试/负载测试?
该平台应该是一种广泛使用的硬件,并安装标准软件。请记住,如果您发布测试结果,则客户要做的第一件事就是雇用一名专业的人员对其进行验证。您最好尽可能地简化此人的工作。
对于Windows而言,Windows XP Professional系统已是最低要求了(其他系统的线程不能并发50-60个连接)
好的免费平台包括linux,BSD和Solaris Intel。如果您有更多钱,可以使用商业化的Linux。
对于非Windows平台,请用“ ulimit -n unlimited”来将每个进程可打开的文件数设置为不限制,并将该命令包括在用户帐户启动脚本(测试帐户的.bashrc或.cshrc脚本)中。
另请注意,某些Linux / Unix版本仅供服务器使用。这些通常很少或根本没有GUI支持,这样的操作系统应该可以在CLI模式下运行JMeter,但如果安装了最小的GUI环境,应可以在GUI模式运行JMeter。
随着进行大规模基准测试/负载测试,平台本身将成为限制因素。因此,有条件就用最好的硬件和软件。切记在发布的基准测试中应包括硬件/软件配置信息。
当您需要大量机器或想要测试网络延迟时,云可以为您提供帮助。 JMeter可以在云中几乎任何可用的架构上运行,因此可以轻松地安装在云实例上。如果您不想自己管理JMeter,则在Commercial Cloud PAAS中也支持JMeter。
不要忘记JMeter批处理(CLI)模式。出于以下几种原因,应在负载测试期间使用此模式:
如果您具有支持Java的功能强大的服务器,但可能没有快速的图形实现,或者您需要在远程登录。
与使用远程显示或客户端-服务器模式相比,批处理(CLI)模式可以减少网络流量。
用于GUI模式的Java AWT线程有时会通过阻止来更改注入行为
可以将批处理日志文件加载到工作站上的JMeter中进行分析,或者可以使用CSV输出并将数据导入电子表格中。
请记住,GUI模式用于脚本创建和调试,而不用于负载测试
四、工具
ping 这可以用来确定您是否可以到达目标站点。 可以指定选项,以便“ ping”提供与“ traceroute”相同的路由报告类型。
nslookup/dig 尽管用户通常会使用人类可读的Internet地址,但是您可能希望避免在执行基准测试/负载测试时避免DNS查找的开销。 这个工具可用于确定目标站点的唯一地址。
traceroute 如果您无法“ ping”目标站点,则可以使用它来确定问题(可能是防火墙或代理)。 它也可以用于估计总体网络延迟(在本地运行应提供尽可能低的网络延迟-请记住,您的用户将在可能繁忙的Internet上运行)。 通常,跳数越少越好。
五、如何增强JMeter?
有很多开源和商业提供商提供JMeter插件或其他资源以供JMeter使用。 其中一些列在JMeter Wiki上。 它们分为以下几类:
JMeterPlugins -扩展的JMeter插件
JMeterAddons -与JMeter一起使用的插件 ,浏览器,Maven和Jenkins的插件。
JMeterServices -第三方服务,例如 基于云的JMeter
请注意,这些在Wiki上的出现并不意味着任何Apache JMeter项目都认可。 任何支持请求都应直接联系相关的供应商。
六、为什么是Java?
为什么是java,而不是Perl或C? Perl可能是一个很好的选择,但除了Benchmark软件包似乎其他只给出了相当模糊的结果。而且,用Perl模拟多个用户是一个棘手的问题(可以通过从Shell脚本派生许多进程来模拟多个连接,但是这些不是线程,而是进程)。Perl社区大
如果您发现有人已经写了一些有用的东西,这可能是一个很好的解决方案。当然,C也是一个很好的选择(请查看Apache ab工具)。但是要编写所有基准测试应用程序所需的自定义网络,线程和状态管理代码。
Java为您免费提供了基准测试应用程序所需的自定义网络,线程和状态管理代码。 Java知道HTTP,FTP和HTTPS-以及RMI,IIOP和JDBC(更不用说cookie,URL编码和URL重写)。此外,Java为您提供了自动垃圾收集和字节码级别的安全性。