性能测试概念与Jmeter脚本录制
性能测试概念:
性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。负载测试和压力测试都属于性能测试,两者可以结合进行。通过负载测试,确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,系统各项性能指标的变化情况。压力测试是通过确定一个系统的瓶颈或者不能接受的性能点,来获得系统能提供的最大服务级别的测试。
负载测试概念:
负载测试(Load testing),不限制软件的运行资源,测试软件的数据吞吐量上限,以发现设计上的错误或验证系统的负载能力。在这种测试中,将使测试对象承担不同的工作量,以评测和评估测试对象在不同工作量条件下的性能行为,以及持续正常运行的能力。
负载测试的目标是确定并确保系统在超出最大预期工作量的情况下仍能正常运行。此外,负载测试还要评估性能特征。例如,响应时间、事务处理速率和其他与时间相关的方面。
压力测试概念:
软件压力测试是一种基本的质量保证行为,它是每个重要软件测试工作的一部分。软件压力测试的基本思路很简单:不是在常规条件下运行手动或自动测试,而是在计算机数量较少或系统资源匮乏的条件下运行测试。通常要进行软件压力测试的资源包括内部内存、CPU 可用性、磁盘空间和网络带宽。
负载测试和压力测试的关系
通过负载测试寻找性能瓶颈,再分析服务器能接受的性能瓶颈,去做压力测试
性能测试的主要指标:
1 注册用户数
注册用户数指软件中已经注册的用户,这些用户是系统的潜在用户,随时都有可能上线。这个指标的意义在于让测试工程师了解系统数据中的数据总量和系统最大可能有多少用户同时在线。
2 在线用户数
在线用户数是指某一时刻已经登录系统的用户数量。在线用户数只是统计了登录系统的用户数量,这些用户不一定都对系统进行操作,对服务器产生压力。
3 并发用户数
不同于在线用户数,并发用户数是指某一时刻向服务器发送请求的在线用户数,他是衡量服务器并发容量和同步协调能力的重要指标,从这个含义上讲,我们可能会如下两种理解:
- 同一时刻向服务器发送相同或者不同请求的用户数,也就是说,既可以包括对某一业务的相同请求,也可以包括对多个业务的不同请求
- 同一时刻向服务器发送相同请求的用户数,仅限于某一业务的相同请求
4 请求的响应时间
响应时间就是用户感受软件系统为其服务所消耗的时间。对于web系统,请求的响应时间指的是从客户端发起的一个请求时间,到客户端接收到从服务器返回的响应结束。
(1)在3秒之内,页面给予用户响应所有显示,可认为是很不错的
(2)在3-5秒之内,页面给予用户响应所有显示,可认为是好的
(3)在5-10秒之内,页面给予用户响应所有提示,可认为是勉强接受的
(4)超过10秒后就有点让人不耐烦,用户会感觉很坑不会继续等待下去
5 事务的响应时间
事务是指用户在客户端做一种或多种业务所小阳台的操作集,事务的响应时间就是衡量用户执行这些操作集所花费的时间。在性能测试中,一般通过计算事务的开始时间和结束时间的差值来获取事务的响应时间。
6 每秒点击数
每秒点击数是指每秒钟像web服务器提交的HTTP请求数,它是衡量服务器处理能力的一个常用指标。需要注意的是,这里的响应时间并非鼠标的一次单击操作,因为在一次单击操作中,客户端可能向服务器发出多个HTTP请求,切勿混淆。
7 吞吐率
吞吐率通常指单位时间内从服务器返回的字节数,也可以单位时间内客户提交的请求数。吞吐率是大型web系统衡量自身负载能力的一个重要指标,一般来说,吞吐率越大,单位时间内处理的数据就越多,系统的负载能力也强。吞吐率与很多因素有关,服务器的硬件配置,网络的宽带及拓扑结构,软件的技术架构等。
8 业务成功率
指多用户对某一业务发起操作的成功率。例如,测试网络订票系统的并发处理性能,在早上8:00——8:30半小时的高峰里,要求能支持10万比订票业务,其中成功率不少于98%。也就是说系统允许200笔订票业务超时或者因其他原因导致未能订票成功。
9 资源利用率
资源利用率就是指资源的使用情况,如CPU使用率、内存使用率、网络宽带的使用情况、磁盘I/O的输入输出量等系统硬件方面的监控指标。一个完整的系统是由软件和硬件组成,缺了任何一方都不可能成为一个正常运作的系统,所以资源利用率也是测试人员的一个监控点,并在当前软件的发展趋势下,硬件资源的成本也不可小视。
10 每秒事务数(TPS)
TPS表示服务器每秒处理的事务数,他是衡量系统处理能力的一个非常重要的指标,在性能测试中,通过检测不同用户的TPS,可以估算出系统处理能力的拐点。
11 访问量(PV)
页面访问量(Page View),每打开一次页面,PV计数+1,刷新页面也算。
12 访问数(UV)
访问数(Unique Visitor), 指独立访客的数量,一台电脑终端为一个访客。
13 IP访问数(IV)
IV指的是独立IP访问数,计算是以一个独立的IP在一个计算时段内访问网站计算为1次IP访问数。在同一个计算时段内不管这个IP访问多少次均计算为1次。
Jmeter环境配置:
安装java开发环境
配置jdk1.8以上版本(查看是否安装成功:在cmd窗口中输入java -version)
jmter.bat和ApacheJMeter.jar两者打开区别:
jmeter.bat文件打开的是jmeter.properties配置文件,读取的是英文的语言,可修改为中文
ApacheJMeter.jar文件读取的是system.propeties系统配置文件,所以默认为zh_CN
TODO:
解决Jmeter乱码问题:
可以在bin/jmeter.properties配置文件中修改默认配置,搜索encoding重新创建一行修改为UTF-8
线程(用户)讲解
setup线程组:相当于前置条件
teardown线程组:相当于后置条件
线程组:主要流程
jmeter保存脚本
默认保存在安装目录的bin目录下,推荐另外保存
jmeter做接口测试基本步骤
- 添加线程组,右击测试计划→添加→线程组
- 添加HTTP请求,右击线程组→添加→取样器→HTTP请求
- 添加查看结果树,右击线程组→添加→监听器→查看结果树
TODO:
如果接口需要依赖或者指定需要添加请求头就需要添加其他的器件来完成接口测试工作
jmeter使用代理服务器录制脚本、调优
脚本录制
1、在Test Plan Creation 选项卡中设置:
- 添加线程组,右击测试计划→添加→线程组
- 添加HTTP代理服务器,右击测试计划→添加→非测试原件→HTTP代理服务器
- 设置代理服务器端口,默认8888,可自行修改
- 选择目标控制器为测试计划→线程组
2、在Requests Filtering中设置:
1.排除模式,点击添加建议排除,表示录制的脚本中过滤当前添加的这些信息(并非完全能过滤)
3、点击启动,启动代理服务器
稍微等待下会有一个证书弹出来,如不是root用户可能会报错无权限写入证书,证书保存在bin目录下
然后会有一个Recorder弹窗表示成功启动了代理服务器
4、电脑连接到代理服务器
- 在控制面板中选择internet选项,选择连接选项卡
- 点击局域网设置→勾选为LAN使用代理服务器,填入地址127.0.0.1,端口号设置为jmeter设置的端口号
- 点击确定
5、打开浏览器浏览需要录制的内容
6、点击停止,关闭代理服务器
7、关闭电脑中的连接到代理服务器
8、完成脚本录制
9、在jmeter线程组中添加一个查看结果树,运行脚本,将标红的失败脚本删除
脚本调优
1、首先禁用掉js,css后缀名的脚本,运行一下,如可以运行成功,则表示禁用的脚本对整个线程无任何影响,可以删除
2、添加一个公用HTTP信息头管理,用于脚本自身无信息头时使用公用的消息头管理器(信息头需要更改信息时可以使用公用的一次修改即可)
3、如果有登录的脚本时,需要添加一个cookie管理器,cookie管理器无需任何更改
4、当多环境需要测试时,可以添加一个HTTP请求默认值,设置默认的服务器名称和端口号
手工添加的脚本调优
脚本内容参数化
方式一:添加用户定义的变量
在线程组下面添加一个用户定义的变量,参数名称的话自己命名,如phone,值为18888888888
在取样器中调用的时候:${phone}调用值为18888888888的值
注意:参数名称建议字母,数字,下划线
方式二:添加用户参数
添加一个前置处理器 用户参数
参数名称的话自己命名,如phone,值为18888888888
在取样器中调用的时候:${phone}调用值为18888888888的值
和用户定义的变量是一样的
方式一和方式二的区别:
用户定义的变量:只在脚本启动运行时,获取一次值,后期不自动获取
用户参数:在启动之后每次使用都会去获取一次值
方式三:添加 __Random 函数,Tools里面添加
最小值设置为10000000 最大值设置为 99999999 生成一个8位数
引用:188${__Random(10000000,99999999,)}生成一个手机号码,可结合方式一和方式二使用
拓展:
__Random String 随机生成字符串
__SetProperty 设置属性 不会将属性设置到jmeter.properties配置文件中,只是动态的设置属性,作用域为当前的jmeter界面
__P 获取属性
__property 获取属性
__V 拼接函数
使用方法:将需要拼接的多个参数放在Name of variable 里面
点击生成,复制函数字符串粘贴到需要使用的地方
__time 时间函数
方式四:csv
添加→配置元件→csv数据文件设置
参数说明:
文件名:选择参数所保存的文件(支持txt,csv,excel,推荐txt,可能出现 文件编码 中文乱码问题,csv消耗的内存更多)
文件编码:选择UTF-8
变量名称:接收参数的变量值,多组数据多个参数接收
接口依赖信息提取
方式一:通过json表达式提取
在取样器上添加后置处理器json提取器
names of created variables:填入接收的变量名,可提取多个值用;隔开
将json表达式填在JSON PATH expressions中:如$..id ,可提取多个值用;隔开
Match No.:输入0表示随机的一个值,多个值时用;隔开
Default Values:填入如果未提取到的默认值
方式二:正则提取
使用正则表达式提取器
引用名称自己填写一个变量值
正则表达式格式:左边界(正则表达式)右边界
模板:$1$
匹配数字:0(代表随机)