目录
四、旧版Newman+Allure+Jenkins自动化持续集成
[(1) 安装Node.js和Newman](#(1) 安装Node.js和Newman)
[(2) 导出测试用例](#(2) 导出测试用例)
[(3) 运行测试用例生成HTML报告](#(3) 运行测试用例生成HTML报告)
[(4) 运行测试用例生成Allure报告](#(4) 运行测试用例生成Allure报告)
五、新版Postman+CLI+Jenkins自动化持续集成
一、 Postman接口自动化测试结果断言
1. 断言的方式
第一种:状态断言
第二种:业务断言
bash
//断言
//状态断言
pm.test("断言状态码为200", function () {
pm.response.to.have.status(200);
});
//业务断言
pm.test("断言响应内容包括access_token", function () {
pm.expect(pm.response.text()).to.include("access_token");
});

2.Postman 自带断言,自动生产断言脚本
Get an environment variable:获取环境变量
Get a global variable:获取全局变量(常用)
Get a variable:获取变量
Get a collection variable:获取集合变量
Set an environment variable:设置环境变量
Set a global variable:设置全局变量(常用)
Set a collection variable:设置集合变量
Clear an environment variable:清除环境变量
Clear a global variable:清除全局变量
Clear a collection variable:清除集合变量
Send a request:发送一个请求
Status code: Code is 200:断言返回码为200(常用)
1.Response body: Contains string:断言返回数据包含字符串(常用)
2.Response body: JSON value check:断言JSON的值(常用)
3.Response body:ls equal to a string:断言返回数据等于字符串(常用)
Response headers: Content-Type header check:断言响应头包含Content-Type
Response time is less than 200ms:断言响应时间少于200MS(常用)
Status code: Successful POST request:断言Post请求成功,即响应码在201-202之间
Status code: Code name has string:断言状态码的名字包括字符串,如OK
Response body: Convert XML body to aJSON Object:将XML正文转换为JSON对象
Use Tiny Validator for JSON data:对JSON数据使用微型验证器
3.如何精准的断言带有动态参数的接口
想去判断返回数据是否包含"广东随机数"这个值,随机数我们是动态的。

第一步:创建时不能用系统的时间戳{{$timestamp}}
第二步:在创建请求之前自己创建一个时间戳

第三步:把参数改成自定义的时间戳

第四步:断言绝对不能使用{{times}}取全局变量。要用pm.globals.get("times")
用+号做拼接


4.全局断言
由于我们对每个接口都会进行判断200状态码,所以我们将其设置为全局断言,即在整个项目范围内进行设置。

删掉刚才在接口中的状态断言代码,我们设置完全局断言之后再次测试:

二、 Postman数据驱动CSV测试
什么是数据驱动?
通过数据驱动用例执行,本质上请求四要素里面的请求参数不同,因为不同的数据传入接口得到不同
的结果。所以我们可以先把这些数据设置好,然后读取这个数据文件执行用例。实现覆盖正反例。
Postman实现数据驱动
方式一:未用到csv(主流)
新建文件夹,用来涵盖所有获取鉴权码到access token接口的正反例测试。
复制之前我们创建的获取鉴权码接口测试,修改参数的值实现反例测试。
修改grant_type异常

修改appid为异常数据

我们进行手动批量运行该文件夹下的所有接口测试,并取消勾选高级选项中报错仍然执行。

因为获取其它两个不能成功获取到token,所以只有状态码的断言。

由于之前的断言看不出来,所以修改断言信息,并注释掉原先设置全局变量的值,因为token获取失败,那全局变量的值肯定也不会成功:


再次测试:

方式二:CSV
第一步:根据接口的参数编写CSV数据文件
grant_type,appid,secret
error,wxb03334b9bc738a07,976efc6e909e7ac5059f5746b0bca55a
client_credential,error,976efc6e909e7ac5059f5746b0bca55a
client_credential,wxb03334b9bc738a07,error
client_credential,wxb03334b9bc738a07,976efc6e909e7ac5059f5746b0bca55a
第二步:把所有的参数都改成获取全局变量,特别注意,参数名必须和你的CSV里面的名称一致。

把业务断言注释掉:

第三步:选择CSV文件批量运行



这个是我认为Postman最大的败笔。为什么?
因为:Postman不能做到一个接口一个数据文件,而是所有的接口一个数据文件。
这里上传文件时,所有接口共用一个数据文件。

实现针对不同情况设置不同断言
第一步,查看我们每一个正反例的返回结果:
bash
{
"errcode": 40002,
"errmsg": "invalid grant_type rid: 66e19e48-1bbf2f5b-20d8f6d0"
}
{
"errcode": 40013,
"errmsg": "invalid appid rid: 66e19e61-64eebebe-42ceaacb"
}
{
"errcode": 40125,
"errmsg": "invalid appsecret rid: 66e19e6f-5f6356a6-5f806d8a"
}
{
"access_token": "84_78l0fREd9WdgRgW4O5_40xC3U3wWMfOwkkVCOhj71-
Nh0cuRGNFHCSqemg3htCMd7ECVz3NliVGPdbBdIGgBgAk0ambejmHQD6pJRZ9WEwaA90JGqmuGvSGNj0sLIXbAB
AURG",
"expires_in": 7200
}
第二步,修改csv文件内容,让我们在执行完csv文件测试的时候可以获取到我们所设置的每一种正例、反例的返回字符串

assert_value
逻辑:只有结果中返回了token才提取。否则只断言。
第三步,修改断言和提取代码
bash
grant_type,appid,secret,assert_value
error,wxb03334b9bc738a07,976efc6e909e7ac5059f5746b0bca55a,invalid grant_type
client_credential,error,976efc6e909e7ac5059f5746b0bca55a,invalid appid
client_credential,wxb03334b9bc738a07,error,invalid appsecret
client_credential,wxb03334b9bc738a07,976efc6e909e7ac5059f5746b0bca55a,access_token
bash
//业务断言
//判断响应数据中是否有access_token,如果有则提取。
// 获取响应体
var responseBody = pm.response.text();
//打印
console.log(responseBody);
// 检查响应体中是否包含字符串 'access_token'
if (responseBody.includes('access_token')) {
//正则
var match = responseBody.match('"access_token":"(.*?)"'); // 使用正则表达式匹配
//保存到全局变量
pm.globals.set("baili_token",match[1]);
}
//断言了四个接口
pm.test("判断返回数据包含有csv中的断言字符串", function () {
pm.expect(pm.response.text()).to.include(data.assert_value);
});

第四步,进行测试,我们要重新上传csv文件

成功实现不同断言效果:

三、Postman接口自动化加密接口测试实战
加密接口,自定义加密的,签名SIGN
1. 什么是加密接口以及目前有哪些加密方式?
加密使用的网站:
(1) 单向加密:只加密,不能解密
MD5(哈希),SHA,HMacSHA
(2) 双向加密
对称(相同的秘钥):AES,DES,Base64(没秘钥)
不对称(公钥和私钥):RSA,Postman不支持,需要自己写js脚本或者调用第三方的js脚本进行调
试。
2.Postman 加密接口实战?
测试:只需要加密,不需要解密。
MD5加密接口实战:
var md5_username = CryptoJS.MD5("admin").toString();
var md5_password = CryptoJS.MD5("123").toString();
pm.globals.set("md5_username",md5_username);
pm.globals.set("md5_password",md5_password);
Base64加密接口实战:
var bs_username = btoa("admin");
var bs_password = btoa("123");
pm.globals.set("bs_username",bs_username);
pm.globals.set("bs_password",bs_password);
四、旧版Newman+Allure+Jenkins自动化持续集成
特点:能够生成美观的 Allure 报告,缺点不利于敏捷开发的快速迭代。
newman是一个命令行的集合运行器,允许在没有Postman CLI的情况下实现自动化持续集成。
命令:newman run
参数:
-e 指定环境变量
-g 指定全局变量
-d 指定数据文件
-n 指定迭代次数
-r html --reporter-html-export 生成HTML报告
-r allure --reporter-allure-export 生成ALLUE报告
(1) 安装Node.js和Newman
验证:node

安装Newman:npm install -g newman
验证:newman -v


(2) 导出测试用例
导出全局变量和数据文件,把环境变量改成集合变量

导出整个项目

导出全局变量


(3) 运行测试用例生成HTML报告
newman run "D:\\TestStudy\\exportTest\\Testcase.json" -g "D:\\TestStudy\\exportTest\\globals.json" -r html --reporter-html-export "D:\\TestStudy\\exportTest\\report.html"
执行时报错,安装报告器 npm install -g newman-reporter-html

再次执行

点击查看

(4) 运行测试用例生成Allure报告
两个前提:
1.下载并且安装JDK以及配置环境变量
2.下载并且安装Allure以及配置变量。
下载压缩包
Central Repository: io/qameta/allure/allure-commandline

双击:

配置环境变量:

验证:

newman run "D:\\TestStudy\\exportTest\\Testcase.json" -g "D:\\TestStudy\\exportTest\\globals.json" -r allure --reporter-allure-export "D:\\TestStudy\\exportTest\\allure-results"
报错

安装

之后在数据的文件夹中打开cmd,执行下面的命令



"e:\\ms\\allure-results"持续集成
1.需要安装jenkins
从官网下载war包,看好jdk和Jenkins的版本对应,我这里是jdk1.8

2.配置Jenkins
jenkins可以定时执行。
admin 123456
登录之后选择新建item





用war包下载:
7bdf54733f014fd19378e360c413c930

admin 123456


点击Advanced

设置脚本代码

还要设置执行后的脚本代码,但我没安装插件,无法正常选择生成allure报告
五、新版Postman+CLI+Jenkins自动化持续集成
优点:不需要导出,然后非常适合敏捷开发中的快速迭代。
(1) 把环境变量改成集合变量
(2) 持续集成:
1.需要安装jenkins
2.配置Jenkins
一步到位
持续集成:
将昨天的脚本代码粘贴到编辑Jenkins的设置Windows 批处理脚本代码的地方,把原来的删掉


