目录
基础
- 接口测试简介,接口测试流程,接口测试用例设计,实战接口介绍
- Postman简介和安装
- Postman接口请求工具界面讲解
- Postman设置环境变量和全局变量
- Postman接口关联
进阶 - Postman动态参数及自定义参数
- Postman断言
- Postman使用CSV或TXT文件实现数据驱动
- Postman请求头
- Postman实现接口Mock Server自定义接口服务器
- Postman实现Cookie鉴权以及Token鉴权
- Postman接口加密Base64,MD5,RSA,DES,RES解密
- Postman+Newman+Jenkins接口自动化持续继承
基础
接口测试的简介和分类
概念:接口测试就是测试系统组件接口之间的一种测试
分类:
- 测试外部接口:测试被测系统和外部系统之间的接口(只需要测试正例即可)
- 测试内部接口:
- 内部结构只提供内部系统使用。(只需要测试正例即可)
- 内部接口提供给外部系统使用(测试必须非常全面,正例,各种异常场景)
接口测试的流程以及测试用例的设计
- 拿到接口api文档(通过珠宝工具获取),熟悉接口业务,接口地址,鉴权方式,入参,
- 编写接口用例及评审
- 思路:
- 正例:输入正常入参,接口你能够返回数据。
- 反例:
- 鉴权反例:鉴权码为空,鉴权码错误,鉴权码过期;
- 参数反例:参数为空,参数类型异常,参数长度异常,异常参数;
- 错误码覆盖:根据业务而定的
- 其他错误场景:接口黑名单,接口调用次数,分页场景,数据量等;
- 思路:
- 使用接口测试工具Postman执行接口测试
- Postman+Newman+Jenkins接口自动化持续继承并用邮箱发送结果
动漫图片 - 木小果API (muxiaoguo.cn)
后去权限:appid,sercret(密钥)
Postman的简介,安装
安装,1:Chrome应用商店搜索Postman安装,2:官网安装,3.Postman注册登录;
界面介绍:
- home主页
- workspaces工作空间
- Collections:集合,收藏,项目集合,
- Params get请求参数
- Authorization 鉴权
- Headers 请求头
- Body 请求体:
- none没有参数,
- form-data:既可以传输键值对参数,也可以传文件
- x-www-from-urlencoded:只能够传键值对参数
- raw:串json,text,xml,html,javascript;
- binary:把文件以二进制的方式传参;
- pre-request-script:请求之前的脚本
- tests:请求之后的断言
- cookies:用于管理cookie信息;
- Body:接口返回的数据
- pretty:以Json,html,xml。。不同的格式查看返回的数据;
- Raw:以文本的方式查看返回的数据
- PreView以网页的方式i查看返回的数据
- Cookies:响应的Cookie信息
- Headers:响应头
- Test Results:断言的结果
- ApiS api文档
- Environment 环境变量,全局变量
- Mock Server 虚拟服务器
- Monitors 监听器
- Flows 流动
- History 历史
- Collections:集合,收藏,项目集合,
- Explore 探索
- reports 报告
使用Postman的环境变量以及全局变量
环境变量:环境变量就是全局变量
全局变量:全局变量是能够在任何接口里面访问的变量。
获取环境和全局变量的值通过{{变量名}},来引用
接口关联
-
json提取器实现接口关联
- var data=pm.response.json();
var dd=data.data
console.log(dd.imgurl)
pm.globals.set("dd", dd.imgurl);
使用正则表达式来实现接口关联,
var data=pm.response.text();
console.log(data);
var dd=data.match(new RegExp('"imgurl":"(.*?)"'));
console.log(dd[1]);
pm.globals.set("dd", dd[1]);
pm.globals.set("variable_key", dd[1]);
var data=pm.response.text();
console.log(data);
var dd=data.match(new RegExp('"imgurl":"(.*?)"'));
console.log(dd[1]);
pm.globals.set("dd", dd[1]);
pm.globals.set("variable_key", dd[1]);
var data=pm.request.url.query;
console.log(data);
Postman内置动态参数以及自定义的动态参数
postman内置动态参数:
{{randomint}}生成0-1000之间的随机数
{{$guid}}生成随机Guid数
自定义动态参数
var times=Date.now();
//设置全局变量
pm.globals.set("timee",times);
上传文件:传入的Body中key选择file即可;
Postman断言
Status code : code is 200 检查返回的状态码是否为200
Response Body:Contains string 检查响应中包括指定字符串
Response body:Json value check 检查响应中其中json的值
Response body :is equal to a sting 检查响应响应等于一个字符串
Response headers:Content-type...检查是否包含响应头Content-type
Response time is less than 200ms :检查请求耗时小于200ms
在断言中获取自定义动态参数的方式(全局变量):
pm.globals.get("times")
globals["times"]
globals.times
上述描述中都是在一个接口中获得的断言,如何将所有接口都增加这个断言呢?
设置全局断言
步骤:
- 找到创建的组,点击进入
- 选择tests
- 编写断言代码即可
如果在测试过程遇到上传文件,单独调接口可以选择但是也会出现一个组运行时出现错误的困扰,这就是因为postman在运行组过程中不会再访问你其他盘的数据导致的
上传文件
在上传文件之前要将Content-Length的值进行取消选中,因为这个值会影响你上传的文件传输提的大小,如果不一致则会导致上传失败!
在form-data中

如果在使用数据驱动csv/json执行时需要注意要将该文件的地址设置一下postman可以支持访问的地址;
-
设置postman的工作路径,上传对应文件:
Pasted image 20220308210348.png
即可
Postman数据驱动csv文件和json文件的处理
在组点击run弹出右侧弹窗选择文件:
文件内容如:
[
{"username":"sj17600446278@163.com","password":"dc483e80a7a0bd9ef71d8cf973673924","sysfrom":"pc","msg":"操作成功"},
{"username":"sj17600446278@163.com","password":"dc483e80a7a0bd9ef71d8cf973673921","sysfrom":"pc","msg":"密码输入错误,请重新输入"},
{"username":"sj17600446278@161.com","password":"dc483e80a7a0bd9ef71d8cf973673924","sysfrom":"pc","msg":"帐号不存在"}
]
这样传参
username={{username}}&password={{password}}&sysfrom={{sysfrom}}
通过data.调用文件里的数据;
进行上传成功,执行文件即可
测试必须带请求的接口
Postman接口Mock Servier服务器
Mock模拟
https://9b1ab83d-466a-439e-a437-b28f679caf34.mock.pstmn.io
输入信息启动,注意不要忘了请求时把环境变量启动一下哦;
Postman的Cookie鉴权
什么是cookie?
Postman实现接口的加密和解密
- 目前市面上的加密方法
- 对称式加密:DES,ASE,Base64加密算法
- 非对称式加密:双钥(公钥,私钥,公钥和私钥解密)加密,RSA加密算法
- 不考虑解密:MD5,SHA1,SHA3
可以直接使用函数进行:
Base64加密
//base64加密
var username=CryptoJS.enc.Utf8.parse("admin");//先转为UTF-8格式
var base64_username=CryptoJS.enc.Base64.stringify(username);//进行Base64加密
console.log(base64_username);
Base64解密:
//base64解密
var username = CryptoJS.enc.Base64.parse("YWRtaW4=");//进行解密
var utf8_username = username.toString(CryptoJS.enc.Utf8);//转为UTF-8格式
console.log(utf8_username);
MD5加密:
//MD5加密(转换为MD5加密(32位小写),再转为字符串,并将转码后的字符串转换为32位大写)
var MD5_username = CryptoJS.MD5("admin").toString().toUpperCase();
console.log(MD5_username);
这样
//--------------以下为需要加密的内容,可以根据需求定义多个------------------//
var clearText = '{"arg1":"abc","arg2":123,"arg3":4.56}'; //对应{{rsaBody}}的明文
// var clearText = '{"arg1":"def","arg2":123,"arg3":7.89}';
//---------------------------------------------------------------------//
const encrypt_key = '(密钥复制到此处)';
const forge_url = 'https://gitee.com/lzq1357/various/raw/master/forge_min.js';
//forge_min.js来自:https://raw.githubusercontent.com/loveiset/RSAForPostman/master/forge.js
//---------------------------------------------------------------------//
function encryptRsa(encrypt_key, clearText){
console.info('cleartext: ' + clearText);
//注意此处上下的BEGIN PRIVATE KEY不要删除,框架自带的
const public_key = '-----BEGIN PUBLIC KEY-----\n'
+ encrypt_key
+ '\n-----END PUBLIC KEY-----';
var publicKey = forge.pki.publicKeyFromPem(public_key);
var buffer = forge.util.createBuffer(clearText, 'utf8');
var bytes = buffer.getBytes();
var encryptedText = forge.util.encode64( publicKey.encrypt(bytes, 'RSAES-PKCS1-V1_5', {
md: forge.md.sha256.create(),
mgf1: {
md: forge.md.sha1.create()
}
})
);
console.info('encryptedText: '+ encryptedText);
return encryptedText;
};
// 第一次运行时从网络加载forgeJS,会导致请求失败
if(!pm.globals.has('forgeJS')){
console.log('request forge.js from ' + forge_url);
pm.sendRequest(forge_url, function (err, res) {
if (err) {
console.error(err);
} else {
console.info("request forgs.js: Succeed, please try again");
pm.globals.set('forgeJS', res.text());
}
}
);
}
eval(pm.globals.get('forgeJS'));
//------------------以下内容根据需要修改定义,可以加密多个字段------------------------//
var encryptedText = encryptRsa(encrypt_key, clearText);
postman.setEnvironmentVariable("rsaBody", encryptedText); //rsaBody对应Body中{{}}
Newman
newman可以让postman的脚本通过非GUI的方式;
- 默认不会安装newman 需要使用 npm命令进行安装,需要先安装node,再输入命令:
npm install -g newman
进行安装newman命令;
接着使用:
npm install -g newman-reporter-html
进行安装导出报告的库;
运行命令:newman run 运行的json文件
文件需要在postman中进行导出,导出环境变量,导出全局变量;
常用参数
- -e引用环境变量
- -g引用全局变量
- -d 引用数据文件
- -m指定测试用例迭代的次数
-
-r cli,html,json,junit --reporter-html-export name.html
image.png
此处如果连着则会生成“:
生成会生成Newman的文件夹,文件名是):
image.png
-r html,json --reporter-json-export jsonReport.json --reporter-html-export htmlReport.html
指定生成html的报告
Postman+Newman+Jenkins持续集成
- 访问jenkins,创建项目,配置项目信息中选择General勾选使用自定义的工作空间,将postman的目录复制进去:E\postman
- 构建,切换到构件中将命令执行输出报告的命令粘贴进去
- 新增Execute system Groovy script,(如果没有找到因是你没有安装此插件,搜索安装startup-trigger-plugin和Groovy插件后,我们就可以进行配置了)因为默认你在查看postman的报告样式的时候,部分样式会丢失,配置Groovy脚本样本就不会丢失了配置内容如下:
System.setProperty("hudson.model.DirectoryBrowserSupport.CSP","") - 选择构建之后的操作步骤选择:publish HTML reports (如果没有则进行安装publish HTML )
新增
HTML directory to archive -> ./
index page[s] ->report.html
index page title[s] (Optional)-> Postman+Newman接口测试报告
Report title-> HTMLReport - 执行即可;


