性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。
1 性能测试技能树
性能测试是一项综合性的工作,致力于暴露性能问题,评估系统性能趋势。性能测试工作实质上是利用工具去模拟大量用户来验证系统能够承受的负载情况,找出潜在的性能问题,分析并解决。
具体的技能树如下:
2 性能测试成功与失败要素
性能测试几大难点:
(1) 需求分析
(2) 场景设计
(3) 性能诊断调优
(4) 环境搭建和模拟
性能测试判断是否通过:
-
现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
-
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
-
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
-
分享他们的经验,还会分享很多直播讲座和技术沙龙
-
可以免费学习!划重点!开源的!!!
-
qq群号:680748947
3 性能测试流程
- 业务学习:通过查看文档,手工操作系统来了解系统功能。
- 需求分析:分析非功能需求,确定性能测试范围,了解性能测试指标。
- 工作评估:工作量分解
- 设计模型:业务模型转化成测试模型。比如一个支付系统需要与银行的系统进行交互(充值或转出),由于银行不提供支持,这时会开发程序代替银行系统功能,保证性能测试能够正常开展。再比如登陆后新增人员,需要绑定测试,这也属于测试模型。模型需要关注的是如何实现,是否具有可操作性、可验证性。
- 计划编写:计划测试工作,在文档中明确列出测试范围、人力投入、持续时间、工作内容、风险评估、风险应对策略等。
- 脚本开发:录制或编写性能测试脚本
- 测试环境准备:包括服务器和负载机两部分,服务器是被测系统的运行平台,负载机是我们用来产生负载的机器,用来安装负载工具,运行测试脚本。
- 测试数据准备:根据数据模型来准备被测系统的主数据与业务数据(主数据是保证业务能够运行畅通的基础,比如菜单、用户等数据)
- 测试执行:性能测试成败关键
- 缺陷管理:对过程中发现的缺陷进行管理
- 性能分析:对暴露出来的问题进行分析,找出原因
- 性能调优:开发人员、性能测试工程师一起来解决性能问题
- 测试报告:测试工作的重要交付件,对测试结果进行报告,主要包括常见的性能指标说明(TPS、RT、CPU Using...),发现的问题。
性能测试主要交付件:
测试计划
测试脚本
测试程序
测试报告或阶段性性能报告
14. 评审:对性能报告中的内容进行评审,确认问题、评估上线风险。
4 性能测试通过标准
通过标准参考如下:
分类 | 用户量 | 指标 | 优先级 | 备注 |
事务处理类 | 300 (非高峰期) | 前端系统访问响应时间≤5 秒 | 中 |
|
查询类 | 300 (非高峰期) | 前端系统访问响应时间≤2 秒 后端 CPU 利用率 <=50% 后端内存利用率 <=50% | 高 | |
1000 (高峰期) | 系统访问响应时间≤10 秒 后端 CPU 利用率 <=70% 后端内存利用率 <=70% | 高 | ||
3000 (极限) | 系统未崩溃 请求未返回大量错误 | 低 | ||
统计类 | 简单统计类 | 系统响应时间≤10 秒 | 中 | 手动启动业务全过程跟踪 |
复杂统计类 | 系统响应时间≤30 秒 | 中 | 手动启动运行月报 |
5 性能测试趋势
性能测试将会在自动化的道路上越走越远,持续集成也将更好的集成性能测试部分。
6 Jmeter 整体简介
1 安装 jmeter
1.1 登陆官方网站,下载 jmeter
http://jmeter.apache.org/,下载 jmeter, 如图:
1.2 解压后, 运行 “bin/jmeter.bat”
jmeter 界面能正常打开,表示安装成功,如图:
PS:Jmeter 是支持中文的, 启动 Jmeter 后, 点击 Options -> Choose Language 来选择语言
1.3 JDK 环境变量配置
计算机→属性→高级系统设置→高级→环境变量,如图:
3-1. 添加用户变量 JAVA_HOME , 变量内容填写 jdk 的目录, 如 C:\Program Files\Java\jre1.8.0_131
3-2. 添加系统变量 CLASSPATH, 变量值填写 .;% JAVA_HOME%\lib;% JAVA_HOME%\lib\tools.jar(注意最前面有点和分号:点表示当前路径,分号表示分隔符)
3-3. 添加系统变量 PATH, 变量值填写 % JAVA_HOME%\bin;% JAVA_HOME%\jre\bin;(注意原来 Path 的变量值末尾有没有;号,如果没有,先输入;号再输入上面的代码)
3-4. 检验是否配置成功 运行 cmd 输入 java -version (java 和 -version 之间有空格)
若如图所示 显示版本信息 则说明安装和配置成功,如图:
2 启动 jmeter
・Jmeter 的 Home 目录下包含 bin、docs、extras、lib、printable_docs 这 5 个文件夹。
・我们需要重点知道的是 bin、lib 和 docs 目录。
2.1 bin 文件
・Bin 目录下存放的是可执行的程序、配置文件和日志文件。
在 windows 下,找到 bin 文件下的 jmeter.bat 文件,双击就打开 jmeter。
在 linux 下,找到 bin 文件下的 jmeter.sh 文件。
jmeter 界面能正常打开,表示安装成功,如图:
PS:Jmeter 是支持中文的, 启动 Jmeter 后, 点击 Options -> Choose Language 来选择语言
2.2 lib 目录
Jmeter 是 java 写的,在 lib 下面包含 ext、junit 目录、jar 包。
Jar 包在脚本或者 jmeter 运行时所需要的 jar 包,比如使用 JDBC 测试数据库时,就需要对应的 jdbc 驱动的 jar 包放入 lib 目录。
Ext 目录下存放的是 jmeter 运行时的各个组件的 jar 包,也可以存放自定义组件和插件的 jar 包。
3 jmeter 组成
取样器:进行脚本逻辑控制
线程组:场景设置
监视器:监控我们的脚本运行,取得性能指标
3.1 线程组
名称:可以给线程组设置一个个性化的命名
注释:可以对线程组添加备注以标记
在取样器错误后要执行的动作:就是在错误之后要如何执行,可选继续执行后续的、停止执行等。
线程数:就是需要设置多少线程执行测试。
Ramp-up Period (in Seconds):用于告知 JMeter 要在多长时间内建立全部的线程。多长时间内需要把上面的线程数均匀启动完。 默认值是 0。如果未指定 ramp-up period ,也就是说 ramp-up period 为零, JMeter 将立即建立所有线程。假设 ramp-up period 设置成 T 秒, 全部线程数设置成 N 个, JMeter 将每隔 T/N 秒建立一个线程。
循环次数:就是决定一个线程要跑多少次测试。
Delay Thread creation until needed:直到需要时延迟线程的创建
调度器:选中之后可以配置启动时间,立即或者预定的时间
3.2 取样器:模拟用户操作
取样器用来模拟用户操作,向服务器(被测试系统)发出 HTTP 请求、WebService 请求或 Java 请求。
取样器路径:【测试计划】->【线程组】->【Sample】
3.3 监听器:记录测试结果
Jmeter 的测试结果需要添加监听器来收集。监听器任务用于添加结果监听、展示结果。
路径:【测试计划】->【监听器】
【取样器】、【断言】、【监听器】组合在一起们可以完成发送请求、验证结果及记录结果。
3.4 断言:验证结果的正确性
断言是用来验证结果的正确性。
断言就是用一个预设的结果(值、表达式、时间长短等条件)与实际结果匹配。
断言路径:【测试计划】->【断言】
3.5 前置处理器:准备环境或参数
前置处理器用于环境或参数的准备工作,比如对数据库进行操作前,需要先建立连接。
路径:【测试计划】->【前置处理器】
3.6 配置元件:参数化
配置元件用于模拟大量用户操作我们往往需要做参数化或者可以用来记录服务器的返回数据。
路径:【测试计划】->【配置元件】
3.7 后置处理器:处理服务器的返回结果
后置处理器一般放在取样器之后,用来处理服务器的返回结果,比如一个 web 应用程序,我们登录后会返回一个 SessionID, 登陆后的业务操作过程中会作为验证条件,验证用户是否合法登录。Jmeter 的关联通过后置处理器来完成。
路径:【测试计划】->【后置处理器】
【前置处理器】、【配置元件】、【后置处理器】都是为取样器提供数据支持的,取样器关注业务逻辑。
3.8 控制器:一次控制,多次查看
比如说用在登陆一次邮件,查看多封邮件。
路径:【测试计划】->【线程组】->【逻辑控制器】
3.9 定时器:集合
定时器模拟同一时刻发送,集合的功能。
路径:【测试计划】->【线程组】->【定时器】
4 jmeter 脚本的两种录制方式
有 2 种方式的录制方式:
一、使用 badboy 进行录制
二、使用代理方式进行录制
4.1 脚本录制的流程与思路
4.2 Badboy 演示与录制
打开百度,输入 badboy,进入官网,下载对应的版本,网址如下:http://www.badboy.com.au/
如图:
下载完成后,进行安装,安装成功后,在程序中找到 badboy,点击打开 badboy,表示安装成功,如图:
Badboy 功能区如下:
4.3 jmeter 代理录制
HTTP 代理方式进行录制的原理:解析网络数据包,按 Http 协议包装成 Http Request,Http Response 等对象。
HTTP 请求默认值(添加录制控制器)
HTTP 代理服务器(设置端口、IP 地址)
浏览器设置:
4.4 手动编写
根据对应的协议类型选择合适的取样器(sampler), 手动编写对应的请求,实现模拟数据发送的效果。
前提:了解协议、了解抓包工具、了解性能测试工具。
附录
1、自动重定向和跟随重定向的区别
自动重定向:当重定向时,自动跳转时,只针对 GET 和 Head 请求,自动重定向可以自动跳转到最终目标页面,但是 jmeter 不记录重定向过程内容【在查看结果树中只能看到重定向后的响应内容】
跟随重定向:当重定向时,自动重定向可以自动跳转到最终目标页面,但是 jmeter 记录重定向过程内容【在查看结果树中既能看到重定向后的响应内容,也能看到重定向前的响应内容】
2、如何解决 JMeter 设置线程组循环不起作用?
使用 badboy 录制的脚本,导出到 jmeter 中的,会出现一个问题就是,设置线程组循环会失效。只有设置 step1 的循环控制器才起作用。
问题的根本原因: jmeter 中的循环控制器和 badboy 录制的脚本的 step1 循环控制器是不相同的。
解决方法:
1、badboy 录制的脚本,循环要在 step 中设置。
2、jmeter 代理录制的脚本,循环在循环控制器中设置。
最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走!
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。