概念之一【压力测试】来自Visual Studio .NET 设计分布式应用程序可靠性测试:是指模拟巨大的工作负荷以查看应用程序在峰值使用情况下如何执行操作。对每个单独的组件进行压力测试后,应对带有其所有组件和支持服务的整个应用程序进行压力测试。集中测试从基础的功能测试开始。您需要知道编码路径和用户方案、了解用户试图做什么以及确定用户运用您的应用程序的所有方式。测试脚本应根据预期的用法运行应用程序。例如,如果您的应用程序显示 Web 页,而且 99% 的客户只是搜索该站点,只有 1% 的客户将真正购买,这使得提供对搜索和其他浏览功能进行压力测试的测试脚本才有意义。当然,也应对购物车进行测试,但是预期的使用暗示搜索测试应在测试中占很大比重。

概念之二【压力测试】来自.net应用程序性能测试:压力测试用来评估在超越大负载的情况下系统将如何运行。压力测试的目标是发现在高负载的条件下应用程序的缺陷(BUG)。包括:synchronization issues, race conditions, and memory leaks(内存泄漏)。压力测试能让您识别程序的弱点和在极限负载下程序将如何运行。

概念之三【压力测试】压力测试主要是为了发现在一(任意)定条件下软件系统的性能的变化情况。通过改变应用程序的输入以对应用程序施加越来越大的负载(并发,循环操作,多用户)并测量在这些不同的输入时性能的改变,也是通常说的概念:压力测试考察当前软硬件环境下系统所能承受的大负荷并帮助找出系统瓶颈所在。其实这种测试也可以称为负载测试,但是负载测试通常描述一种特定类型的压力测试??增加用户数量以对应用程序进行压力测试。

网上可能还有多于以上三种所描述的对压力测试这个名词的定义。

我比较赞同第一种概念,压力测试应该是指模拟巨大的工作负荷以查看应用程序在峰值使用情况下如何执行操作。扩展开来说,其一压力测试应该是较短时间的,其次是模拟巨大的工作负荷的,再次压力测试是要使应用程序的使用达到峰值。对这三点继续补充,对第一点长时间的压力测试转变成了负载测试;对第二点,对应用程序施加的压力是超负荷的,所以要不断地加压;第三点,使应用程序的使用达到峰值,如果超过这个界限则应用程序会崩溃或错误率激增,这个峰值是针对某一时刻来说的,也是针对某个临界的压力来说的,转变为场景设置中的说法是能够支持的大并发用户数。

在近的一次测试中定义了测试的目的是:需要了解AUT(被测应用程序)一般能够承受的压力,同时能够承受的用户访问量(容量),多支持有多少用户同时访问某个功能。在AUT中选择了用户常用的五个功能作为本次测试的内容,包括登录。大概的需求是这样。

接下来我AUT的登录说一说怎么用LoadRunner和Jmeter来实现场景的设置达到测试的目的。(注:对服务器的检测不是本次测试的重点,本次测试主要收集并发访问用户数和发生错误用户数)。

首先是对脚本的要求:

1、录制脚本(注意所有的脚本都应录制到Action中),自定义事务,事务从提交用户名和口令的脚本之前开始;

2、在定义事务开始的脚本前加入集合点;

3、在脚本中加入检查点,以登录成功的页面出现登录用户的ID即可;

4、参数化登录用户的身份;

其次是对场景设置的要求:

1、因为事先我们不知道将有多少用户访问是临界点,所以在测试过程中需要多次改变用户数来确定;
2、建议修改运行时设置,优化对服务器的访问;

3、计划的设置,每x时间后加载10用户(根据总用户数设置),完全加载后持续运行不超过5分钟(根据需要设置);

4、集合策略,当运行中的用户数达到集合点时释放;

5、注意事项,需要注意几个时间:1)服务器响应超时时间;2)登录事务迭代一次所使用的时间;3)集合点等待超时时间;4)计划中设置的间隔时间。在我的测试中事务运行一次的时间不超过30秒,通过修改脚本使它的运行时间达到一分钟左右, 服务器响应超时时间、结合点等待超时时间、计划中设置的间隔时间都设置为了2分钟。

这样场景开始运行后运行用户数呈阶梯增长,另外在每个上升点新增的用户都会随原来已经运行的用户并发访问服务器。

通过多次的运行和对测试结果中正在运行用户数与错误用户的对比,然后根据定义可接受错误率可得到该功能的大并发访问的用户数。

以上测试中排除了对网络、客户端等的要求。在实际测试中首先要保证这些资源是足够的。

使用Jmeter也能够达到上述描述的场景的测试,并且更加的便捷。