通过 Postman+Newman+Jenkins 进行接口自动化测试和进一步实现 CI

news2025/1/19 11:21:36

目录

前言:

Postman 部分

Collection 或者说测试集的建立

Postman 使用详解

测试工具

mock server

Newman 的安装和使用

newman 的使用

对 SSL 的支持 newman 第三版以后(目前已经是 4.3.1)可以支持通过 CLI 选项来支持 SSL

对 newman 配置代理:通过对 Postman 的 request 环境变量进行设置来完成代理的配置。

Jenkins 部分

不足之处:


前言:

使用Postman+Newman+Jenkins进行接口自动化测试和实现持续集成(CI)是一种常见的方案。Postman是一个流行的API开发和测试工具,Newman是Postman的命令行工具,而Jenkins是一个流行的持续集成工具。

相信提到接口测试,大家都知道而且用过 Postman,也认为这是一个非常容易上手的接口测试工具,实际上 Postman 功能非常强大,还有很多部分非常有意思而且实用的功能,我先抛砖引玉,关键是大家一起来探索和一起来分享。比如 Postman 能不能进行自动化接口测试,其实是可以的,而且在如今大家不断提到 TDD 和如何打造 pipeline 上,这方面的需求越来越强烈。

举个简单的真实场景,开发提供了 300 多个 API,每个 API 都有各种参数,所以我们会先在 postman 中为这 300 多个 API 编写 300*n 个 testcase,如果我们都用 postman 跑,其实效率并不高,作为工程师图形化不如命令好使,因此一定要用 newman,既然可以命令行你过来执行为啥不能 CI?

  • 试想,当开发一直在不停的维护这 300 多个接口时,难道需要开发每次都告诉我们测试人员该进行测试了吗?只要通过 Jenkins 来自动执行这些接口测试,基本上 CI 就完成了很多。

  • 如果能够监控到哪些接口发生变动,自动选择相关的 collections,也就是 test suits,就是朝更牛掰的路上又前进了一步。

  • Jenkins 还可以自动发 email 给开发和你,另外也可以自动提交 bug,如果这样的话你就更舒服了,看邮件就可以了。

Postman 部分

这个太简单了,就略过去,百度搜一下,下载安装一个 native 的即可,因为作为 Chrome 插件已经不支持了。我们直接进入正题。

Collection 或者说测试集的建立

在 Postman 中,Collection 类似文件夹,可以把同一个项目的请求放在一个 Collection 里方便管理和分享,Collection 里面也可以再建文件夹。如果做 API 文档的话,可以每个 API 对应一条请求,如果要把各种输入都测到的话,就需要每条测试一条请求了。

在 Postman 里面可以将 Collection 导出存为 json 文件,有了这个文件,就可以通过 Postman CLI 完成命令行执行,实现自动化测试。

  • 导入:用于导入你或团队保存的 API 请求文件,json 格式。

  • 新建文件夹:用于 API 请求划分类别,便于管理。

  • 保存请求:保存你的 API 请求,返回值也能存储下来。

  • 下载:下载你测试通过的 API 请求,团队共享,导入。json 格式,可手动编辑的

Postman 允许用户发送任何类型的 HTTP 请求,例如 GET,POST,HEAD,PUT、DELETE 等,并且可以允许任意的参数和 Headers。

她支持不同的认证机制,包括 Basic Auth,Digest Auth,OAuth 1.0,OAuth 2.0 等。

她还可以响应数据是自动按照语法格式高亮的,包括 HTML,JSON 和 XML。

  • 可以通过"Capture API request with Postman"来录制测试用例,这个方法也不错,大家可以试一下。

Postman 使用详解

  • 请求 request

  postman 界面分为两部分:左边的 sidebar 右边的 request builder:快速创建几乎所有的 HTTP 请求:URL,请求的 method,headers,body。

  • 响应 responses

保证 API 响应的正确性,就是你需要做的大部分工作。postman 的 response viewer 部分会协助你完成该工作且使其变得简单。

  一个 API 的响应包含 body,headers,响应状态码。postman 将 body 和 headers 放在不同的 tabs 中。响应码和响应时间显示在 tabs 的旁边。将鼠标悬停在响应码上面可以查看更详细的信息。

  • 写断言测试

Postman 的 Tests 标签可以用来写断言测试,提供了大量的 API,非常方便实用。

  • 运行 Collections

postman 允许你运行 collection,其实就是我们在测试领域所说的 test suit,可以配置运行任意的次数。 最后会给出一个整体运行的结果。会保存每一次运行的结果,提供给你比较每一次运行解雇的不同。

  选择 collection,选择环境。点击运行按钮。

测试工具

测试工具主要包括三部分,在发起请求之前运行的 Pre-request,在收到应答之后运行的 Test,和一次运行所有请求的 Collection Runner

  • Pre-request

Pre-request 和 Test 用的语言都是 JavaScript,Postman 在一个沙盒里执行代码,提供给用户的库和函数可以在 这里 查看。而 常用的功能都可以通过右边的 Code Snippets 实现,点击就可以插入到代码区域

可以看到 Pre-request 里常用的功能就两种,设置环境变量和设置全局变量。这条请求的 pre-request 就是在注册之前生成一个字符串作为随机用户名。

postman.setEnvironmentVariable("random_username", ("0000" + (Math.random()*Math.pow(36,4) << 0).toString(36)).slice(-4));

其他用法还包括在发起请求之前获取当前的时间戳放在参数里:

postman.setEnvironmentVariable("unixtime_now", Math.round(new Date().getTime()/1000));

当然也可以用来生成校验串。总之,在发请求之前需要手动修改的东西,都可以考虑用脚本自动实现。

  • Test

和 Pre-request 相比,Test 的 Snippets 就丰富多了,例如检查状态码、检查响应串、验证 JSON、检查 header、限制应答时间。

如果需要将服务器响应的数据保存下来,用在后面的请求里,也需要在这一步做。

在图中的 Test 里,我首先检查了状态码为 200,然后解析返回的 JSON,把环境变量里的 token 设为 JSON 里的 token。

  • Collection Runner

当编写了很多测试之后,就可以使用 Collection Runner 来自动运行整个 Collection 了,入口就在主界面最上面一行的 Runner 选好 Collection、Environment,如果有需要还可以载入 JSON 和 CSV 作为数据源。点击 Start Test Run ,就可以看到结果了。

mock server

Postman 支持 Mock server 其实也很重要,无论对前端开发还是后端测试,比较不同服务器之间接口很多,大家开发进度不一,另外可以做到环境隔离。Postman 通过添加examples来实现前端/后端/测试达成的接口协议,这样大家就可以分工并行干活,原文如下。
 

This behavior allows teams to mock an example request and response, in addition to simulating the endpoint using mock servers. Front-end and back-end developers and testers can all begin working in parallel, based on the agreed-upon example.

当然还有还多 mock 框架,我这里推荐大家一个很方便的 mock 框架就是 moco,已经在github 上开源了。
还有一个mock server稍微复杂些,但是也很好使。

Newman 的安装和使用

### 通过 npm 安装
如果要全局安装:

npm install -g newman 

newman 的使用

在 npm 的网站可以找到newman 的专页,非常详细的说明.

  • 支持本地 json 文件作为参数来运行

json 文件可以从 Postman 导出,选定某个 collection,你可以轻易的导出你的 Postman Collection 另外存储为一个 json 文件,然后放到你本地目录进行运行。

$ newman run examples/sample-collection.json

  • 也支持通过 url 作为参数来运行

如果已经有 CI 平台,可以把这些 Collection 放到某个服务器上,newman cli 也支持通过 url 来运行。

$ newman run https:or http: your json url

  • 还有一种就是把 newman 作为 Node.js 的一个 module 来调用,这样更适合大型项目,请参见官方示例代码。
 const newman = require('newman'); // require newman in your project

// call newman.run to pass `options` object and wait for callback

newman.run({

    collection: require('./sample-collection.json'),

    reporters: 'cli'

}, function (err) {

    if (err) { throw err; }

    console.log('collection run complete!');

});

  • 如果还需要更过命令或者帮助,可以通过下面命令获得。
 $newman -h, --help

$newman run -h

对 SSL 的支持 newman 第三版以后(目前已经是 4.3.1)可以支持通过 CLI 选项来支持 SSL

--ssl-client-cert path_to_public_cert_file

--ssl-client-key path_to_private_client_key

--ssl-client-passphrase the_secret_passphrase

对 newman 配置代理:通过对 Postman 的 request 环境变量进行设置来完成代理的配置。

HTTP_PROXY / http_proxy

HTTPS_PROXY / https_proxy

NO_PROXY / no_proxy

完成 postman 的 request 设置

用 newman 的 reporter 功能
newman 集成和支持下面几种报告方式: cli, json, junit, progress and emojitrain.

CLI 是默认选项支持的,其他选项需要你显示在后面写上,比如:

$ newman run examples/sample-collection.json -r cli,json

Jenkins 部分

Jenkins 的安装和配置可以查询相关文档,如果没有配置 master-slave 多级架构,很好搭建,此处略过。

完成 Jenkins 搭建后,开始创建 job 来执行 newman 命令,确保你的 newman 命令在 Jenkins 服务器上是可执行的,比如将路径放到 PATH 里面,先执行一下

newman -v

  • 选择一个自由风格的 job

  • 可以选择定期执行,这部分可以网上搜一下如何定期执行一个 job,一般来说就是 5 行数据,根据你的需要。比如我要每 10 分钟执行一下,就这么写 “H/10 * * * *“。

这部分也可以通过监控代码提交来 trigger,我只是举个例子。

  • 在执行 shell 的部分添加你的 shell 命令,其实也就是你 newman 命令

这里需要主线的是,你的 json 文件是放在那里,前面已经说过可以放到内部服务器,给个 url,newman 也是支持的,也可以放到 Jenkins 的服务器上。

  • 其他邮件配置或者如何自动提交 bug,也比较 normal,请自行突破,相信只有自己突破了才有更大的收获感。

不足之处:

API 接口不能太多,不要超过 300 个,太多通过这个方式还是很麻烦,至少维护 json 文件比较累。

不能支持并发操作,只能用于功能测试和压测。

总之这个自动化接口测试架构,而且带有 CI 的框架还是比较适合以 API 接口为主的测试,非常容易上手和熟悉,也非常容易维护,希望能真的帮助你。

  作为一位过来人也是希望大家少走一些弯路

在这里我给大家分享一些自动化测试前进之路的必须品,希望能对你带来帮助。

(WEB自动化测试、app自动化测试、接口自动化测试、持续集成、自动化测试开发、大厂面试真题、简历模板等等)

相信能使你更好的进步!

点击下方小卡片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/754971.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python 使用 Stable Diffusion API 生成图片示例

代码&#xff1a; import base64 import datetime import json import osimport requestsdef submit_post(url: str, data: dict):"""Submit a POST request to the given URL with the given data.:param url: url:param data: data:return: response"…

用html+javascript打造公文一键排版系统6:三级标题排版

正文中的标题分为四级&#xff0c;文中结构层次序数依次可以用“一、”“&#xff08;一&#xff09;”“1.”“&#xff08;1&#xff09;”标注&#xff1b;一般第一层用黑体字、第二层用楷体字加粗、第三层和第四层用仿宋体字标注。 对于以阿拉伯数字开头、后接英文点号.及…

First image then video A two-stage network for spatiotemporal video denoising

First image then video: A two-stage network for spatiotemporal video denoising http://export.arxiv.org/abs/2001.00346 作者&#xff1a;王策 南开大学 本文针对的是视频中出现大运动。或者前景和背景由于弱光环境较弱时造成去噪性能差的问题而解决&#xff0c;论文时在…

String 类的常用方法

String类的常用方法 说明 String类是保存字符串常量的&#xff0c;每次更新都需要重新开辟空间&#xff0c;效率比较低&#xff0c;因此 java 设计者还提供了StringBuilder和StringBuffer来增强String的功能&#xff0c;并提高效率。 常用方法 public class String01 {publi…

C语言——动态内存管理(malloc, calloc, realloc, free, 柔性数组详解)

C语言——动态内存管理 1. 为什么需要动态内存管理 我们以往定义数组&#xff0c;都是这么定义的&#xff1a; int nums[10] {0};以这种方式开辟空间有两个特点&#xff1a; 空间开辟的大小是固定的数组在声明的时候&#xff0c;必须指定数组的长度&#xff0c;它所需要的内…

数据库应用:Navicat连接MySQL

目录 一、理论 1.Navicat 2.MVCC 二、实验 1.Navicat连接MySQL 2.navicat的基础操作 3.测试提交事务 三、问题 1.解决1130 2.解决2003 四、总结 一、理论 1.Navicat &#xff08;1&#xff09;简介 Navicat Premium 是一套数据库开发工具&#xff0c;实现从单一应用…

基于时域特征和频域特征组合的敏感特征集,再利用CNN进行轴承故障诊断(python编程)

1.文件夹介绍&#xff08;使用的是CWRU数据集&#xff09; 0HP-3HP四个文件夹装载不同工况下的内圈故障、外圈故障、滚动体故障和正常轴承数据。 2.模型 按照1024的长度分割样本&#xff0c;构建内圈故障、外圈故障、滚动体故障和正常轴承样本集 2.1.计算11种时域特征值 # 计…

EfficientNet论文笔记

EfficientNet论文笔记 通过NAS平衡了channel&#xff0c;depth&#xff0c;resolution&#xff0c;发现在相同的FLOPs下&#xff0c;同时增加 depth和 resolution的效果最好。 数据集效果小于resolution怎么办&#xff1f; EfficientNet—b0框架 表格中每个MBConv后会跟一个…

Maven —— 项目管理工具

前言 在这篇文章中&#xff0c;荔枝会介绍如何在项目工程中借助Maven的力量来开发&#xff0c;主要涉及Maven的下载安装、环境变量的配置、IDEA中的Maven的路径配置和信息修改以及通过Maven来快速构建项目。希望能对需要配置的小伙伴们有帮助哈哈哈哈~~~ 文章目录 前言 一、初…

力扣刷题序列 - 字符串篇

这里写目录标题 字符1.520 回文串的定义2. 125 公共前缀3. 14 单词4. 4345. 58 字符串的反转6. 3447. 5418. 5579. 151 字符的统计10. 38711. 38912. 38313. 24214. 4915. 45116. 42317. 65718. 55119. 69620. 467 数字与字符间的转换21.41222.50623.53924.553537592---64038 子…

GAME101 OpenCV环境安装

文章目录 Opencv 库编译Step 1.下载源码Step 2. 使用CMake编译Step3. 解决CMake 过程重的报错错误1&#xff1a; 错误的Python版本:错误1 解决办法 错误2&#xff1a;下载ippicv_2020_win_ia32_20191018_general.zip失败错误2 解决办法 错误3&#xff1a;ffmpeg相关文件下载失败…

力扣 509.斐波那契数

509.斐波那契数 1 题目2 思路3 代码4 结果 1 题目 题目来源&#xff1a;力扣&#xff08;LeetCode &#xff09;https://leetcode.cn/problems/fibonacci-number 斐波那契数 &#xff08;通常用 F(n) 表示&#xff09;形成的序列称为斐波那契数列 。该数列由 0 和 1 开始&…

git国内下载

https://npm.taobao.org/mirrors/git-for-windows/点进去最新的最后一条 选择.exe文件点击

二、遥感物理基础(2)物体的发射与反射辐射特征

前言 本文内容较为枯燥&#xff0c;是遥感的物理原理&#xff0c;作者已经尽量去帮助读者理解了&#xff0c;无论是精细的阅读还是走马观花&#xff0c;长期下来都能提高读者对专业知识的理解&#xff1b;作者非物理专业&#xff0c;对某些知识点的总结仅是个人理解&#xff0c…

win7 刻录机刻录文件显示 “准备好写入到”光盘中的文件”

一、问题描述 就是这么突然&#xff0c;好好的刻录机&#xff0c;突然就刻录不了了&#xff0c;昨天都可以正常刻录&#xff0c;今天就显示&#xff1a; 准备好写入到”光盘中的文件&#xff0c;然后还显示待刻录的文件…&#xff0c;右键选择刻录就直接弹出光盘了&#xff1f…

吴恩达机器学习2022-Jupyter特征缩放

1可选实验室: 特征缩放和学习率(多变量) 1.1 目标 在这个实验室里: 利用前一实验室开发的多变量线性回归模型程序在具有多种功能的数据集上运行梯度下降法探讨学习速度 alpha 对梯度下降法的影响通过使用 z 分数标准化的特征缩放来提高梯度下降法的性能 1.2 工具 您将使用…

第七章:FCN——Fully Convolutional Networks for Semantic Segmentation

0.摘要 卷积神经网络是强大的视觉模型&#xff0c;能够产生特征的层级结构。我们展示了通过端到端、像素到像素的训练的卷积神经网络在语义分割方面超越了现有技术的最新成果。我们的关键发现是构建“全卷积”网络&#xff0c;它可以接受任意大小的输入并生成相应大小的输出&am…

OSPF和VLAN综合实验

目录 题目 1.IP地址的规划设计 2.搭建拓扑并进行基础IP配置 3.配置虚拟局域网 1&#xff09;按子网划分要求配置PC1和PC2 检测&#xff1a;输入[SW1]display vlan进行检查 配置路由器R3 检测&#xff1a;用PC1去访问PC2 2&#xff09;配置拓扑中其余路由器的网关以及回…

基于安森美音频处理器Ezairo 8300助听器设计

v hezkz17进数字音频系统研究开发交流答疑 Ezairo 8300 系统框图 许多现代音频产品将受益于安森美(onsemi)基于DSP的EZAIRO系列音频处理器。 安森美&#xff08;ON Semiconductor&#xff09;的EZAIRO系列音频处理器是基于数字信号处理器&#xff08;DSP&#xff09;的产品系列…

​​Layui之用户管理实例(对数据的增删改查)

目录 ​编辑一、R工具介绍&#xff08;&#xff09; ​编辑二、数据表的增删改查 ​编辑2.1我们先得从查询数据库的语句入手 2.2优化dao类 2.4UserAction类 2.5前台的页面实现增删改查操作 2.6 userManage页面JS 2.7user新增、修改iframe层js 前言 上一篇我分享了…