@性能测试
一、性能测试讲解QPS、TPS、场景、虚拟用户等
1.1 名词解释
【虚拟用户】
模拟现实中的实际用户,测试工具使用虚拟用户代替真实用户
【性能测试场景】
可以理解为一个具体的测试用例。他是测试资源包括测试脚本、运行设置、运行用户数等的集合。在场景中,可以定义并发用户的数目,定义要运行的脚本。在一个场景中,可以使单个流程,也可以是多个流程的混合。
【事物】
为一个流程中某个或者某些环节的称谓,一个流程可称为一个大的事物,在这个大的事物中可包含许多小的事物
【响应时间】
性能测试中衡量交易性能的重要手段。计算的是端到端的时间,通俗讲是指从客户端发出交易请求到得到响应的整个过程
【平均响应时间】
指在测试过程中所有交易请求过程中平均的响应时间。也就是总共的交易量除以总共的交易时间。通常以秒为时间单位。
【90%响应时间】
将所有交易的响应时间按照从小到达排列,取排在90%的那个值,主要用于衡量系统的稳定性,比如两组数据 1,3,5,10,16) 和 5,6,7,8,9],他们的平均响应时间都是7,但是前面一组数据的90%响应时间值为16,而后面一组为9 (取的是数值从小到大排列,排90%的数)
【TPS】
系统每秒处理交易的数量,单位是笔/秒其是衡量系统处理能力的重要指标。通常表示一次交易申请和响应返回的过程
【QPS】
通常指的是每秒查询率,是一台服务器每秒能够相应的查询次数,是对查询服务器规定时间内处理流量多少的称量标准。
【网络吞吐量】
指单位时间内通过网络成功传输的数据量。单位为Byte/s。
【资源利用率】
主要指服务器硬件资源,网络资源等如cpu,内存使用率,磁盘IO,网络IO等。
【思考时间】
指在测试过程中虚拟用户在与系统产生交互之间的一个等待时间,用于模拟真实环境真实用户在使用系统时每一步操作的等待间隔时间。
【并发数】
指在某一时间,一定数量的虑拟用户同时对系统进行交互操作,通常性能测试工具可以设置集合点以加强并发点。
1.2 性能测试角度
用户视角
开发视角
系统管理员的性能
测试人员角度:
1: 测试人员需要考虑全面的性能,包括用户、开发、管理员等各个视角的性能。
2:测试人员在做性能测试时除了要关注表面的现象如响应时间,也需要关注本质比如用户看不到的服务器资料科用率,架构设计是否合理? 代码是否合理等方方面面
性能测试的意义
1、评估系统的能力,测试中得到的负荷和响应时间数据可以被用于验证所计划的模型的能力,并帮助作出决策。
2、识别体系中的弱点:受控的压力可以被增加到一个极端的水平,并突破它,从而修复体系的瓶颈或薄弱的地方。
3、系统调优:重复运行测试,验证调整系统的活动得到了预期的结果,从而改进性能。检测软件中的问题:长时间的测试执行可导致程序发生由于内存泄露引起的失败,揭示程序中的隐含的问题或冲突。
4、验证稳定性(resilience) 可靠性 (reliability):在一个生产负荷下执行测试一定的时间是评估系统稳定性和可靠性是否满足要求的唯一方法。
5、通过预埋未来数据,比如三年后的数据量来评估系统未来的支撑情况
6、通过节点性能测试可以用于计算生产服务器节点配比。
二、jmeter的基本使用
2.1 jmeter简介
基于java的压力测试工具,是一款开源的软件
下载地址:https://jmeter.apache.org/download_jmeter.cgi
2.2 jmeter环境搭建
安装:
2.3 jmeter基础元件
打开软件,会帮我们自动新建一个测试计划,可以在测试计划上进行我们的相关操作
测试计划
在测试计划里可以进行添加变量,可以勾选依赖添加到脚本中,例如在数据库操作时导入jdbc的易依赖
线程组
线程组内鼠标右键添加http请求
填写http请求的基本信息后,在http请求上右键,添加http信息头管理器,赋值接口的请求头信息
2.4 jmeter聚合报告
完成请求头信息管理器的添加和http请求的添加之后,要想看到结果,添加查看结果树和聚合报告,在线程组上右键取样器添加查看结果树和聚合报告
三、参数化、文件参数化、数值函数参数化
3.1 参数化的作用
参数化就是将某一些请求中的一些参数值替换为动态的请求,比如第一次请求的值是a,下一次迭代请求想要换成b,这就是典型的参数化场景
其目的在于模拟真实的用户请求
3.2 文件参数化
在线程组上右击添加,配置文件,CSV Data Set Config,打开文件参数化
相关选择的意思
3.3 数值函数参数化
函数助手使用
随机函数:${_Rando(1000,9999,)}
该函数有三个参数,第一个参数表示的是最小的数字,第二个数字表示范围内最大的数字,第三个为变量名称。通常用来表示本次迭代的值是多少
注意:
如果后期使用该值直接填写rando的话又会重新产生一个随机数,那么只能填写这个变量名
例:在请求上右键线程组,取样器,新建一个java请求,在请求上点击工具,创建函数助手对话框,选择randon
接着可以拷贝并招贴到我们的变量中
两次请求实现变量的关联
字符串函数
3.4 唯一值参数化
实际压测中经常会遇到用唯一值的情况,特别是对系统洗新增借口是,因为一些编号,订单等是唯一的,所以在大量压测下,唯一值特别重要,唯一值没有做好,很有可能导致脚本的失败
所以我么可以利用时间函数,时间永远往前走的,取当前系统时间戳,已达到我们的唯一值目的
步骤
打开工具–函数助手–time–
不进行值的设置,生成毫秒级别的随机
四、jmeter关联和控制器
4.1 提取数据关联
jmeter正则表达式提取通常用来提取后台数据的返回,得到返回的数据后将这数据给后面请求时用
右键线程组-添加-逻辑控制器-仅一次控制器
在那个请求返回的数据,就在那个请求上右键
右键选择添加,后置处理器,正则表达式提取器
选择正则提取器之后,进行相关参数的填写,需要提取的信息在哪里,就在要检查的响应字段里面勾选对应的值
正则表达式的解释:()括号里面就是我们要替换的值,.点就是代表任意字符,+代表任意个数,?代表从上往下找,找到匹配的第一个就返回
4.2 事务控制器
一次性控制器,多用于登录操作,避免在循环的时候重复登录消耗资源,没有用在将资源消耗在需要进行压测的业务上
可以在一次性控制器上右键添加逻辑控制器—事务控制器进行将一组操作放在一起(将仅一次控制器下的脚本复制粘贴到事务控制器下)
4.3 一次性控制器
4.4 循环控制器
控制循环的次数
4.5 吞吐量控制器
可按照比例和数量进行分配
4.6 用户变量定义
在线程组上右键—添加配置原件–用户定义的变量,进行变量的配置添加
测试计划的变量会覆盖线程组的变量
五、http协议讲解、抓包使用,响应断言
5.1 http讲解
HTTP协议 (HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为厂泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准。
HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件,图片文件,查询结果等)
http组成部分
请求部分包括: 请求行、请求头部、空行、请求数据
响应部分包括:响应行、响应头、响应体
http响应码
http常规请求头
Accept: 告诉服务器,客户端支持的数据类型。告诉服务器,客户端采用的编码。
Accept-Charset:告诉服务器,客户机支持的数据压缩格式。
Accept-Encoding:Accept-Language: 告诉服务器,客户机的语言环境。
Host: 客户机通过这个头告诉服务器,想访问的主机名。If-Modified-Since:客户机通过这个头告诉服务器,资源的缓存时间。
Referer:客户机通过这个头告诉服务器,它是从哪个资源来访问服务器的。 (一般用于防盗链)
User-Agent:客户机通过这个头告诉服务器,客户机的软件环境
Cookie: 客户机通过这个头告诉服务器,可以向服务器带数据。
Connection:客户机通过这个头告诉服务器,请求完后是关闭还是保持链接。
Date: 客户机通过这个头告诉服务器,客户机当前请求时间
5.2 fiddler抓包工具使用
抓取所有的https的包
filter过滤针对指定的接口进行抓取
抓取HTTPS设置
https证书导入
过滤设置
隐藏静态图片REGEX:.(js|csslgooglelico ljpglpnglfavicon?.)|mongodb.
隐藏tunnel to等