Postman+Newman+Jenkins 接口自动化测试持续集成

Postman+Newman+Jenkins 接口自动化测试持续集成 引入Postman应用变量批量运行测试用例断言正则提取&内置动态参数动态参数传递 持续集

Postman+Newman+Jenkins 接口自动化测试持续集成

  • 引入
  • Postman应用
    • 变量
    • 批量运行测试用例
    • 断言
    • 正则提取&内置动态参数
    • 动态参数传递
  • 持续集成
    • 流程思路图
    • Postman导出.json文档
      • 导出测试脚本文件
      • 导出环境变量脚本文件
    • Newman生成测试报告
      • 参数设置
      • 启动测试
      • 结果导出
      • 编程实现
    • Jenkins配置pipeline
      • 新建项目
      • 设置定时任务触发
      • 构建环境
      • 执行shell脚本
      • 构建后操作

今天得知postman将彻底变成一个基于云端的工具,涉及到安全原因以后大概率不能在项目中使用了,所以今天把很久以前总结的接口自动化流程发出来。虽然postman不再使用,但持续集成自动化的基本逻辑和原理还是不变的,变得只是一个工具。

引入

  • 什么是接口?
    接口是软件提供给外部的一种服务,用于做数据传输。
  • 接口测试的本质?
    就是测试接口能否正常的交互数据、控制管理。
  • 接口测试的重点
    正确接受合法request入参,正确拒绝非法request入参,保证接口的正确性和健壮性。

在接下来的接口自动化中,我们使用Postman这个非常流行的工具,下面是Postman的UI操作界面:
在这里插入图片描述

Postman应用

变量

  • 全局变量对postman所有接口都生效
  • 环境变量只有设置为该环境下,才生效
  • 集合变量在collection中生效
  • 优先级:环境变量>集合变量>全局变量

使用pm.environment.set(“variable_key”, “variable_value”);、pm.environment.get(“variable_key”);来get/set环境变量
在这里插入图片描述

批量运行测试用例

在这里插入图片描述
在这里插入图片描述

断言

assertioncode
断言返回结果的响应码pm.test(“Status code is 200”,function(){pm.response.to.have.status(200); });
断言返回结果包含一个指定的字符串pm.test(“Body matches string”, function () {pm.expect(pm.response.text()).to.include(“tags”);});
对返回的结果作json字段检查pm.test(“Your test name”, function () {var jsonData = pm.response.json();pm.expect(jsonData.tags[1].id).to.eql(5298);});
断言返回的结果等于一个字符串pm.test(“Body is correct”, function () {pm.response.to.have.bod(“response_body_string”);});
断言响应头中包含指定的响应头pm.test(“Content-Type is present”, function () {pm.response.to.have.header(“Content-Type”);});
断言请求接口的时间少于200mspm.test(“Response time is less than 200ms”, function () {pm.expect(pm.response.responseTime).to.be.below(200);});
断言一个post请求的返回状态码是否在指定范围里面pm.test(“Successful POST request”, function () {pm.expect(pm.response.code).to.be.oneOf([200, 202]);});
断言返回的信息中包含指定的字符串pm.test(“Status code name has string”, function () {pm.response.to.have.status(“OK”);});

正则提取&内置动态参数

  • 内置动态参数
    • 时间戳:{{$timestamp}}
    • 生成0-1000的随机整数:{{$randomint}}
    • 生成一个GUID的字符串:{{$guid}}很长的字符串
  • 正则提取
    • match 匹配 new RegExp新建规则

在这里插入图片描述

动态参数传递

获取登陆的token,我们先设置一个变量名称但是不填入内容
在这里插入图片描述
然后再test中加入下面的code来set token

//提取access_token的值
var jsValue = JSON .parse(responseBody);
//把提取的值保存到全局变量 
pm.globals.set("token0",jsValue.access_token);

这样点击请求,请求成功后,获取到的token会自动设置在刚刚的变量下面
并且下一个接口请求时需要这个token可以以变量的形式传入{{token}}
在这里插入图片描述

持续集成

流程思路图

Postman+Newman+Jenkins
在这里插入图片描述

Postman导出.json文档

导出测试脚本文件

在这里插入图片描述

导出环境变量脚本文件

在这里插入图片描述

Newman生成测试报告

Newman是postman的命令行收集运行程序,能够直接运行和测试Postman集合。

参数设置

使用指令newman run xxx.postman_collection.json 即可启动测试

参数用法
-e– environment 后面跟环境变量文件
-g– global 后面跟全局变量文件
-n– iteration-count 后面跟迭代次数
-d– iteration-data 指定用于迭代的数据源文件
-r– reporters 后面跟数据结果
html将结果生成为html文件,指定生成到具体目录需要配合 --reporter-html-export 文件名 使用

启动测试

newman run learning.postman_collection.json -e baidu.postman_environment.json

在这里插入图片描述

结果导出

newman run learning.postman_collection.json -e baidu.postman_environment.json -r html

在这里插入图片描述
在这里插入图片描述

编程实现

新建一个newman.js文件

  • 核心方法是newman.run(options: object , callback: function) => run:EventEmitter
  • options Newman运行时的设置项
  • callback 为回调函数,回传error信息
  • run 为函数主体,可监听事件
    在这里插入图片描述
    引入newman -> 调用newman.run传递对象并等待回掉
    在这里插入图片描述
    然后在命令行运行 node newman.js文件,执行效果和上面指令运行是一样的

Jenkins配置pipeline

Jenkins是基于java开发的一种持续集成工具,用于监控持续重复的工作,使得项目可以持续集成。

新建项目

首先新建一个自由风格的软件项目:
在这里插入图片描述
将代码传至github
在这里插入图片描述

设置定时任务触发

我们可以设定定时任务触发:
五个字段:

分钟0-59
小时0-23
日期1-31
月份1-12
星期0-7

特殊符号:

*匹配范围内所有值
m-n匹配m-n的所有值
m-n/x在m-n范围内每隔x执行一次
H随机值

Example
H/15 * * * * 每隔15分钟执行一次
H H 1-15/3 * * 每个月的1-15号,每隔3天执行一次
H H * * 1,3,5 每周1,3,5执行一次
在这里插入图片描述

构建环境

每次构建删除jenkins数据目录下本项目上次的构建workspace
在这里插入图片描述

执行shell脚本

在这里插入图片描述
Build完成之后,可以在status中找到report的目录
在这里插入图片描述
在这里插入图片描述

构建后操作

在这里插入图片描述
在这里插入图片描述