Postman高级应用——变量、流程控制、调试、公共函数、外部数据文件

2023-12-16

Postman 提供了四种类型的变量
环境变量(Environment Variable)
不同的环境,使用不同的环境变量,例如:测试过程中经常会用到 测试环境,外网环境等
全局变量(Global Variable)
所有的接口运环境中变量值都保持一致
本地变量(Local Variable)
针对接口的个性化设置,如url,用户等,作用域只限于当前接口范围内
文件变量(Data Variable)
通过在外部文件中批量设置参数,例如 json,csv等文件

流程控制
流程控制简言之就是设置接口的执行顺序,流程控制只有在collection runner或Newman里才生效

如果需要实现多个接口的一次循环,只需在每个接口的Tests中编写脚本

postman.setNextRequest('下一个接口名');
操作如下图所示:

使用if进行判断来结束执行:

if(globals["我的地盘::创建新列表 - 禅道"])postman.setNextRequest("null");
tests["执行完毕!"] = responseCode.code ===200;
我的地盘::创建新列表 - 禅道为接口B中的返回值,在接口B中将其定义成一个全局变量。接口A通过判断全局变量是否存在进而判断接口B是否执行。如全局变量存在,将终止执行,否则执行接口B。

postman.setNextRequest("null");是一个终止程序作用
【注意】

1.如果不设终止条件,接口A执行完到接口B,接口B执行完又指向接口A,会构成死循环。该示例中if(globals["我的地盘::创建新列表 - 禅道"])为终止条件。

2.执行前需将用来做判断的全局变量删除,否则第一次执行完接口A后就将终止执行。

3.为了更清楚直观的查看运行结果,最好在每一个接口的Tests中增加一个断言,否则难以判断接口A执行的次数

调试
调试有三种方式:

1.使用Ctrl+Alt+c 可以打开Postman的控制台,可以查看请求和响应(只适用于客户端,不适用于Chrom 插件)

2.用console.log()打印,到控制台看

3.tests['这里拼出你想看的字符串'] = true在界面/报告看断言

使用Postman控制台查看,如下图所示:

使用console.log()打印输出内容操作如下图所示:

使用tests['这里拼出你想看的字符串'] = true,tests并不单单是指设置断言,也可以是普通的输出某些信息,如下图所示:

公共函数
常用的公共函数分为六种,分别是:

1).判断是否超时(assertNotTimeout):

var hasResponse=postman.getResponseHeader('Content-Type')?true:false; if(!hasResponse) tests['服务端在超时前没返回任何数据,请检查相关服务、网络或反向代理设置(以下跳过其他断言)']=false;

2).未超时,显示发出的请求参数(logParams):

if(hasResponse) tests[`[INFO] 请求参数(超时没返回时不解析):${JSON.stringify(request.data)}`]=true;

3).未超时,解析返回的JSON对象(getResponseJson):

try{if(hasResponse) var json=JSON.parse(responseBody);}catch(err){ tests['服务端没返回合法的JSON格式,请检查相关服务、网络或反向代理设置(以下跳过其他断言)']=false; tests[`[INFO] 返回:${responseBody}`]=true; console.error(err);}

4).返回元素的类型(assertType):

var assertType=(name,value,type)=>{let isType=(type==='array')? Array.isArray(value):typeof value===type; tests[`${name}为${type}(实际值:${value})`]=isType;};

5).返回元素是否与预期值一致(assertEqual):

var assertEqual=(name,actual,expected)=>{tests[`${name}等于${expected}(实际值:${actual})`]=actual===expected;};

6).返回元素是否与预期值不一致(assertNotEqual):

var assertNotEqual=(name,actual,expected)=>{tests[`${name}不等于${expected}(实际值:${actual})`]=actual!==expected;};

为了使用方便,所以将以上函数设置为全局变量,每行一对 key:value 的形式编辑设置成全局变量,如下图所示:

设置好之后,来使用以上函数,使用时的代码为:

eval(globals.assertNotTimeout);//判断是否超时
eval(globals.logParams);//未超时,显示发出的请求参数
eval(globals.getResponseJson);//未超时,解析返回的JSON对象
eval(globals.assertType);//返回元素的类型
eval(globals.assertEqual);//返回元素是否与预期值一致
eval(globals.assertNotEqual);//返回元素是否与预期值不一致

各函数的具体用法,如下详解:

①第一个函数和第二个函数一起使用,先判断是否超时,若未超时,便显示发出的请求参数,操作如下图所示:

tests中的代码为:

  1. eval(globals.assertNotTimeout);

  2. eval(globals.logParams);

②第一个函数和第三个函数一起使用,先判断是否超时,若未超时,便解析返回的JSON对象,操作如下图所示:

tests中填入如下代码:

eval(globals.assertNotTimeout);
eval(globals.getResponseJson);
 
tests[json.expires_in] = 7200;

注意:由于getResponseJson是解析返回的JSON对象,所以接口请求返回的定是JSON才能使用

③返回元素的类型(assertType),操作如下图所示:

tests中代码为:

eval(globals.assertType);
//assertType=(name,value,type);
//name为返回的元素key,value为该元素的值,type为该元素的类型
assertType('姓名','boss','string');
assertType('昵称',','string');
assertType('数字',1,'number');

注意:此处需注意的是,数字类型并不是常说的int型,而是number,填入int会一直报错

返回元素类型的值中代码:var assertType=(name,value,type)=>{let isType=(type==='array')? Array.isArray(value):typeof value===type; tests[`${name}为${type}(实际值:${value})`]=isType;};

从返回元素类型的值中代码来看,该代码是一个三目运算符,重要点在于typeof中的value值,比如输入该代码:assertType('数字',1,'number');value为1,type为number,便会执行通过pass,若把type改为int,执行结果只会显示fail

进行如下操作就能轻而易举明了,如下所示:

tests中的代码为:

//解释typeof
tests[typeof 'hello'] =true;//返回出来的是string,值的类型
tests[typeof 1] =true;     //返回出来的是number
④返回元素是否与预期值一致(assertEqual),相等为true(pass),反之为false(fail),操作如下图所示:

tests中代码为:

eval(globals.assertNotTimeout);
eval(globals.getResponseJson);
eval(globals.assertEqual);
//assertEqual=(name,actual,expected);
//name为返回的元素key,actual为返回的实际值,expected为预期值
assertEqual('expires_in',json.expires_in,7200);
assertEqual('expires_in',json.expires_in,7100);
eval(globals.assertEqual);
//assertEqual=(name,actual,expected);
//name为返回的元素key,actual为返回的实际值,expected为预期值
//号码相同pass,不相同fail
assertEqual('电话号码',18867210313,18867210313);
assertEqual('电话号码',18867210310,18867210313);

⑤返回元素是否与预期值不一致(assertNotEqual),不相等为true(pass),反之为false(fail),操作如下图所示:

tests中代码如下:

eval(globals.assertNotTimeout);
eval(globals.getResponseJson);
eval(globals.assertNotEqual);
//assertNotEqual=(name,actual,expected);
//name为返回的元素key,actual为返回的实际值,expected为预期值
//号码不相等pass,相等fail
assertNotEqual('expires_in',json.expires_in,7100);
assertNotEqual('expires_in',json.expires_in,7200);

外部数据文件
外部数据文件是Collection Runner在HTTP requests 和script中可以导入CSV文件或是JSON文件,从数据文件(即CSV或JSON文件)中使用values,为了在Postman UI中去使用它们,你需要遵循和environment or global variables一样的语法。

操作步骤:

1.在你的Collection request中使用变量,以下的所有变量将会被数据文件中的相应的值替换

2.准备你所需要运行的数据文件(JSON/CSV)

CSV文件要在Collection Runner中工作,第一行必须是在request中要使用的变量名,每一行是一条用例,并表示一次迭代。

JSON文件,你需要确保你的文件有键/值对数组。数组中的每个元素是键值对的对象,代表了一次迭代。key是作为变量名,values是代替request里的值。

3.打开Collection Runner窗口以及选择合适的Collection或文件夹

4.选择“Choose files”,从文件选择区加载数据文件,如果加载成功,你可以预览Collection Runner中执行的数据量

5.设置迭代次数。每次迭代都将使用你的数据文件中的一行,如果迭代次数超过数据文件中的行数,将重复执行最后一行

6.运行Collection以及观察结果

注意:当有多个key值,中间用英文,隔开即可,csv文件中第一行的参数名要与发送请求中设置的变量名要一致

举例为百度接口,设置好参数,如下图所示:

在左侧面板中选中该接口并运行,如下图所示:

配置参数,如下图所示:

csv格式文件先制作好,再在运行时添加进来,预览效果如为:

最终运行效果如下图所示:

总结:

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

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

软件测试面试文档

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Postman高级应用——变量、流程控制、调试、公共函数、外部数据文件 的相关文章

随机推荐

  • 【计算机网络概述】第一章:概论 1.2什么是网络边缘

    学习目标 网络结构 端系统的客户 服务器模式与对等模式 两种面向网络实施的服务 前言 在第一章 我们学习了什么是 Internet 网络 计算机网络和互联网的知识点 但是由于计算机网络的知识点非常的抽象 内容又多 所以我们要反复的练习 记忆
  • 元素定位,年轻人在 Web UI 自动化成长道路上吃的第一个亏

    元素定位 对于 Web UI 自动化而言 绝对是大家成长道路上的一道绊脚石 很多初学者 都 死 在了元素定位上 从而失去了学习的兴趣 导致职业规划不得不半途而废 那么 今天 我们就使用 Katalon Studio 让工具帮我们进行元素定位
  • 软件测试面试题:如何测试App性能?

    为什么要做App性能测试 如果APP总是出现卡顿或网络延迟的情况 降低了用户的好感 用户可能会抛弃该App 换同类型的其他应用 如果APP的性能较好 用户体验高 使用起来丝滑顺畅 那该应用的用户粘性也必然会提高 那我们该如何做App性能测试
  • STM32用一个定时器执行多任务写法

    文章目录 main c include stm32f4xx h uint32 t Power check times 电量检测周期 uint32 t RFID Init Check times RFID检测周期 int main Timer
  • Python自动化测试之线上流量回放:分析、存储与本地化支持!

    在自动化测试中 线上流量回放是一项关键技术 它可以模拟真实用户请求并重现线上场景 验证系统的性能和稳定性 本文将介绍Python自动化测试中的线上流量回放技术 并提供实战代码 帮助你了解日志分割解析 存储至本地MySQL数据库 以及本地化存
  • 什么是接口与API接口!

    今天有个朋友问我什么接口 你们平时都说在写接口 写的是什么鬼啊 我一开始就想 咦小陈同学怎么突然了解编程接口了 不过听到他后一个提问我知道原来他想的是API接口 不过被我主观意识习惯想成了编程定义上的接口 所以就突发其想 想写篇东西说明一下
  • Python接口自动化测试 —— Requests库学习

    安装 pip install requests 例子 import requests r requests get http www baidu com print r status code print type r print r co
  • 3小时快速入门自动化测试 —— Selenium测试工具

    自动化测试 自动化测试简单来说就是利用自动化测试工具和自动化测试脚本来完成指定的测试任务 测试启动过程无需人工参与 但自动化测试之前的准备工作需要人工手动配置好 它是一种将重复性 繁琐的测试任务交给计算机自动执行的方法 能够显著提高测试效率
  • 现在的00后,真是卷死了呀,辞职信已经写好了·····

    都说00后躺平了 但是有一说一 该卷的还是卷 这不 三月份春招我们公司来了个00后 工作没两年 跳槽到我们公司起薪23K 都快接近我了 后来才知道人家是个卷王 从早干到晚就差搬张床到工位睡觉了 最近和他聊了一次天 原来这位小老弟家里条件不太
  • 深入理解软件测试中的Web请求流程!

    在软件开发的过程中 软件测试是不可或缺的一环 它有助于确保软件系统的稳定性 可靠性和安全性 而在众多测试中 Web请求流程的测试显得尤为重要 因为几乎所有的现代应用都离不开网络交互 接下来我们将深入探讨软件测试中完整的Web请求流程 帮助大
  • 组件升级回顾

    记录组件升级相关事宜 文章目录 前言 一 pandas是什么 二 使用步骤 1 引入库 2 读入数据 总结 前言 c 组件升级 一 背景 drogenCloud上编译代码 需要升级第三方开源库组件 一开始啥也不懂 不知怎么下手
  • 集成测试、单元测试、系统测试之间的关系和区别

    前言 为了使软件正常工作 所有单元都应集成在一起并正常运行 集成测试就像是要求不同工种的工人修建一个房子 希望他们都团结协作 如何判断他们在一起是否可以按照计划完成建设呢 唯一了解的方法是通过将它们全部拉在一起并测试它们如何相互作用来执行
  • 如何搭建自动化测试框架?8年测试老司机浅谈一下!

    公司使用python selenium pytest来做UI自动化测试 我经历了从0开始搭建自动化工程 开发测试报告web服务 编写测试用例 经过了一段时间的磨合 感觉已经比较顺手了 这里梳理下我采用的自动化工程目录组织结构 整体目录结构及
  • Jmeter 性能 —— 搭建skywalking监控平台!

    1 环境搭建 注意核对系统时间是否正确 Datentpdate pool ntp org 在任意目录新建一个docker compose的目录 cd homemkdir docker compose 在docker compose的目录下
  • 【计算机网络概述】第一章:概论 1.1什么是Internet

    学习目标 什么是网络 什么是计算机网络 什么是互联网 前言 温馨提示 该文章是小编学习计算机网络的笔记 参考中科大的郑老师hh 这一章是非常重要的 是为之后的学习进行打基础 我们需要努力学习这一章的内容 跨过这座山 他们就会听见你的故事 一
  • 自动化测试:PO模式详解!

    PO Page Object 模式是一种在自动化测试中常用的设计模式 将页面的每个元素封装成一个对象 通过操作对象来进行页面的交互 概括来说就是 每个页面都有对应的PO类 PO类中包含了页面的元素定位和操作方法 测试脚本只需要调用PO类中的
  • C++异常处理(try catch throw)

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 pandas是什么 二 使用步骤 1 引入库 2 读入数据 总结 前言 牛客做到一个题目 是c 异常处理的 做的时候感觉很陌生 这边学习一下 一 题目
  • 微信小程序UI自动化测试实践:Minium+PageObject

    小程序架构上分为渲染层和逻辑层 尽管各平台的运行环境十分相似 但是还是有些许的区别 如下图 比如说JavaScript 语法和 API 支持不一致 WXSS 渲染表现也有不同 所以不论是手工测试 还是UI自动化测试 都必须要在 iOS 和
  • 新手上路:盘点「性能测试」必须掌握的技术点

    前段时间 有一些小伙伴提出希望我们推送点性能测试的技术干货 所以 小编今天通过上网查资料 结合项目实操过程中的一些问题 总结了一些关于性能测试的内容 希望是大家想要了解的内容哈 1 性能测试的目的 首先 先来明确一个问题 我们为什么要给产品
  • Postman高级应用——变量、流程控制、调试、公共函数、外部数据文件

    Postman 提供了四种类型的变量 环境变量 Environment Variable 不同的环境 使用不同的环境变量 例如 测试过程中经常会用到 测试环境 外网环境等 全局变量 Global Variable 所有的接口运环境中变量值都