在了解测试的相关理论后,需要对一些测试工具进行进一步的学习。在前面《软件测试的艺术》的书中已经展示了性能测试是系统测试关键的一种测试,所以我们加强对性能测试的理解——包括性能测试用例,性能测试工具,性能测试报告和性能测试流程等。
《零成本实现Web性能测试——基于Apache?JMeter和Gatling》这本书共有20章
- 性能测试基础
- JMeter基础知识
- Web性能测试脚本录制与开发
- 数据库性能测试脚本开发
- FTP性能测试脚本开发
- LDAP性能测试脚本开发
- Web?Service性能测试脚本开发
- JMS性能测试脚本开发
- 服务器监控测试脚本开发
- 详解JMeter测试元件
- JMeter进阶知识
- JMeter性能测试实战——电话销售系统
- Gating基础知识
- Gatling?会话
- Gatling?HTTP协议
- Gatling?JMS
- Gatling性能测试实战——搜索引擎
本文首先从性能测试的基本概念入手,简要介绍了性能测试的定义、目的、分类、关注指标和基本流程,然后对JMeter做了一个概要介绍,主要包括JMeter的特点和一些技术术语。
性能测试基础
性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。
性能测试的目的是验证软件系统是否能够达到用户提出的性能指标,同时发现软件系统中存在的性能瓶颈,进而优化软件,最后起到优化系统的目的。主要包括:
- 评估系统的能力:测试中得到的负荷和响应时长数据可以被用于验证所计划模 型的能力,并帮助做出决策。
- 识别系统的弱点:受控的负荷可以被增加到一个极端的水平,并突破它,从 而修复体系的瓶颈或薄弱的地方。
- 系统调优:重复运行测试,验证调整系统的活动得到了预期的结果,从而改进性能。
- 检测软件的问题:长时间的测试执行可导致程序发生由于内存泄露引起的失败,揭示程序中隐含的问题或冲突。
- 验证稳定性和可靠性:在一个生产负荷下执行测试 一定的时间是评估系统稳定性和可靠性是否满足要求的唯一方法。
性能测试类型包括负载测试、强度测试、容量测试等
- 负载测试(Load Testing):通过测试系统在资源超负荷情况下的表现,以发现设计上的错误或验证系统的负载能力。
- 压力测试(Stress Testing):在软件工程中,压力测试是对系统不断施加压力的测试,是通过确定一个系统的瓶颈或者不能接收的性能点,来获得系统能提供的最大服务级别的测试。
- 容量测试(Volume Testing):确定系统可处理同时在线的最大用户数。
常见的观察指标:
B/S架构:平均每秒响应次数,平均每秒业务脚本的迭代次数,成功的请求,失败的请求,成功的单击次数,失败的单击次数,每秒单击次数,每秒成功的单击次数,每秒失败的单击次数,尝试连接数,吞吐率
C/S架构(软件后台通常是数据库):用户连接数,数据库死锁,数据库Cache的命中情况
其他:CPU占用率、 内存占用率、数据库连接池等
性能测试基本流程
- 明确性能测试需求
- 制定性能测试方案
- 测试背景
- 测试目的
- 测试范围
- 测试进入条件
- 测试退出条件
- 测试指标要求
- 测试策略
- 测试时机
- 测试风险
- 测试资源
- 编写性能测试案例
- 执行性能测试案例
- 分析性能测试结果
- 生成性能测试报告
- 测试基本信息,包含:测试目的、报告目标读者、术语定义、参考资料
- 测试环境描述,包含:服务器软硬件环境、网络环境、测试工具、测试人 员
- 性能测试案例执行分析:需要详细描述每个测试案例的执行情况,以及对 对应测试结果进行分析
- 测试结果综合分析及建议:对本次性能测试做综合分析,并给出测试结论 和改进建议
- 测试经验总结
JMeter基础知识
Apache JMeter是100%的Java桌面应用程序,用于对软件做压力测试。它最初被设计用于Web应用测试,但后来扩展到了其他测试领域。
JMeter主要特点
- 支持对多种服务器/协议类型进行测试
- 支持通过录制/回放方式获取测试脚本
- 具备高可移植性,是100%纯Java程序
- 采用多线程框架,允许通过多个线程并发取样以及通过独立的线程组对不同的功能同时取样
- 精心设计的GUI支持高速用户操作和精确计时
- 支持以缓存和离线的方式分析/回放测试结果
- 具备高扩展性
JMeter常用术语
- 采样器(Sampler):采样器是JMeter测试脚本的基础单元,用户可以用它来向服务器发出一个特定的请求,采样器会在超时前等待服务器的响应。
- 逻辑控制器(Logic Controller):用户通过逻辑控制器来控制JMeter测试脚本的执行顺序,以便测试能够按照用户期望的顺序和逻辑执行。
- 监听器(Listener):监听器被用来收集测试结果信息,并以用户指定的方式加以展示。
- 配置元件(Configuration Element):配置元件被用来设置一些JMeter测试脚本公用的信息。
- 断言(Assertion):断言被用来验证服务器实际返回的信息,与用户期望的情况是否相符。
- 定时器(Timer):定时器被用来保存JMeter测试脚本与时间相关的一些信息,例如思考时间(Think Time)。
- 前置处理器(Pre-Processor):在前置处理器的作用范围内,任何采样器被执行前,都要先执行前置处理器。
- 后置处理器(Post-Processor):在后置处理器的作用范围内,任何采样器被执行后,都要执行对应的后置处理器。
- 测试计划(Test Plan):测试计划是JMeter测试脚本的根节点,关于整个测试脚本的一些基础设置,可以在测试计划中设定,例如用户定义变量
- 线程组(Thread Group):线程组定义了一个虚拟用户池,其中每一个虚拟用户都使用同样的测试脚本。
- 工作台(WorkBench):工作台被用来保存暂时不使用的测试元素,当测试人员保存测试计划时,工作台中的内容不会被一起保存。
|