一. 性能测试
1.1. 性能测试是什么 基于协议模拟用户发出请求,对服务器形成一定负载,来测试服务器的性能指标是否满足要求性能指标关注 点:时间性能、空间性能性能测试与页面无关 性能测试定义:指通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行 测试。 1.2. 性能测试工具
二. Jmeter简介
2.1. 我们为什么使用Jmeter
开源,免费,基于Java编写,可集成到其他系统可拓展各个功能插件 支持接口测试,压力(负载和压力)测试等多种功能,支持录制回放, 入门简单相较于自己编写框架活其他开源工具,有较为完善的UI界面,便于接口调试 多平台支持,可在Linux,Windows,Mac上运行,支持多协议
2.2. Jmeter的作用
- 接口测试 postman/jmeter
- 性能测试 jmeter
- 数据库测试
2.3. Jmeter怎么用
Windows下Jmeter下载安装,登录 http://jmeter.apache.org/download_jmeter.cgi ,根据自 己平台,下载对应文件
2.4. 安装JAVA环境
安装JDK,配置环境变量 将下载Jmeter文件解压,打开/bin/jmeter.bat
2.5. Jmeter的目录结构
/bin 目录(常用文件介绍) examples:目录下包含 Jmeter使用实例 ApacheJMeter.jar:JMeter源码包 jmeter.bat:windows下启动文件 jmeter.sh:Linux下启动文件 jmeter.log:Jmeter运行日志文件 jmeter.properties:Jmeter配置文件 jmeter-server.bat:windows下启动负载生成器服务文件 jmeter-server:Linux下启动负载生成器文件 /docs目录——Jmeter帮助文档 /extras目录——提供了对Ant的支持文件,可也用于持续集成 /lib目录——存放Jmeter依赖的jar包,同时安装插件也放于此目录 /licenses目录——软件许可文件,不用管 /printable_docs目录——Jmeter用户手册
三. 使用Jmeter测试快速入门
3.1. 线程组是什么
进程: 一个正在执行的程序对应一个进程 线程: 一个进程有多个执行线程 线程组: 按照线程性质对线程分组 三者关系:一个进程有多个线程组,一个线程组有多个线程
测试计划—线程组—线程组属性中的线程数 并发执行:多个线程同时执行,特点:执行结束的顺序与开始的顺序不一致 顺序执行:按照线程的启动顺序挨个执行 默认情况下,线程组中的线程是并发执行 每一个线程都要执行组内的http请求 设置线程组顺序执行:勾选测试计划中的(独立运行每个线程组) 线程组用来模拟用户的并发访问
3.1.1. 创建线程组
3.1.2. 线程组主要包含三个参数:
线程数、准备时长(Ramp-Up Period(in seconds))、循环次数。
3.1.3. 线程数:
虚拟用户数。一个虚拟用户占用一个线程。设置多少虚拟用户数在这里也就是设置多少个线程数。
3.1.4. 准备时长(秒):
设置的虚拟用户数需要多长时间全部启动。如果线程数为20 ,准备时长为10 ,那么需要10秒钟启动20 个线程。也就是每秒钟启动2个线程。
3.1.5. 循环次数:
每个线程发送请求的次数。如果线程数为20 ,循环次数为100 ,那么每个线程发送100次请求。总 请求数为20*100=2000 。如果勾选了“永远”,那么所有线程会一直发送请求,一到选择停止运行脚本。
3.1.6. . 调度器
:设置线程组启动的开始时间和结束时间(配置调度器时,需要勾选循环次数为永远)
3.1.7. 持续时间(秒):
测试持续时间,会覆盖结束时间
3.1.8. 启动延迟(秒):
测试延迟启动时间,会覆盖启动时间
3.1.9. 启动时间:
测试启动时间,启动延迟会覆盖它。当启动时间已过,手动只需测试时当前时间也会 覆盖它。
3.1.10. 结束时间
:测试结束时间,持续时间会覆盖它。
3.2. 创建http请求
3.3. 指定请求域名,请求路径
一个HTTP请求有着许多的配置参数,下面将详细介绍: 名称:本属性用于标识一个取样器,建议使用一个有意义的名称。 注释:对于测试没有任何作用,仅用户记录用户可读的注释信息。 服务器名称或IP :HTTP请求发送的目标服务器名称或IP地址。 端口号:目标服务器的端口号。 方法:发送HTTP请求的方法,可用方法包括GET、POST、HEAD、PUT、OPTIONS、TRACE、 DELETE等。 Content encoding :内容的编码方式,默认值为iso8859 路径:目标URL路径(不包括服务器地址和端口)
3.4. 设置对应的查看内容
通过察看结果树,我们可以看到每个请求的结果,其中红色的是出错的请求,绿色的为通过。 Thread Name:线程组名称 Sample Start: 启动开始时间 Load time:加载时长 Latency:等待时长 Size in bytes:发送的数据总大小 Headers size in bytes:发送数据的其余部分大小 Sample Count:发送统计 Error Count:交互错误统计 Response code:返回码 Response message:返回信息 Response headers:返回的头部信息
3.5. 聚合报告参数说明
lable:对应每一个http请求,显示的是http请求的Name,如百度http请求name为baidu #Samples:表示这一次的测试中一共发出了多少请求,如上图所示,sougou和baidu的http请求 每个都发出30个请求 Average:平均响应时间,指的是所有的请求的平均响应时间,如上图的30个请求的总的响应时间 除以30得出的平均响应时间,默认的情况下是单个请求的平均响应时间,但当使用了“事务控制器” 时,则以事物为单位显示平均响应时间 Median:中位数,也就是50%用户的响应时间 90%Line:90%用户的响应时间 Min:最小响应时间 Max:最大的响应时间 Error%:本次测试中出现错误的请求的数量/请求的总数,如上图所示,本次的测试中,sougou的 http请求66.6%的请求出错,而baidu的请求则没有出错的请求 Throughput:吞吐量,默认情况下表示每秒完成的请求数,如上图所示,每秒完成的请求数分别 为6.6个每秒,6.2个每秒 Recived KB/Sec:每秒从服务器端接收到的数据量,以kb为计算的单位
4:设置断点
4.1:响应断点
查询返回结果中是否包含某个值,所以格式可用
4.2:json断点
根据json表达式验证返回体中是否包含这个值
4.3:定时器
设置多少时间后执行此任务
4.4:默认请求值
设置http请求默认值,请求中域名或者参数没填写默认选择这个
4.5:全局变量
将请求相同的部分设置全局变量在接口中使用${变量名}代替
4.6:同步时间
4.7:接口关联
添加json extractor 然后设置变量,根据json表达式提取想要的值 在第二个接口中使用:${变量}代替,实现接口关联
4.8:XPath断言
4.9正则表达式
使用正则提取 运用Jmeter正则提取器,可以从请求的响应结果中取到需要的内容,从而实现关联。关联是请求与请求之间存在数据依赖关系,需要从上一个请求获取下一个请求需要回传回去的数据
位置1:名称及注释 正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。 构造正则表达式的方法和创建数学表达式的方法一样。也就是用多种元字符与运算符可以将小的表达式结合在一起来创建更大的表达式。正则表达式的组件可以是单个的字符、字符集合、字符范围、字符间的选择或者所有这些组件的任意组合。 位置2:正则表达式提取的相关设置
说明: (1)引用名称:下一个请求要引用的参数名称,如填写title,则可用${title}引用它。 (2)正则表达式: ():括起来的部分就是要提取的。 .:匹配任何字符串。 +:一次或多次。 ?:不要太贪婪,在找到第一个匹配项后停止。
(3)模板:用KaTeX parse error: Can't use function '$' in math mode at position 28: …式中有多个正则表达式,则可以是$?23$等等,表示解析到的第几个值给title。如:
1
1
1表示解析到的第1个值 (4)匹配数字:0代表随机取值,1代表全部取值,通常情况下填0 (5)缺省值:如果参数没有取得到值,那默认给一个值让它取。 案例:api接口
5:循环控制器
5.1:批量执行
第一步:右键添加点击CSV 数据文件设置 第二步:导入本地文件 第三步:设置编码格式:utf-8 第四步:设置变量名 第四步:忽略首行(本地文件没有变量名称可以忽略) 第五步:线程共享模式 第六步:请求中的值使用${变量}代替,设置断言 点击执行,没报错就代表成功
6:Android手机端脚本录制
1:添加http代理服务器
2:在线程中添加录制控制器 3:在http代理服务器中指定录制脚本的路径,默认端口8888 4:查看本地的ip(wifi热点) 5:设置移动端代理,IP和端口号 6:启动 点击”ok” 7:打开手机app,抓取接口 8:点击”停止”按钮,结束录制
|