软件性能测试软件性能测试软件性能测试软件性能测试 软件性能测试是什么?软件性能测试是什么? • 性能测试的必要性 • 性能测试的目标 – 考察系统是否满足预期的性能要求 – 作为对系统进行调优的参考 – 考察系统的可扩展性 –用性能测试手段发现系统存在的问题 – 提供部署方案的参考 第一部分第一部分 性能测试基本概念性能测试基本概念 性能测试的应用领域性能测试的应用领域 • 验证能力 • 能力规划 • 性能调优 • 缺陷修复 几个性能测试的实际应用示例几个性能测试的实际应用示例几个性能测试的实际应用示例几个性能测试的实际应用示例 • 某 ASP (Application Service Provider)在升级了 自己的系统后,为了验证新的系统是否能满足性能要 求 • 某集成商在完成集成项目后,需要向用户提供项目的 性能测试报告 • 某软件提供商在确定了使用新平台的产品架构后,要 验证架构是否能满足性能要求 • 某软件在现场出现了实验室测试中没有出现的并发问 题,需要在实验室对问题进行分析定位 性能测试中的基本概念性能测试中的基本概念性能测试中的基本概念性能测试中的基本概念 • 响应时间(Response Time ) • 点击数(Hits ) • 页面请求(Page view ) • 吞吐量(Throughout ) • 并发用户(Concurrency User ) • 资源利用率(Resource Usage ) 不同视角的系统性能不同视角的系统性能不同视角的系统性能不同视角的系统性能 • 用户视角 • 响应时间 • 稳定性 • 系统视角 • 延迟(网络延迟、数据库延迟) • 系统资源使用状况 • 开发者视角 • 代码实现 • 数据库实现 用户视角的系统性能用户视角的系统性能用户视角的系统性能用户视角的系统性能 • 响应时间——用户最重视的性能体验 – 2/5/10 原则 – 过长的等待时间会让用户烦躁和不安 • 稳定性——系统的崩溃带来的直接是用户的崩溃 – HTTP 500 – HTTP 404 – Connection Refused – 应用服务器/ 数据库崩溃 响应时间的分解(响应时间的分解(响应时间的分解(响应时间的分解(WEB WEB WEB WEB 应用)应用)应用)应用) •响应时间= 网络响应时间+ 应用程序响应时间 •响应时间= (N1+N2+N3+N4)+(A1+A2+A3) 影响性能的因素影响性能的因素影响性能的因素影响性能的因素 • 网络状况 • 硬件设备 • 系统/ 应用服务器/ 数据库配置 • 数据库设计和数据库访问实现(SQL 和SP ) • 业务的程序实现 开发角度性能问题的原因开发角度性能问题的原因开发角度性能问题的原因开发角度性能问题的原因 • 对所使用的技术不熟悉 • 系统架构设计的不合理 • 程序员的实现错误 性能测试的分类性能测试的分类性能测试的分类性能测试的分类 • 性能测试(Performance Testing ) • 负载测试(Load Testing ) • 压力测试(Stress Testing ) • 配置测试(Configuration Testing ) • 并发测试(Concurrency Testing ) • 容量测试(Volume Testing ) • 可靠性测试(Reliability testing ) • 失败测试(Failover Testing ) 不同测试类型和测试目标的关联不同测试类型和测试目标的关联不同测试类型和测试目标的关联不同测试类型和测试目标的关联 • 能力验证 – Performance Testing – Load Testing – Reliability Testing – Failover Testing • 缺陷修复 – Stress Testing – Configuration Testing – Concurrency Testing • 性能调优 – Performance Testing – Load Testing – Stress Testing – Configuration Testing • 能力规划 – Volume Testing – Configuration Testing – Load Testing 性能测试该在什么时候做?性能测试该在什么时候做?性能测试该在什么时候做?性能测试该在什么时候做? • 答案:依据你的性能目标 – 在设计阶段——验证架构的性能 – 在编码阶段——阶段性验证系统性能/ 性能调优/ 发现系统缺陷 – 在产品部署阶段——验收测试的一部分 – 在维护阶段——考察系统的可扩充性/ 定位系统缺陷 第二部分测试目标设定第二部分测试目标设定第二部分测试目标设定第二部分测试目标设定 性能测试需求的来源性能测试需求的来源性能测试需求的来源性能测试需求的来源 • 需求文档 • 设计文档 • 客户备忘录 确定测试目标的原则确定测试目标的原则确定测试目标的原则确定测试目标的原则 • “以需求为本” • 测试目标确定的经济性考虑 • 基于风险的测试目标确定 了解真正的性能测试需求了解真正的性能测试需求了解真正的性能测试需求了解真正的性能测试需求 • 识别项目干系人 • 隐藏在“测试”之后的实际想法 • 一个真实的案例 对照性能测试的应用领域对照性能测试的应用领域对照性能测试的应用领域对照性能测试的应用领域 • 检查你的需求落在哪个领域 • 了解你需要了解的 DiscussDiscussDiscussDiscuss • 疑问? • 我们遇到过哪些性能测试的需求? • 你能识别每个性能测试要求之后的真实的 Story 吗? • 你是怎样确定性能测试需求的? 第三部分性能测试方案第三部分性能测试方案第三部分性能测试方案第三部分性能测试方案 在开始制订方案之前在开始制订方案之前在开始制订方案之前在开始制订方案之前 • 确定测试目标和需求 • 了解现状 • 业务使用状况 • 环境 • 确定需要监控的指标 • CPU 使用率 • Mem 使用情况 • …… 环境设计环境设计环境设计环境设计 • 网络环境 • 软硬件环境 • 环境的维护方案 • 时间同步问题 • “镜像”环境 “ “真实环境真实环境真实环境真实环境” ”与与与与“ “测试环境测试环境测试环境测试环境” ” • 性能测试结果的环境相关性 • 一个环境的测试结果很难拓展到另一个环境 • 根据不同的测试目标选择环境 • 能力验证/ 能力规划——选择实际的环境 • 性能调优——在非实际环境下的测试结果对性能调 • 优仍然有效 • 缺陷修复——部分缺陷可以在非实际环境下进行定位 • 选择环境的政治性考虑 数据设计数据设计数据设计数据设计 • 数据库数据 • 方便识别和观察的数据 • 有特殊含义的数据 • 数据维护方案 数据设计的示例数据设计的示例数据设计的示例数据设计的示例 • 用户数据设计 • 业务数据设计 • 负载数据设计 • 测试过程中的数据验证 用例和场景设计用例和场景设计用例和场景设计用例和场景设计 • 对业务的分析和分解 • 根据业务确定用例 • 不同用例按照不同发生比例组成场景 • 了解每个场景的实际意 用例与场景示例用例与场景示例用例与场景示例用例与场景示例 • 背景:一个进销存系统,包括登录、货物入库、订单 处理、货物出库、查询五个模块 – 用例设计:针对模块设计用例 • 场景设计: – 场景1 :10 %登录,10 %入库,30 %订单,20 %出库,30 %查 询(1000 用户)——日常 – 场景2 :10 %登录,90 %查询(400 用户)——周末盘点 – …… 设定需要监控的资源设定需要监控的资源设定需要监控的资源设定需要监控的资源 • CPU 利用率 • Mem 使用情况 • Disk I/O 状况 • 数据库监控 • JVM 使用状况监控 测试脚本准备测试脚本准备测试脚本准备测试脚本准备 • 测试工具的录制 • 在录制的基础上进行修改 • 验证脚本的正确性 • 脚本的维护 其他需要注意的地方其他需要注意的地方其他需要注意的地方其他需要注意的地方 • 应用服务器的Warm up 问题 • 应用服务器的Cache • 时间同步 • 浏览器或客户端应用的Cache 考虑系统对性能测试的支持考虑系统对性能测试的支持考虑系统对性能测试的支持考虑系统对性能测试的支持 • 必要情况下,可以考虑修改代码以支持性能测试 • 自行开发的测试工具可以部分弥补系统可测试性不足 的缺陷 DiscussDiscussDiscussDiscuss • 你做过的性能测试中,有遇到方案设计方面的难题 吗? • 在方案设计的前期,根据需求进行相关数据的 • 收集非常关键,你是怎样来收集这些数据的? • …… 测试工具在性能测试中的地位测试工具在性能测试中的地位测试工具在性能测试中的地位测试工具在性能测试中的地位 • “工具不是万能的,但没有工具是万万不能的” • 会使用工具不等于会做性能测试 • 工具不能代替的 • 确定测试需求 • 制订测试方案 • 分析测试结果 • 工具可以完成的 • 产生负载和压力 • 收集资源数据 • 生成报表 性能测试工具组成性能测试工具组成性能测试工具组成性能测试工具组成 常用的性能测试工具常用的性能测试工具常用的性能测试工具常用的性能测试工具 • 商业工具 – Mercury LoadRunner – Rational Performance Tester – SeagueSilkTest – RadviewWebLoad • 免费工具 – WAS • 开源工具 – OpenSTA – JMeter – Grinder 性能测试工具的评估要点性能测试工具的评估要点性能测试工具的评估要点性能测试工具的评估要点 • 支持的协议 • HTTP/HTTPS 协议(几乎所有工具都支持) • FTP 、Telnet 等协议(所有商业工具、JMeter 支 持) • C/S 方式的数据库协议(目前只有商业工具支持) • 支持的平台 • 脚本语言 • 扩展性和灵活性 • 特殊需求(SessionID 、多IP 模拟等)
展开阅读全文