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

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

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

大致路径为:

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

目录

简单介绍

新建集合与请求

postman中参数变量的存储

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

postman中的cookie管理

 断言

状态码断言

响应体内容断言

响应头断言

响应时间断言

DDT数据驱动测试

​编辑 编写CSV文件

运行集合


简单介绍

        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.mfbz.cn/a/876342.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

炫酷HTML蜘蛛侠登录页面

全篇使用HTML、CSS、JavaScript&#xff0c;建议有过基础的进行阅读。 一、预览图 二、HTML代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-w…

Cubieboard2(五) 安装无线网卡驱动

1 前情提要 1.1 硬件情况 1&#xff09;Cubieboard2&#xff1a;http://cubieboard.org/model/cb2/ Cubieboard2 是一个由珠海的 Cubietech 团队推出&#xff0c;采用全志 A20 处理器的开发板。 手头上的是生产于 2012.9.9 的是 MMC SDCard 而非 dual_card 款&#xff0c;也…

【计算机网络】网络通信中的端口号

文章目录 一、引入端口号二、端口号的作用三、端口号的确定 在TCP/IP协议中&#xff0c;传输层有两个重要的协议&#xff1a;TCP&#xff08;传输控制协议&#xff09;和UDP&#xff08;用户数据报协议&#xff09;。TCP用于提供可靠的数据传输&#xff0c;而UDP则适合用于广播…

打造下一个AI拥抱视频热潮:从CloneAI的成功中汲取灵感

在科技与创意的交汇点,CloneAI以其敏锐的洞察力和高效的执行力,在短时间内迅速崛起,成为App Store的明星应用。其成功不仅在于抓住了AI技术的浪潮,更在于精准地利用了社交媒体的趋势,创造了一个独特的用户体验。对于希望复刻这一成功的开发者们来说,CloneAI的经验无疑是一…

QT多线程编程(基础概念以及示例)

QT多线程编程 前言&#xff1a;基础夯实&#xff1a;一:多线程概述二:QT多线程的使用1. 继承QThread类2. 继承QObject类3. QtConcurrent模块 三:线程同步与通信四:线程安全五:线程管理六:总结 效果展示&#xff1a;实现功能&#xff1a;核心代码&#xff1a;mainwindow.hmythre…

网络穿透:TCP 打洞、UDP 打洞与 UPnP

在现代网络中&#xff0c;很多设备都处于 NAT&#xff08;网络地址转换&#xff09;或防火墙后面&#xff0c;这使得直接访问这些设备变得困难。在这种情况下&#xff0c;网络穿透技术就显得非常重要。本文将介绍三种常用的网络穿透技术&#xff1a;TCP 打洞、UDP 打洞和 UPnP。…

SQL Server数据库简单的事务日志备份恢复

模拟数据库备份恢复过程 1.基础操作 1.创建TestDB数据库&#xff0c;并添加数据 USE [master] GO CREATE DATABASE TestDB CONTAINMENT NONE ON PRIMARY ( NAME NTestDB, FILENAME ND:\TestDB.mdf , SIZE 8192KB , MAXSIZE UNLIMITED, FILEGROWTH 65536KB ) LOG ON ( …

什么是API网关(API Gateway)?

1. 什么是API网关&#xff08;API Gateway&#xff09;&#xff1f; 在微服务体系结构中&#xff0c;客户端可能与多个前端服务进行交互。 API 网关位于客户端与服务之间。 它充当反向代理&#xff0c;将来自客户端的请求路由到服务。 它还可以执行各种横切任务&#xff0c;例…

GHOST重装后DEF盘丢失:深度解析与高效数据恢复方案

在数字信息爆炸的时代&#xff0c;数据安全与恢复成为了每个计算机用户必须面对的重要课题。GHOST作为系统备份与恢复领域的佼佼者&#xff0c;以其快速、便捷的特点赢得了广泛的用户基础。然而&#xff0c;在使用GHOST进行系统重装的过程中&#xff0c;不少用户遭遇了DEF盘&am…

【信创】Linux上图形化多ping工具--gping的编译安装与打包 _ 统信 _ 麒麟 _ 方德

原文链接&#xff1a;【信创】图形化多ping工具gping的编译安装与打包 | 统信 | 麒麟 | 方德 Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇关于在Linux操作系统上使用gping的文章。gping是一款非常实用的命令行工具&#xff0c;它将传统的ping命令进行了可视化改进…

【大数据方案】智慧大数据平台总体建设方案书(word原件)

第1章 总体说明 1.1 建设背景 1.2 建设目标 1.3 项目建设主要内容 1.4 设计原则 第2章 对项目的理解 2.1 现状分析 2.2 业务需求分析 2.3 功能需求分析 第3章 大数据平台建设方案 3.1 大数据平台总体设计 3.2 大数据平台功能设计 3.3 平台应用 第4章 政策标准保障体系 4.1 政策…

Java设计模式—面向对象设计原则(五) ----->迪米特法则(DP) (完整详解,附有代码+案例)

文章目录 3.5 迪米特法则(DP)3.5.1 概述3.5.2 案例 3.5 迪米特法则(DP) 迪米特法则&#xff1a;Demeter Principle&#xff0c;简称DP 3.5.1 概述 只和你的直接朋友交谈&#xff0c;不跟“陌生人”说话&#xff08;Talk only to your immediate friends and not to stranger…

【开放词汇检测】MM-Grounding-DINO论文翻译

摘要 Grounding-DINO 是一种先进的开放式检测模型&#xff0c;能够处理包括开放词汇检测&#xff08;Open-Vocabulary Detection&#xff0c;OVD&#xff09;、短语定位&#xff08;Phrase Grounding&#xff0c;PG&#xff09;和指代表达理解&#xff08;Referring Expressio…

人脸防伪检测系统源码分享

人脸防伪检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

(c++)用取模符%、除运算判断是否是某个数的倍数,判断个位十位是否有某个数

结果易懂&#xff0c;但凡和7有关&#xff0c;都输出相应的关系。关系分为三种&#xff0c;7的倍数&#xff0c;十位是7&#xff0c;个位是7 #include<iostream>using namespace std;int main() {for (int num 1; num < 100; num){if (num % 7 0)//是7的倍数{cout …

Android 13 固定systemUI的状态栏为黑底白字,不能被系统应用或者三方应用修改

目录 一.背景 二.思路 三.代码流程 1.colos.xml自定义颜色 2.设置状态栏的背景颜色 3.对View进行操作 ①.对Clock(状态栏左侧的数字时钟)进行操作 ②.对电池(BatteryMeterView)进行操作 4.锁屏状态栏 5.patch汇总 一.背景 客户需求将状态栏固定成黑底白字,并且不能让系…

Unity教程(十五)敌人战斗状态的实现

Unity开发2D类银河恶魔城游戏学习笔记 Unity教程&#xff08;零&#xff09;Unity和VS的使用相关内容 Unity教程&#xff08;一&#xff09;开始学习状态机 Unity教程&#xff08;二&#xff09;角色移动的实现 Unity教程&#xff08;三&#xff09;角色跳跃的实现 Unity教程&…

Pytest配置文件pytest.ini如何编写生成日志文件?

1、新建pytest.ini文件 [pytest] log_clitrue log_leveLNOTSET log_format %(asctime)s %(levelname)s %(message)s %(filename)s %(funcName)s %(lineno)d log_date_format %Y-%m-%d %H:%M:%Slog_file ./logdata/log.log log_file_level info log_file_format %(asctime…

【6大设计原则】迪米特法则:解密软件设计中的“最少知识原则”

引言 在软件设计中&#xff0c;设计原则是指导我们构建高质量、可维护系统的基石。迪米特法则&#xff08;Law of Demeter&#xff0c;LoD&#xff09;&#xff0c;也被称为“最少知识原则”&#xff0c;是六大设计原则之一。它强调对象之间的松耦合&#xff0c;确保系统的各个…

爬虫代理API的全面解析:让数据抓取更高效

在大数据时代&#xff0c;网络爬虫已经成为收集和分析数据的重要工具。然而&#xff0c;频繁的请求会导致IP被封禁&#xff0c;这时候爬虫代理API就显得尤为重要。本文将详细介绍爬虫代理API的作用、优势及如何使用&#xff0c;帮助你更高效地进行数据抓取。 什么是爬虫代理AP…