一、JDK的下载和安装
1、jdk安装
官网位置:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
2、安装JDK
建议:安装路径,不要有汉字目录,不要有空格目录,不要有x86目录
3、配置环境变量
再次新建一个系统变量,输入变量名和变量值后,点击确定按钮
输入变量名:CLASSPATH
输入变量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar; 【英文输入法下的句号和分号】
在系统变量区域找到Path变量,双击打开
点击新建,添加:
%JAVA_HOME%\bin
%JAVA_HOME%\jre\bin
4、验证
检测是否安装成功:windows图标+R,输入cmd,按回车键
输入java –version,javac,按回车键
================================================================================
二、Jmeter的下载和安装
1、官网下载Jmeter
官网位置:http://jmeter.apache.org/
2、解压
下载后无需安装,解压后即可使用
下图为解压后的目录
3、配置Jmeter的环境变量
电脑桌面 → 此电脑(鼠标右键选择“属性”) → 高级系统设置 → 高级(点击“环境变量”)
在系统变量下,点击“新建”
输入变量名:JMETER_HOME
输入变量值:下载后jmeter解压的路径 (此路径根据自己实际安装路径进行填写)
在系统变量区域找到CLASSPATH变量,双击打开后进行编辑,加上:
%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar;%JMETER_HOME%\lib\jorphan.jar;
完整版:
.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar;%JMETER_HOME%\lib\jorphan.jar;
注:如果没找到CLASSPATH,添加在PATH里也可以
在系统变量区域找到Path变量,双击打开
点击新建,添加:%JMETER_HOME%\bin
配置完成后,点击确定按钮
4、验证
验证是否配置正确、是否安装成功:
启动方法一:在Jmeter安装路径下,打开bin文件夹,找到jmeter.bat文件,鼠标右键以管理员身份运行,或者双击打开(也可以鼠标右键创建一个快捷方式发送到电脑桌面,这样启动jmeter会方便很多)
启动方法二:通过windows图标+R,cmd,输入jmeter,按回车键
此时会出现两个界面,一个是Jmeter的命令窗口(使用jmeter的时候此命令窗口不能关,缩小到电脑任务栏即可),另外一个
是Jmeter的图形操作界面
5、设置成显示中文
永久设置成中文方法:找到jmeter解压路径下的bin目录,打开jmeter.properties 文件,
去掉前面的#,修改成language=zh_CN,保存
以后启动jmeter.bat文件,就是中文界面啦
6、问题解决记录
问题:完成了Jmeter配置后,运行jmeter.bat文件时,控制台一闪而退
解决过程:
1、检查jmeter的环境变量,没看出啥问题
2、检查jdk,jdk没问题
3、重启电脑,问题没有解决
4、考虑换安装包重新安装,想了想,还是想把问题解决,嗯,接着死磕这个问题
5、替换别人的jmeter.bat文件,再次运行,还是不可以哇,惆怅
6、对解压后的jmeter文件夹,让管理员取得所有权限,到cmd里面E:\Jmeter\apache-jmeter-5.3\bin\jmeter.bat
还是不可以运行诶
7、编辑jmeter.bat文件,在文件末尾另起一行,加上pause,看错误信息
8、还是环境变量出了问题呗,检查JMETER_HOME,变量值路径没问题;检查CLASSPATH的配置内容,并对比网友
的CLASSPATH的配置内容,发现我下载的这个 jmeter版本中没有logkit-2.0.jar的文件,去掉这个文件路径,保存环境
变量,运行jmeter.bat文件,运行成功!
以下为错误情况:
三、性能测试的概念
1、性能测试的概念
- 使用自动化工具,模拟不同的场景,对软件各项性能指标进行测试和评估的过程
2、性能测试的目的
- 评估当前系统能力
例如:验收第三方提供的软件
- 常见的性能需求(性能需求文档):
- WEB首页打开速度在5s一下,web登陆速度15s一下
- 邮箱服务支持50万个在线用户
- 计费话单成功率达到99.99以上
- 在100个并发用户的高峰期,邮箱的基本功能,处理能力至少达到0TPS
- 系统能在高于实际系统运行压力1倍的情况下,稳定运行12小时
- 这个系统能否支持200万的Virtual user(每天登陆系统的人次)
- 寻找性能瓶颈,优化性能
- 评估软件是否能满足未来需求
3、什么是性能:
- 时间:系统处理用户请求响应时间
- 资源:系统运行过程中,系统资源的消耗情况
四、性能测试的策略
1、基准测试
- 狭义上讲:就是单用户测试(单用户循环多次得到的数据)
- 广义上讲:建立基准线,当系统的软硬件环境发生变化之后再进行一次基准测试确定变化对性能的影响。4、
1.1、基准测试数据的用途
- 基准测试不会单独存在
- 为多用户并发测试和综合场景测试等提供参考依据
- 为系统/环境配置。系统优化前后的性能提升/下降提供参考指标
2、负载测试
- 概念:通过逐步增加系统负载,确定在满足系统的性能指标(如响应时间等)情况下,找出系统所能承受的最大负载量的测试
- 作用:系统最大负载量达到用户要求时,系统才能上线使用。
3、稳定性测试
- 概念:在服务器稳定运行(用户正常的业务负载下)的情况下进行长时间测试(1天-1周)并最终保证服务器能满足线上业务需求
4、压力测试
- 概念:在强负载下的测试,查看系统在峰值情况下是否功能隐患、系统是否具有良好的容错能力和可恢复能力
- 测试场景:
极限负载情况下的破坏性压力测试
高负载下的长时间的稳定性压力测试
5、并发测试
- 概念:并发测试(绝对并发):是指在极端的时间内,发送多个请求,来验证服务器对并发的处理能力
五、性能测试的指标(标准)
1、为什么要学习性能测试指标?
- 对性能测试结果进行量化衡量
2、什么是响应时间?
- 指从客户端发送请求开始,到客户端接收到结果的总时间
- 包括:服务器处理时间+网络传输时间
3、什么是并发用户数?
- 某一时刻同事向服务器发送请求的用户数
4、吞吐量(Throughput):
指的是单位时间内处理的客户端请求数量,直接体现软件系统的性能承载能力
- QPS(Query Per Second)每秒查询数:即控制服务器每秒处理的指定请求数量-
- TPS(Transactions Per Second)每秒事务数:即控制服务器美妙处理事务请求的数量
事务:即业务,页面上的一次操作,可能对应一个请求/多个请求
5、点击数和错误率
- 点击数:指客户端向服务端发送请求时,所有页面的页面资源元素(如:图片、链接、框架css、js等)的请求总数量
- 注意:
- 只有web项目才有此指标
- 点击数不是页面上的一次点击
- 错误率:指系统在负载情况下,是被业务的概率。
- 错误率=(失败业务数/业务总数)*100%
- 注意:
- 大多系统都会要求错误率无限接近于0
- 错误率是一个性能指标,不是功能上的随机bug
6、资源使用率
- 资源使用率:是指系统各种资源的使用情况,一般用“资源的使用量/总的资源可用量*100%”形成资源利用率的数据
六、性能测试的流程
略
七、Jmeter元件和组件的介绍
1、元件的基本介绍
- 元件:多个类似功能组件的容器(类似于类)
- 取样器——发送请求
- 逻辑控制层——控制语句的执行顺序(类似于if)
- 前置处理器——对请求参数进行预处理
- 后置处理器——对响应结果进行提取
- 断言——检查接口的返回结果是否与预期结果一致
- 定时器——封装一段代码,供其他脚本调用
- 配置元件——测试数据的初始化配置
- 监听器——查看Jmeter脚本的运行结果
- 组件:市县级独立的某个功能(类似于方法)
2、元件的作用域
- 元件的作用域:是考测试计划的属性结构中元件的父子关系来确定的
提示:所有的组件都是以取样器为核心来运行的。组件添加的位置上不同,生效的取样器也不同
- 作用域的原则:
- 取样器:核心,不和其他元件相互作用,没有作用域
- 逻辑控制器:只对其子节点中的取样器和逻辑控制器起作用
- 其他元件:
- 如果是某个取样器的子节点,则该元件只对其父节点起作用
- 如果其父节点不是取样器,则其作用域是该元件父节点下的其它所有后代节点(包括子节点,子节点的子节点等)
3、元件的执行顺序
- 同一个作用域下不同类型元件:
- 配置元件-->前置处理程序-->定时器-->取样器-->后置处理程序-->断言-->监听器
- 同一个作用域下多个相同类型元件:
- 按照测试计划中从上到下的顺序依次执行
八、JMeter使用示例
1、JMeter第一个案例
需求:使用JMeter访问百度首页接口,并查看请求和响应信息
- 步骤:
- 启动JMeter
- 在“测试计划”下添加“线程组”
- 在“线程组”下添加“HTTP请求”取样器
- 填写“HTTP请求”的相关请求数据
- 在“线程组”下添加“查看观察树”监听器
- 点击“启动”按钮运行,并查看结果
2、线程组
概念:控制JMeter用于执行测试的一组用户
- 线程组的分类:
- Setup线程组:预测试操作,左右监本之前执行
- 普通线程组:执行测试用例,可以有1个或多个(并行/串行)
- Teardown线程组:测试后操作,所有脚本之后执行
3、JMeter参数化
3.1 什么是参数化?
把测试数据组织起来,用不同的测试数据调用相同的测试方法。
3.2 四种参数化有何不同?如何选择适当的方法?
- 用户定义的变量:作用:定义全局变量。局限性:每次取值(无论是否是相同的用户)都是固定值
- 用户参数:作用:保证不同的用户针对同一组参数,可以取到不同的值。局限性:同一个用户再多次循环时,取到相同的值。
- CSV数据文件设置:作用:保证不同的用户及同一用户多次循环时,都可以取到不同的值。局限性:需要手动进行测试数据的设置。
- 函数:作用:保证不同的用户及多次循环时,都可以取到不同的值,不需要提前设置。局限性:输入数据有特殊的业务要求的时无法使用。(如:登陆时的用户名密码)