当前位置: 首页 > news >正文

我一口气记录下整个接口自动化测试过程!

一、为什么选用postman

postman调试工具无论对于开发和测试小白,还是技术大牛来说应该都耳熟能详,在过去的几年里大家对这款工具应用最广的用途是把当作接口调试的测试工具,它能发送几乎所有类型的HTTP请求,操作界面非常简洁美观(大家来欣赏下图),支持抓包,保存历史记录,有用户组管理机制,方便多端同步用例等等。最主要的是各位小伙伴已经对它用于接口调试的功能非常熟悉,已经为我们接下来使用它做持续集成的接口自动化打下了良好的基础。

二、postman 基础知识

相信大家使用postman来调试接口应该是相当熟悉了,所以还不懂使用的同学可以在网上找到相关的资料(非常多),或者直接查阅官网,我建议大家还是要学会看官方文档,度娘很多教程可能会不全或者已经过时了,官网是最新最全的学习文档,不懂就慢慢看,这篇文章只能带着大家入门,修行只能靠自己(微笑)。

官方文档:

https://learning.getpostman.com/docs/postman/launching_postman/

1、postman版本选择

postman分为chrome插件版和native版本,插件版的有很多功能都受限制,比如:必须要安装扩展才可以操作cookie,headers设置受限制,没有native版本的Postman console,非常不方便调试等,不方便我们后续做接口自动化,所以版本必须选择native版,版本号用最新的就可以。

工具下载:

https://www.getpostman.com/downloads/

2、postman代理抓包

由于postman不是类似fiddle这种专门用于抓包的软件,fiddler软件安装后默认打开抓包功能,默认端口是8888,但是postman需要自己手动打开代理设置。设置方法如下:

①点击右上角的拦截图标,打开【Capture requests】,设置好Port和Target

注意Capture requests按钮一定是要处于on的状态;

Port:就是端口,只要不设置系统和浏览器的冲突端口就可以,比如9999;

Target:就是抓到的HTTP包存放的目标地,我一般选择放在history,方便查看。

②打开浏览器的代理设置,设置相同端口

打开浏览器,找到代理服务器,将地址修改为本地机器的ip地址,端口设置为第①步设置的端口号,点击确定即可。

我们演示的这个设置方法是以PC端为例子,有些同学需要抓APP端的包。设置方法原理也大概相同,大家可以参看官网文档中的设置方法即可。

移动端设置方法:

https://learning.getpostman.com/docs/postman/sending_api_requests/capturing_http_requests

3、postman调试控制台

打开左下角打开【postman console】控制台,当我们某个测试用例跑不通的时候需要调试,可以打开这个postman的控制台方便查看接口调试的打印信息,当然我们后续用js写的脚本可以在控制台中看到输出信息。

4、postman 发送请求

发送请求是postman最核心的功能,如下图选择好请求方式及接口地址、相应参数,点击发送即可。有两个地方强调下:

①需要发送上传文件的请求,在body中选择选择form-data ,选择File选项后即可选择文件

②可以将请求头统一管理,打开任意一个请求tab,点击Headers->Presets->Manage Presets可以设置好请求头信息,下一个请求再需要相同的请求头便可以从这里读取。

三、postman 变量与集合

1、什么是变量

首先我们来思考一个问题,为什么要使用变量,如果某个参数值只需要在某个独立接口的使用一次,那么我们可以不使用变量,但是如果变量需要在多个位置重复使用,或者发生接口传递(即前一个接口的返回值用于下一个接口的请求参数),那么借助变量,postman就可以实现业务逻辑与测试数据分离,帮助我们建立健壮的测试用例。

2、变量的作用域

全局变量(Global):主要用于需要在多个位置重复使用的几乎不改变的数据

环境变量(environment):主要用于接口传递的参数

局部变量(local):集合/文件/接口中 某个js脚本中的变量

数据变量(data):主要用于并发测试(json/csv文件)

同变量名的情况下,优先级范围:局部变量>数据变量>环境变量>全局变量

3、如何设置变量

设置变量的方法有两种:

① 在postman的ui上进行定义:如下图所示

② 使用脚本定义,在Test选项卡中填入脚本:

pm.environment.set("new_name", "zhougang");

4、如何使用变量

使用变量也是有两种写法,用在不同的场景中

① 在Builder中使用:{{varname}},一般用于请求头、请求体、请求地址中

② 在js 脚本中使用:pm.environment.get("variable_key"),一般用于Test或pre-request Script选项卡中

        

5、集合

我们为什么要使用集合以及使用集合的好处在哪?

①可以组织业务逻辑:分类和存储接口

②方便一键运行:在runner中选择要运行的集合或者里面的文件夹进行运行

③方便导入导出:导出和导入json文件,如使用newman在命令行执行;

注意点:集合和变量的导出是分开的。

④方便分享:分享至自己团队的共享目录下

基于以上几点,我们想要写出好维护且高效的接口测试用例,一定要好好利用集合。

四、postman脚本应用–接口断言

前三节内容我们了解到了做自动化测试前必须掌握的基础知识,这一节我们进入到接口自动化测试中的核心内容:如何判断一个接口的返回值与期望值相符,也就是我们说的接口断言成功。这个时候postman的测试沙箱sandbox就发挥了巨大的作用。官方解释:Postman sandbox沙箱是一个JavaScript执行环境,在编写pre-request scripts 和 test scripts编写的脚本在此沙箱中执行(Postman和Newman中都可以使用)

①在请求发送前,在“pre-request script”选项卡下输入脚本,主要用于设置测试需要的测试参数

②在请求发送后,在“test”选项卡下输入脚本,主要用于做断言。

③因此如果我们需要断言一个接口返回是否是预期值,可以参考如下例子:

1)判断code是不是返回200 

var jsonData = pm.response.json();

pm.test("操作是否成功", function () {

    pm.expect(jsonData.code).to.eql(200);

});

2)判断字段是不是跟预期值相等

tests["名称是否正确"] = jsonData.data.name === pm.environment.get("customer_contract_name");

3)判断返回时间是否在预期2000ms内

pm.test("接口返回时间是否超过2s", function () {

    pm.expect(pm.response.responseTime).to.be.below(2000);

});

4)执行顺序设定(此代码只在runner和Newman中生效):

postman.setNextRequest('接口名称');

上边的例子都可以在工具的右侧找到事例,大大节省我们编写断言的时间,如果这里没有你需要的,可以查看帮助文档

https://learning.getpostman.com/docs/postman/scripts/postman_sandbox_api_reference/

重点强调:你可以将请求和测试脚本添加到一个集合,一个文件夹,一个请求中,优先级是:请求>文件夹>集合。举个例子,判断返回时间的断言就可以放在集合或者文件中,因为多个接口可以共用这一个断言。

五、postman接口自动化

前面我们已经做好了各种准备工作,包括抓包、编写接口、存入集合、设置变量、断言等,接下来就可以把我们的接口自动的跑起来。

1、使用postman自带的 runner工具

①按照下图进入runner页面,在runner中选择要运行的collection或者里面的文件夹进行运行

②enviroment:选择用例跑的环境变量集合

③iterations:接口迭代次数(接口自动化 默认使用1就行,1以上一般拿来做并发测试)

④delay:每个接口发起请求的的间隔时间(建议100ms)

⑤data:数据文件,可以是json格式的,也可以是csv格式的(一般用于并发测试)

⑤keep variable values: 重点!!!必须要勾上,环境变量将会更新

⑥start run:运行结果集,并查看结果页,可导出

运行结果如下显示,示例中34条成功,0条失败。如果有失败的用例可以用控制台查看是请求没发送成功还是断言失败,单独调试。

2、使用postman的插件:Newman

到了这一步,其实我们已经讲完用postman做接口自动化的一个完整过程了。但是再来思考一个问题,如果我要将这个接口自动化测试加入持续集成的环节,并且再给领导发一份这个测试结果的报告呢?这时候 Postman的持续集成方案,便是使用自带的插件Newman + 持续集成工具如Jenkins的结合使用

1)官方说明文档:

https://www.npmjs.com/package/newman(https://www.npmjs.com/package/newman

2)使用Newman运行用例并生成测试报告

①首先需要安装node.js环境(同时安装了npm)

下载地址:http://nodejs.cn/download/

②使用命令行安装 Newman

npm install -g newman

安装导出html报告的包:

npm install -g newman-reporter-html

③Newman运行命令脚本,一般只需要指定运行集合、运行环境、间隔时间,数据文件,指定输出报告的模板和位置

原始脚本:

newman run xxx.json

添加下述定制化参数:

指定运行环境变量集合:

--environment xxx.environment.json

指定输出环境变量集合:

--export-environment xxx.environment.json

指定输出报告形式:

-r cli,html

指定输出报告文件:

--reporter-html-export xxx.htm

指定接口间隔时间:

--delay-request 100

进入脚本所在文件目录,运行最终脚本

newman run cms_init.postman_collection.json --environment cms-test.environment.json --export-environment cms-test.environment.json -r cli,html --reporter-html-export ./reports/cms_init_html_output.htm --delay-request 120

运行结果(命令行):

运行结果(html格式):

3)使用Newman与Jenkins结合

当我们将代码推送到git上后,可以使用jenkins直接构建任务即可,省去了脚本打包放到对应服务器再启用对应环境脚本的麻烦。

参考链接:

https://www.jianshu.com/p/18863c609019

参考链接:

https://blog.csdn.net/qq_16510189/article/details/79074809

①下载jenkins的war包,使用java -jar jenkins.war –httpPort=8080启动, 按照配置jenkins完成

②在Jenkins中安装对应的插件,Git、NodeJS 插件

③新建job,配置相关内容

构建环境配置

构建脚本

选择构建,查看控制台输出信息

六、与钉钉机器人结合

钉钉是我们常用于工作沟通的工具,配合钉钉强大的机器人功能,可以让我们在持续集成的测试环节中实时、快速接收到测试结果的消息推送。

1、建一个自动化测试群,点击群设置-》群机器人

2、选择自定义机器人

3、添加机器人,获取到access token

4、将access token设置到Jenkins中的钉钉通知器插件中(在Jenkins插件中下载安装),最后保存即可

5、Jenkins任务跑完以后,钉钉就会收到消息推送

 

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

相关文章:

我一口气记录下整个接口自动化测试过程!

一、为什么选用postman postman调试工具无论对于开发和测试小白,还是技术大牛来说应该都耳熟能详,在过去的几年里大家对这款工具应用最广的用途是把当作接口调试的测试工具,它能发送几乎所有类型的HTTP请求,操作界面非常简洁美观…...

【VS中Git同步提交 报错:访问.vs/FileContentIndex/xxx.vsidx权限不允许】

参考: Git commit vsidx file access denied in Visual Studio 一劳永逸的方法: 在VSCode里,Git->设置->选项:编辑.gitignore文件,如下图: 忽略整个.vs文件夹,再重新提交就不会有涉及…...

Linux下Nginx的安装与使用

Linux下Nginx的安装与使用 博客: www.lstar.icu 开源地址 Gitee 地址: https://gitee.com/lxwise/iris-blog_parent Github 地址: https://github.com/lxwise/iris-blog_parent 序言 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子…...

飞机布雷盖航程公式

飞机布雷盖航程公式 1. 喷气式飞机布雷盖航程公式推导2. 螺旋桨飞机布雷盖航程公式推导3. 喷气式飞机与螺旋桨飞机的差异分析3.1 喷气式飞机的推力产生机制3.2 螺旋桨推进推力产生机制 布雷盖航程公式(Breguet Range Equation)是描述飞行器巡航飞行阶段航…...

在K8s平台部署个人博客

在K8s平台部署个人博客 实验步骤查看wordpress前端的service浏览器访问http://node_ip:30090 实验步骤 kubectl create secret generic mysql-pass --from-literalpasswordYOUR_PASSWORD把mysql.tar.gz和wordpress.tar.gz上传到K8s工作节点,手动解压即可&#xff1…...

git入门教程10:git性能优化

一、配置优化 使用SSH协议: 相比HTTP/HTTPS协议,SSH协议在网络传输中更高效,且支持更安全的认证方式。确保你的远程仓库URL使用的是SSH协议,例如:git clone gitgithub.com:username/repo.git。 调整Git缓冲区大小&…...

Redis(2):内存模型

一、Redis内存统计 工欲善其事必先利其器,在说明Redis内存之前首先说明如何统计Redis使用内存的情况。 在客户端通过redis-cli连接服务器后(后面如无特殊说明,客户端一律使用redis-cli),通过info命令可以查看内存使用情…...

深入解析Diffusion和AsymmDiT:Mochi 1的高效AI视频生成之路

随着AI视频生成技术的迅猛发展,各种模型纷纷涌现,各自展现出独特的优势。近期,Genmo 推出了新一代视频生成模型——Mochi 1,以其非对称架构设计和高效生成流程在业界备受瞩目。作为开源模型,Mochi 1不仅在视觉生成质量…...

VMware capacity mismatch for disk错误解决办法:kb-vuln-1靶机

https://www.vulnhub.com/entry/kb-vuln-1,540/ 本机安装有: VMware Workstation 16 Pro 16.2.1 build-18811642VirtualBox 图形用户界面 版本 5.2.30 r130521 (Qt5.6.2) vm16.2支持wsl2,所以我得让vm16.2跑靶机,VirtualBox5.2可以导入靶机,但是无法开机(不支持wsl2),得升级 …...

Java Collection/Executor LinkedTransferQueue 总结

前言 相关系列 《Java & Collection & 目录》《Java & Executor & 目录》《Java & Collection/Executor & LinkedTransferQueue & 源码》《Java & Collection/Executor & LinkedTransferQueue & 总结》《Java & Collection/Execu…...

阿拉伯国家本地化测试的特点

针对阿拉伯国家的应用程序的本地化测试需要详细了解语言、文化背景、地区规范和技术细节,以符合阿拉伯语用户的期望。这些国家包括沙特阿拉伯、阿拉伯联合酋长国、科威特、卡塔尔、巴林和阿曼,具有独特的语言和文化因素,成功地本地化测试解决…...

申请前必知!关于「美国绿卡」的28个常见问题汇总!

01 美国绿卡的类别 美国绿卡分为多个类别,如亲属移民、职业移民、投资移民等。每个类别有不同的申请要求和优先级。选择最适合自己的类别,并深入了解相关法律和政策,是成功申请的第一步。 02 移民路径选择 根据个人情况(如职业…...

2024年十款超好用的图纸防泄密软件精选,十款优秀的图纸防泄密软件推荐

在当今竞争激烈的商业环境中,图纸作为企业的核心资产和智慧结晶,其安全性至关重要。一旦图纸泄露,可能会给企业带来巨大的经济损失和竞争劣势。因此,选择一款可靠的图纸防泄密软件成为了企业保护知识产权的关键。下面为大家推荐十…...

数据库锁机制

数据库锁机制 数据库锁主要分为三大类 1.全局锁 2.表级锁 3.行级锁 全局锁 定义:全局锁是对整个数据库实例加锁,禁止所有对数据库的写操作。 用途:主要用于备份和维护操作。 示例 MySQL FLUSH TABLES WITH READ LOCK;这条命令会锁定所…...

呼叫中心系统如何选型?

呼叫中心系统如何选型? 作者:开源呼叫中心系统 FreeIPCC 采购一套呼叫中心系统是企业提升客户服务质量、优化运营流程、增强市场竞争力的关键步骤。一个合适的呼叫中心系统不仅能提升客户满意度,还能提高内部团队的工作效率,降低…...

Ubuntu 22.04安装部署

一、部署环境 表 1‑1 环境服务版本号系统Ubuntu22.04 server lts运行环境1JDK1.8前端WEBNginx1.8数据库postgresqlpostgresql13postgis3.1pgrouting3.1消息队列rabbitmq3.X(3.0以上)运行环境2erlang23.3.3.1 二、安装系统 2.1安装 1.安装方式,选第一条。 2.选择…...

KINGBASE部署

环境:x86_64 系统:centos7.9 数据库–版本:KingbaseES_V008R006C008B0014_Lin64_install 授权文件–版本:V008R006-license-企业版-90天 一 前置要求 1.1. 硬件环境要求 KingbaseES支持通用X86_64、龙芯、飞腾、鲲鹏等国产C…...

探索 ONLYOFFICE:开源办公套件的魅力

文章目录 引言一、ONLYOFFICE 产品介绍与历史1.1 ONLUOFFICE 介绍1.2 ONLYOFFICE发展历史 二、ONLYOFFICE 的核心功能2.1 文档处理2.2 演示文稿 三、ONLYOFFICE 部署与安装四、ONLYOFFICE 产品优势和挑战五、ONLYOFFICE 案例分析六、ONLYOFFICE 的未来发展七、全文总结 引言 在…...

如何保护网站安全

1. 使用 Web 应用防火墙(WAF) 功能:WAF 可以实时检测和阻止 SQL 注入、跨站脚本(XSS)、文件包含等常见攻击。它通过分析 HTTP 流量来过滤恶意请求。 推荐:可以使用像 雷池社区版这样的 WAF,它提…...

抖音矩阵系统开发的技术框架解析,支持OEM

一、引言 随着短视频平台的兴起,抖音已成为全球范围内极具影响力的社交娱乐应用。对于企业和创作者而言,构建抖音矩阵系统可以实现多账号管理、内容分发与优化、数据分析等功能,从而提升品牌影响力和内容传播效果。本文将详细探讨抖音矩阵系统…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

【Oracle APEX开发小技巧12】

有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)

目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...

力扣-35.搜索插入位置

题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】

大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...

0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化

是不是受够了安装了oracle database之后sqlplus的简陋,无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话,配置.bahs_profile后也能解决上下翻页这些,但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可&#xff0c…...