1丶jmeter常用组件
组件: 前三个必备测试计划:jmeter接口测试的起点
线程组:一定虚拟用户(测试片段)
配置元件:配置信息
请求前:
前置处理器:请求之间的操作
逻辑控制器:控制请求的逻辑
定时器:延迟请求
取样器:发送请求
请求后:
后置处理器:请求之后的操作
断言:判断接口是否正常返
回监听器:收集测试结果
接口测试:
1.测试计划
2.线程组(测试片段)
3.Http请求默认值
4.Http Cookie管理器
5.http请求6.查看结果树
线程组:一个人执行接口测试,可以单独运行。测试片段:一个团队执行接口测试,不能单独运行。如果想要调试的话,自己需要通过【模块控制器】来运行,现在把测试片段发给测试组长之后组长需要通过【include控制器】来运行。
测试A,测试B,测试C,测试组长
2丶项目的接口协议
协议有: http,https,dubbo,webservice
接口路径组成部分协议:http服务器IP:101.34.221.219服务器端口:8010接口名称:s=index/index接口参数:application=app 可以是web或appapplication_client type=weixin 可以是pc或h5或weixin....
鉴权码token=token
异步请求ajax=ajax
3丶接口调试
1.查看请求四要素:请求方式,请求路径,请求参数,请求头
2.加调试取样器
接口分为前端接口和后端接口前端接口:不需要鉴权可以直接访问,谁都可以访问。后端接口:需要登陆才可以访问。
Content-Type:application/json用于指定请求的数据类型。
4丶接口关联
都是通过表达式取获取我们需要的值。
1.json提取器$
表达式都是从"$"开头,代表是根目录
“ . ” 代表子目录
凡是碰到{}通过"."取值,凡是碰到[ ]下标取值,下标从0开始。
“$..”+要找的名称 :递归查找
使用json变量: ${变量名 xxx}
5丶参数 化配置
6丶通过查询数据库获得ID
1> 在测试计划中关联数据库驱动包
2>JDBC数据库连接配置
Database URL: jdbc:mysql://IP:端口号/数据库名称?characterEncoding=UTF-8
3> 创建 jdbc Request 填写2>步骤中的名称domeTest1, sql语句,定义变量名称。
测试效果:
重点 uid_#: 代表的是总共查询了多少条数据
请求参数中可以使用 列: uid=${uid_1} 来获取数据库中的值
7丶查询多个商品:jmeter+mysql+ddt(笨)
重点:如果说在取值的时候需要用到嵌套${ } 取值就需要使用到工具中的【函数助手对话框中的V函数。
1>添加循环控制器
2>在循环控制器中设置计数器
3>设置函数
${__V(uid_${number},)} 拿去接口处使用
案例图:
8丶 查询多个商品:jmeter+mysql+ddt(更简介)
在逻辑控制器里添加 forEache控制器
9丶随机查询多个商品
以下方法比较麻烦,可以直接在 jdbcRequest中用sql去实现
1》随机生产一个数
先使用函数助手中的Random 生成一个随机数
生产后要稍加修改加前缀,uid_#在参数中要加 ${} 成为变量
例 : uid${__Random(1,${uid#},)}
单反牵扯到嵌套都要使用V函数来转换才能使用
2》随机生产多个数
1.使用sql
select id from 表名 order by rand() asc limit 5 //随机生产5组数据按升序排列
10丶无接口文档如何实现Jmeter接口自动化
一丶 加密接口测试
加密算法:www.bejson.com单向加密:不需要秘钥,加密不可逆,MD5,SHA
双向加密:对称加密:加密和解密使用的是相同的秘钥,AES,DES,BASE64
非对称加密:加密和解密使用的是不同的秘钥,RSA
自定义加密:由开发团队自己定义,由多种加密组成。
签名SIGN:验签规则比较繁琐
Jmeter支持的有:Base64,MD5,SHA系列五种,urlencode,其他没有了RSA加密,对不起,jmeter很难做。jmeter可以通过beanshel来处理。可以调用japa或python代码去实现。
//Base64加密方式: import java.util.Base64; //初始化一个Base64对象,调用encodeTostring()方法 String username = Base64.getEncoder().encodeToString("admin".getBytes("UTF-8")); String password = Base64.getEncoder().encodeTostring("123".getBytes("UTF-8")); //定义全局变量 vars.put("us"username); vars.put("pw",password);
在前置处理中添加 BeanShell 预处理程序
定义完了后在接口中即可使用
MD5加密:
digest支持:MD5,SHA系列(SHA3不支持) 加密这两种
二、Jmeter命令行执行
全局设置:jmeter.save.saveservice.output_format=xml
jmeter.save.saveservice.response_data=true
jmeter.save.saveservice.samplerData=true
命令行的参数:-n 命令行执行用例
-t 指定你的测试脚本
-l生成 jtl 报告
jmeter -n -t a.jmx -l result.jtl