[Postman]接口自动化测试入门

news2024/11/25 0:22:00

文章大多用作个人学习分享,如果大家觉得有不足或错漏的地方欢迎评论指出或补充

此文章将完整的走一遍一个web页面的接口测试流程

大致路径为:

        创建集合->调用接口登录获取token->保存token->带着token去完成其他接口的自动化测试->断言->断言->保存测试结果

简单介绍

        postman是用于软件测试调试接口的工具,通过模拟用户发出的http请求参数来验证响应是否与期望值相符合。

新建集合与请求

workplace中创建一个集合,以及在集合中创建请求

在集合中,可以将组织相关的API都整合到一起,且可以按照顺序一键运行,记录测试结果,生成测试报告

下面会以csdn中的搜索接口来走一遍这个流程

csdn页面中需要先进行登录,才可完成后续的操作

所以,我们第一步的是需要先获取登录接口中返回的认证信息。

postman中参数变量的存储

通常在调用了一个登录接口后,会相应的返回一个token或者是cookie。让客户端存储下来,好完成后续的身份验证。

如果我们想要对一些有身份验证要求的接口进行测试,就要在请求头上对应的加上一个token或者cookie(对应的身份验证方式就要看被测接口的开发设计了)

对于请求头或者请求体中的某些参数,我们可以使用环境变量或者全局变量去进行赋值。

首先,先调查csdn登录接口的设计与参数

下面是csdn的账密登录接口对应的参数,userIdentification是账号,pwdOrVerifyCode是密码

{
    "userIdentification":"",
    "pwdOrVerifyCode":"",
    "loginType":"1",
    "webUmidToken":"",
    "uaToken":"",
    "agreedPrivacyPolicy":0
}

我们在对应的进行传参登录后,再查看respond,可以发现其返回的cookie格式是由多个set-cookie以键值对的方式返回的。 

想要把这个respond里的cookie带到后续请求接口的header的参数中,方法可以有如下:

使用javascript对响应进行处理存储cookie到环境变量  

大致的流程是:

1. 首先对登录接口进行请求

2.使用postman中的test模块编写javascript,对响应中的cookie进行存储到环境变量当中

3.在后续的接口上,将cookie字段中的参数使用一个占位符进行替换

4.结果是,在进行请求时header就会带着cookie去访问了            

新建一个环境与环境变量

并在请求中使用上对应的环境,这样在执行javascript的时候,才会赋值到对应的环境变量上 编写一个javascript脚本去存储响应头里的所有set-cookie并进行拼装处理

//  拿header里面set-cookie
const cookies = pm.response.headers.filter(function (header){
    return header.key.toLowerCase() === 'set-cookie';
})

// 拼接起来
let cookieString = cookies.map(function (cookie){
    return cookie.value.split(';')[0];
}).join(';');

// 存储到环境变量中
pm.environment.set("cookie", cookieString);

// 打到控制台看一眼
console.log(pm.environment.get("cookie"));

在接口进行请求响应后,再去查看环境变量中的cookie变量。可以发现cookie已经存储起来了 

在其他需要认证的接口上的请求头里加上cookie键,并将值用占位符代替。这样在请求的时候,就会将环境变量里的cookie值加到请求头上,完成身份验证。使用这个方法同理,也可以对其他响应体或者响应头中的参数进行存储或处理。

postman中的cookie管理

其实,在postman当中会自动识别响应当中是否包含有cookie,如果有的话会根据域名存储起来,下一次在对同一个域名的其他接口进行请求的时候,会自动给你加上域名对应的cookie

会自动的给你先拼接好这个请求头中的cookie 

 断言

如果想要知道一个接口的响应是否符合预期,那么可以写一个断言来对响应进行判断。

在postman中提供了一个pm API去方便编写一些脚本进行测试

pm.test是其中会用到进行断言或者测试的方法

pm.test()会接收两个参数,

        第一个参数是,测试的名称

        第二个参数是,测试函数,包含了测试的逻辑

状态码断言

如果我想要判断一个接口的状态码是否为200,则脚本可以编写为:

pm.test("状态码为200", function(){
    pm.expect(pm.response).to.have.status(200);
})

响应体内容断言

想要判断返回的jsonData中的某个字段是否存在,以及对其value进行断言,可以进行下面的编写。

场景方法
判断value是否为某一个特定值to.eql(value)/to.equal(value)
判断value是否小于某个值to.below(value)
判断value是否大于某个值to.above(value)
判断value是否包含某个值to.include(value)
判断对象是否包含某个键/字段/属性to.have.property(key)

eg,判断message字段是否为success

pm.test("检查message字段的value", function(){
    const jsonData = pm.response.json();
    pm.expect(jsonData.message).to.eql("success")
})

eg,判断score字段是否小于50 

pm.test("检查score字段的value是否小于50", function(){
    const jsonData = pm.response.json();
    const data = jsonData.data;
    const score = data.score;
    let scoreData = score.score;
    pm.expect(scoreData).to.below(50);  // 检查score字段的value是否小于50,是的话通过
})

eg中对应的响应体内容

{
    "code": "0",
    "data": {
        "password": {
            "hasInfo": true,
            "expired": true
        },
        "email": {
            "hasInfo": false,
            "email": null
        },
        "score": {
            "score": 30
        },
        "loginLog": {
            "hasInfo": true,
            "logRisk": true
        },
        "showCancellation": true
    },
    "message": "success",
    "status": true
}

响应头断言

判断response的header中某一个字段是否为某一个值时

pm.test("检查响应头中的content-type是否为application/json;charset=utf-8", function(){
    pm.expect(pm.response.headers.get('Content-Type')).to.equal("application/json;charset=utf-8")
})

响应时间断言

判断本次响应的时间是否在600ms之内

pm.test("检查响应时间是否在600ms之内", function(){
    let time = pm.response.responseTime;
    pm.expect(time).to.below(600);
})

DDT数据驱动测试

DDT(Data-Driven Testing,数据驱动测试)是一种自动化测试方法,指通过使用外部数据文件(如 CSV、Excel、JSON 等)或数据源来驱动测试的输入。它的核心思想是将测试数据和测试逻辑分离,以便在不修改测试代码的情况下,用不同的数据集来重复执行同样的测试逻辑。

学会了接口身份认证登录的方式,以及断言的编写后,就来到了被测接口的设计了。

像是对csdn中的文章搜索接口进行测试,测试返回的内容是否包含搜索关键字

 在network中找到的接口可以直接以bash形式复制下来,再导入到postman中,就可以带着参数以及其请求头的参数了

 编写CSV文件

此处就简单的设计一下测试用例,不具有太多的参考性。

再将postman中搜索接口的关键字的value用占位符替换,注意占位符的命名要与csv文件中对应的参数名一致

响应的结果一般是这样滴

 

运行集合

写好搜索接口的断言

pm.test("检查响应中是否有key值", function(){
    // 拿result_vos 这个对象是一个数组,一个元素就是一篇文章的信息
    let result_vos_data = pm.response.json().result_vos
    // 还要先判断是否存在result_vos
    // 如果result_vos为空,下面的forEach也不会执行,断言会通过
    pm.expect(result_vos_data).to.be.an('array').that.is.not.empty
    // 遍历result_vos_data中存储的元素,检查元素中的title字段是否包含有{{key}}参数
    // 动态的从csv中取参
    let key = pm.variables.get('key');
    console.log(key)
    result_vos_data.forEach((item, index) => {
        // 检查是否有title字段
        console.log(item)
        pm.expect(item).to.have.property('title');
        // 检查title字段是否为空
        let sign = item.title.toLowerCase().includes(key);
        console.log(sign)
        pm.test(`返回的下标为${index}的数据是否通过`, function(){
            pm.expect(sign).to.be.true;
        });
    })
})

打开菜单后,选择 Run collection

 可以在上传附件中加入写好的csv文件

但是有一点需要注意的是,测试接口根据csv文件中的参数个数,需要进行循环n次。但这个循环次数是会将整个集合的接口都重新调用一遍。

像是一些获取前置条件的接口:登录接口之类的 ,不想且不需要被重复调用。

只能创建另一个集合去单独调用了

在点击之后对应的测试报告就会生成出来啦

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

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

相关文章

信息架构的战略视角:驱动数字化转型的设计原则与实践创新

在数字经济快速发展的今天,企业的成功越来越依赖于其信息架构的稳健性和灵活性 数字化转型不仅要求技术创新,更需要架构设计上的深思熟虑。《信息架构:商业智能&分析与元数据管理参考模型》作为信息架构领域的权威指南,为企业…

走心式精密数控车床

当然,让我来为您深入解析一下“走心式精密数控车床”这一话题。一、定义与概述 走心式精密数控车床,也被称为走心式数控车床或走心机,是一种高精度、高效率的金属加工设备。它以其独特的走心式加工方式和精密的数控技术,在精密机械…

基于JAVA+SpringBoot+Vue的中药实验管理系统

基于JAVASpringBootVue的中药实验管理系统 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末附源码下载链接🍅 哈…

【2024】Math-Shepherd:无需人工注释即可逐步验证和强化法学硕士。

搜索词: Math-shepherd: Verify and reinforce llms step-by-step without human annotations P Wang, L Li, Z Shao, R Xu, D Dai, Y Li, D Chen, Y Wu, Z Sui Proceedings of the 62nd Annual Meeting of the Association for …, 2024•aclanthology.org 摘要…

Vue3.0项目实战(四)——大事件管理系统个人中心实现

目录 1. ChatGPT & Copilot 1.1 工具 Github Copilot 智能生成代码的使用 2. 个人中心项目实战 - 基本资料 2.1 静态结构 2.2 校验处理 2.3 封装接口,更新个人信息 3. 个人中心项目实战 - 更换头像 3.1 静态结构 3.2 选择预览图片 3.3 上传头像 4. 个…

国产化数据库挑战及发展趋势

非国产数据库如Oracle、MySQL和MSSQL等在某些领域占据重要地位,但国产数据库的市场份额正在逐步提升,特别是在政策支持和市场需求的双重推动下,国产数据库的替代进程正在加速。 一、国产数据库市场规模 2024年中国数据库市场规模预计为543.1亿…

Excel数据清洗工具:提高数据处理效率的利器

Excel数据清洗工具:提高数据处理效率的利器 引言 在当今的数据驱动时代,数据的质量直接影响着分析结果的可靠性和有效性。然而,在实际工作中,我们常常会遇到数据中的各种问题,如重复记录、缺失值、格式不一致等。为了…

NISP 一级 | 3.3 网络安全防护与实践

关注这个证书的其他相关笔记:NISP 一级 —— 考证笔记合集-CSDN博客 0x01:虚拟专用网络 VPN 概述 虚拟专用网络(Virtual Private Network,VPN)是在公用网络上建立专用网络的技术。整个 VPN 网络的任意两个节点之间的连…

Python | Leetcode Python题解之第397题整数替换

题目: 题解: class Solution:def integerReplacement(self, n: int) -> int:ans 0while n ! 1:if n % 2 0:ans 1n // 2elif n % 4 1:ans 2n // 2else:if n 3:ans 2n 1else:ans 2n n // 2 1return ans

游戏领域的AI革命:从静态世界到动态玩家体验

在当今的数字化时代,游戏已经成为连接虚拟与现实世界的桥梁。开放世界游戏以其无与伦比的自由度和沉浸感吸引了无数玩家,但同时也面临着对话重复、行为可预测和互动有限等问题。本文将探讨AI技术如何通过程序化生成、动态NPC、实时行为生成以及声音与音乐等方面的应用,为游戏…

Android 知识简记 快速回顾各种知识

2.Java 基础&容器&同步&设计模式 3.Java 虚拟机&内存结构&GC&类加载&四种引用&动态代理 4.Android 基础&性能优化&Framwork 5.Android 模块化&热修复&热更新&打包&混淆&压缩 6.音视频&FFmpeg&播放器 …

创游系列开心娱乐完整组件

别人分享的一套东西,是个不错的娱乐源码,里面包含了很多小游戏。可以创建房间。 没测试自行研究吧,内含搭建教程。 代码免费下载:百度网盘

Java | Leetcode Java题解之第397题整数替换

题目: 题解: class Solution {public int integerReplacement(int n) {int ans 0;while (n ! 1) {if (n % 2 0) {ans;n / 2;} else if (n % 4 1) {ans 2;n / 2;} else {if (n 3) {ans 2;n 1;} else {ans 2;n n / 2 1;}}}return ans;} }

3D Gaussian Splatting 论文学习

概述 目前比较常见的渲染方法大致可以分为2种: 将场景中的物体投影到渲染平面:传统的渲染管线就是这种方式,主要针对Mesh数据,可以将顶点直接投影成2D的形式,配合光栅化、深度测试、Alpha混合等就可以得到渲染的图像…

【Java基础】——深入理解Java异常

目录 1- 什么是异常概述(What、Why)1-1 什么是异常(What)1-2 为什么要有异常处理机制(Why) 2- ⭐异常体系结构图-总览2-1 分类2-2 异常体系结构小结 3- 五大运行时异常3-1 NullPointerException 空指针异常3-2 ArithmeticException 算数异常3-3 ArrayInd…

HPL 源码结构分析

文件夹结构: $ cd /home/hipper/ex_hpl_hpcg/ $ pwd $ mkdir ./openmpi $mkdir ./openblas $mkdir ./hpl $ tree 1. 安装openmpi 1.1.1 使用Makefile下载配置编译安装 openmpi Makefile: all:wget https://download.open-mpi.org/release/open-m…

java spring定时任务-动态任务

cron表达式 在线生成https://cron.qqe2.com/ 6个时间刻度的话 * * * * * * 分别对应 秒 分 时 日 月 星期 ; 7个时间刻度的话 * * * * * * * 分别对应 秒 分 时 日 月 星期 年;每隔5秒执行一次:*/5 * * * * ? 每隔1分钟执行一次&#xff1a…

AI如何辅助未来数学研究:陶哲轩的最新见解与应用展望

随着人工智能(AI)技术的飞速发展,AI在多个领域的应用已经渗透到了我们生活的方方面面。然而,在严谨且逻辑性极强的数学研究领域,AI能否真正发挥作用?2024年,著名数学家、菲尔兹奖得主陶哲轩在IM…

【Nacos】配置中心

Nacos除了注册中心和负载均衡之外,还是一个配置中心,具备配置管理的功能。 Nacos 配置中心是一种用于集中式管理应用程序配置的服务,它可以将应用程序的配置从代码和本地配置文件中分离出来,实现配置的集中管理和动态更新。通过 …

刘润《关键跃升》读书笔记7

沟通: 想明⽩,说清楚,能接受 团队沟通的正确⽅式可以⽤9个字来概括:想明⽩,说清楚,能接受 (⻅图4-1)想明⽩ 有时经理跟⼈沟通,讲完之后却⽆奈地对员⼯说,你怎…