Hi, 如果有任何想法与我沟通, 请用: lifr_nj 在 msn.com

性能测试学习之二: 要求和方法

上一篇 / 下一篇  2010-06-15 17:44:29 / 个人分类:QA

性能测试学习之二: 要求和方法

* 新的问题
前文, 我总结了性能测试的核心有三点
1. 响应时间
2. 吞吐量
3. 可靠型(长时间运行)

特别是两个曲线图:
    响应时间与vu
    吞吐量与vu
能提供关于性能的很多信息.

当然这是一种极度简化的情况, 适合于时间,人员资源都非常有限的情况, 以最小的成本获得最多的收获. 但是在实际项目中, 情况会更复杂一些, 对性能测试的要求也更多.比如老大刚给我的一个测试项目, 他的说法是"没有时间的限制, 尽可能全面的对产品做性能测试".

"什么叫尽可能全面?"对于经验丰富的老手来说, 这样的项目做起来是很惬意的, 没有时间压力嘛. 但对于我这样的菜鸟来说, 头大..... 我首先得要把各种测试需求明确处理, 然后找出对应的测试方法. 这些东西对于我来说, 都还是一团浆糊嘛. 能不能有条理的把这些东西明确下来? 明确下来的东西够不够全面? 我真的有点头大了.

* 测试场景之分类
任意一本性能测试方面的书, 我正在看的是"应用程序性能测试的艺术"和软件性能测试过程详解和案例分析", 关于测试要求和方法都是让人眼花缭乱的. 还是为了简化问题, 从大的方面, 我觉得可以把性能测试从方向上分成两类.
    1. 面向生产现场的
    2. 面向软件开发的(这里的"开发"指产品在release客户之前的整个开发过程)
之所以分成这样两类, 是因为他们对性能测试的要求不太一样, 导致后面的测试方法, 测试过程也不一样.

* 测试方向1 --- 面向生产现场的性能测试
要求:
对于面向生产现场的性能测试, 主要的要求比较简单和明确. 那就是
    性能的验证: 验证整个产品(软件, 硬件, 网路, ...)作为一个整体 能提供满足特定的性能要求.

比如说,
    500G的后台数据, 1000个在线用户, 300个并发访问, 平均响应时间小于6秒
    500个用户在1个小时内登陆系统,所有的用户都能登录,且登录时间控制在3分钟
    24*7运行不出问题
    ...

特点:
    1) 测试环境尽量和生产环境一致. 性能需求明确.
    2) 测试的直接客户更关注商业价值,而不是产品的实现技术.

* 测试方向2 --- 面向软件开发的性能测试
要求:
对于面向软件开发的性能测试, 要求会更多样, 典型的包括
    1) 找出性能缺陷(bug)
    2) 性能regression test, 确定在build之间没有performance downgrade
    3) 得到benchmark的数据, 作为某些分析的基础.
    4) 针对某一个transaction的性能测试(只跑此transaction)
    5) 在某一个特定的硬件平台, 绘制性能曲线, 作为市场推广, 性能规划的基础.
    7) ... ...

特点:
    1) 测试环境并不一定和生产环境一致, 性能需求也不明确.
    2) 测试直接客户是公司内部部门, 他们的要求各不相同. 也就是说要可能需要提供多种性能测试数据, 满足开发, 测试, 市场等各个部门对性能测试的要求.

* 性能测试类型
在确定了性能测试的大方向后. 再看看具体有哪些测试类型. 根据性能测试的方向, 结合具体要求来能确定需要做的具体测试类型.
我总结面一些具体的测试类型. 其中基准测试(benchmark testing)和负载测试(load testing)是核心, 其他测试是扩展.
    核心测试
    --------
    1) 某个transaction的基准测试(benchmark testing)
    在没有任何性能压力下, 跑一个transaction, 得到系统最快的响应时间. 这是一个比较的基础.

    2) 某个transaction的负载测试(load testing)
    针对某一个transaction, 只运行这一个transaction, 得到其性能曲线. 这也是一个比较的基础.

    3) 某个用户流程的负载测试(load testing)
    针对某一个用户流程, 比如用户ATM机从插卡到查询到取钱到退卡的整个流程, 得到其性能曲线

    扩展测试
    --------
    4) 性能验证测试(performance validation testing)
    模拟真实环境压力的场景.验证系统能满足期望的性能要求. 一般涉及多个transaction和多个用户流程.

    5) 压力测试(stress testing)
    针对某个特定场景进行压力测试. 加压力直至系统爆掉,因为主要任务就是加压, 所有thinking time都可以为0.

    5) 可靠型测试(longevity testing or reliability testing)
    一般选择真实压力场景, 让系统跑个几天.

    6)  并发测试(concurrency testing)
    针对某个特定的模块或者transaction, 关注其在多个用户同时访问的情况下的表现和行为.

    7) 性能回归测试(performance regration testing)
    在特定的某一个软硬件平台上, 按照特定的压力运行测试一定时间. 通过比较响应时间来判断是否有performance downgrade.

    8) 其他(to be added ...)

TAG:

 

评分:0

我来说两句

Open Toolbar