一、背景
Jmeter是目前非常流程测试软件,JMeter是纯JAVA语言写的应用程序,它支持主流测协议,包括FTP/LDAP/JMS/HTTP(S)/JDBC等。
二、常见的测试接口分类
- Soap框架
基于webservice的协议:接口地址:http://…?wsdl - RPC框架
基于(dubbo(thwift))协议的接口:dubbo:// - RestFull框架(80%)
基于http协议:
请求:请求行(请求方式和请求路劲),请求头,请求报文
请求方式:get、post、put、delete
请求路径:url
请求头:
Accept:如application/json; 指定客户端接收的数据格式
Content-type:如application/json;指定客户端发送的数据格式
X-Requested-with:异步请求(登录,ajax)
User-Agent:如User-Agent: Mozilla/5.0 客户端的类型,表示浏览器请求还是其他什么设备请求
Cookie:服务器返回给客户端并且保存的Cookie信息
响应:响应行(响应码和响应信息),响应头,响应报文
响应码:一般情况:1xx状态;200成功;3xx重定向;4xx客户端错误;5xx服务端错误
## 三、目录结构说明 ![在这里插入图片描述](https://img-blog.csdnimg.cn/29f579a0388748f5a723bf897fe5a98d.png) 最重要的三个文件夹:
- backups 备份目录,jmx的脚本,自动的保存在此处。
- bin 存放jmeter的启动脚本,配置文件,模块文件
jmeter.bat 启动脚本
jmeter.properties 全局配置文件,如:永久中文 修改 language=ZH_CN
- extras 存放和第三方构建的文件,比如:Ant,build.xml
四、组件和执行顺序和作用域
4.1 组件
- 测试计划:jmeter的起点和容器
- 线程组:代表一定的虚拟用户
- ★取样器:发送请求的最小单元
- 逻辑控制器:控制组件的执行顺序
- 前置处理器:在请求之前执行
- 后置处理器:在请求之后执行
- 断言:判断请求是否成功
- 定时器:是否延迟或间隔发送请求
- 配置原件:请求期的配置信息
10.监听器:负责收集测试的结果
4.2 执行顺序
执行计划→ 线程组→配置原件→前置处理器→定时器→取样器
→后置处理器→断言→监听器
4.3 组件作用域
基本每个组件的作用域都适合一下规则:组件会作用于它的父级组件及同级组件以及同级组件的子组件
。
4.4 接口测试流程
一般一个接口:20到30个用例是比较正常的。
五、第一个测试实例
一个标准的使用用例一般要包括如下内容
5.1 添加测试计划
5.2 在测试计划下添加线程组
5.3 在线程组下添加【配置元件】
5.3.1 添加 cookie管理器
5.3.2 添加【用户自定义的变量】
引用变量:${xxx}
5.3.3 添加【HTTP请求默认值】
一般是添加请求的ip和端口,这样在取样器里面就不需要再写ip和端口了。
5.4 ★在线程组下添加【取样器】
5.4.1 【HTTP请求】取样器
★5.4.2 【BeanShell取样器】
beanshell的基本用法
5.5 在线程组下添加【监听器】用于查看结果,以【查看结果树】为例
5.5.1 常用的筛选方式【正则表示式】
5.5.2 常用的筛选方式【json表示式】
5.6 在取样器下添加提取器,最常用的是【正则表达式提取器】和【JSON提取器】
提取器可以在5.5中去测试正确性
5.6.1 正则表达式提取器
★ 万能的正则表达式提取器
"label":"(.*?)",[\s\S]*?"sValue":"(.*?)"
5.6.2 JSON提取器
5.6.3 添加调试取样器,用来查看取样器的结果
5.7 添加调试取样器
通过调试取样器,可以更好的查看取样器里面拿到的内容
5.8 ForEach控制器,使用它来实现批量删除。
5.9 定时器
5.10 文件上传接口
5.11 接口断言【响应断言】,【JSON断言】,【BeanShell断言】
5.11.1 响应断言-状态断言
5.11.2 响应断言-业务断言
5.11.3 断言成功
5.12 数据驱动,批量自定义参数,有些接口需要进行反例测试时可以使用,批量操作。
新建一个.csv 文件 把参数写进去
5.13 数据库驱动
5.13.1 在jemeter下添加mysql连接驱动
5.13.2 JDBC连接池配置
5.13.3 JDBC Request jdbc请求
5.13.4 返回结果处理
六、通过jemeter录制接口文档通过jmeter的http代理服务实现。
6.1 添加一个【HTTP代理服务器】
6.2 代理服务设置
6.2.1 添加代理服务器
在这里插入图片描述
6.2.3 启动
七、变量的产生使用
7.1 ★变量的使用
1.json或正则表达式提取器变量:${变量名} (这种方式只能访问线程内的)
去访问,可以 用在http请求地址栏,请求体等地方法
2.beanshell中的变量:
//添加全局变量
props.put("_all_name","张三");
props.put("_all_age",23+"");
// 添加线程内的变量
vars.put("_name","李四");
vars.put("_age",8+"");
// 获取全局
log.info(props.get("_all_name"));
log.info(props.get("_all_age"));
或通过函数获取全局变量
log.info("线程2---"+props.get("_all_name")+":"+props.get("_all_age"));
log.info("线程22---${__property(_all_name,,)}"+":${__property(_all_age,,)}");
// 获取线程内
log.info(vars.get("_name"));
log.info(vars.get("_age"));
八、函数的使用
## 1-100的随机数
${__Random(1,100,aaa)}
## 从abcdefg随机找出2个字母
${__RandomString(2,abcdefg,)}
## 设置全局变量password=111111
${__setProperty(passwrd,111111,000000)}
## 获取全局变量的值
${__P(passwrd,)} 或 ${__property(passwrd,,)}x
## 分割成数组,可以用${data_x} 访问
${__split(a;b;c;d,data,;)}
结果:
data_n=4
data_2=b
data_1=a
data_4=d
## 当前时间戳
${__time(,)}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
九、最佳实战