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

全网最全,Postman接口自动化测试实战整理,避开所有弯路...

目录:导读

    • 前言
    • 一、Python编程入门到精通
    • 二、接口自动化项目实战
    • 三、Web自动化项目实战
    • 四、App自动化项目实战
    • 五、一线大厂简历
    • 六、测试开发DevOps体系
    • 七、常用自动化测试工具
    • 八、JMeter性能测试
    • 九、总结(尾部小惊喜)


前言

背景描述

项目要使用postman进行接口测试。

接口所需参数有:
appid:应用标识;
sign:请求签名,需要使用HMACSHA1加密算法计算,签名串是:{appid} u r l {url} url{stamp};
stamp:这个是时间戳;
option:业务参数;

问题是怎么在Postman发起请求时根据参数动态构建签名(sign)?

postman的脚本库中CryptoJS是支持各种算法的加密,包括HMACSHA1,签名算法有了。

难点是获取url中的path参数,当发起一个请求时开始可以固定一个path值的,自动化测试需要执行时获取path值,怎么获取呢?

1、创建一个GET请求

postman基础用法就不介绍了,先创建一个GET请求,URL中有配置各种动态参数

{{变量名}} :postman引用环境变量的语法;
{{$guid}}:postman预定义的环境变量用于获取一个GUID值;

在这里插入图片描述

2、在pre-request scripts构建签名

pre-request scripts 是个javascript执行环境,在请求发送之前执行;把他当做js用就行,不过有的js库是不支持的。

接下来就是动态获取签名了

1)appid环境变量中配置的固定值

2)stamp时间戳获取

//获取unix时间
getUnixTime:function(){return Math.round(new Date().getTime()/1000);
}

3)url值可以通过request.url获取然后解析出其中的path

//获取url的path部分
getUrlRelativePath:function(url){var arrUrl = url.split("//");var start = arrUrl[1].indexOf("/");var end=arrUrl[1].indexOf("?");var relUrl = arrUrl[1].substring(start,end);//stop省略,截取从start开始到结尾的所有字符console.log(relUrl);return relUrl;
}

4)构造签名串,使用秘钥加密即可

postman提供的加密算法库并不一定所有都支持,有时候需要向后台去换取签名;

var host=pm.environment.get("host");
var text=encodeURIComponent(plain);
pm.sendRequest(host+"/FaceIn/ToHmacsha1?plain="+text+"&secret="+sercret, function (err, response) {var json=response.json();//签名含有+等特殊字符需要url编码pm.environment.set("sign",encodeURIComponent(json.result));
});

签名串最好进行URL编码。

遗留问题:向后台换取签名的时候起初是返回字符串responsejson()解析不了的!

5)使用eval将定义的变量postmanUtil注入全局变量中然后调用

eval(environment.postmanUtil);
postmanUtil.setLsdzSign();

结果如图:

在这里插入图片描述

代码如下:

var postmanUtil={//获取unix时间getUnixTime:function(){return Math.round(new Date().getTime()/1000);},//获取url的path部分getUrlRelativePath:function(url){var arrUrl = url.split("//");var start = arrUrl[1].indexOf("/");var end=arrUrl[1].indexOf("?");var relUrl = arrUrl[1].substring(start,end);//stop省略,截取从start开始到结尾的所有字符console.log(relUrl);return relUrl;},//签名setLsdzSign:function(){var appid=pm.environment.get("appid");var sercret=pm.environment.get("appsercret");//时间戳var time=postmanUtil.getUnixTime();pm.environment.set("stamp", time);//地址 获取当前地址的path部分var path= postmanUtil.getUrlRelativePath(request.url);console.log(path);var url=path;var plain=appid+"$"+url.toLowerCase()+"$"+time;var hmac = CryptoJS.HmacSHA1(plain, sercret).toString(CryptoJS.enc.Base64);//获取签名,CryptoJS.HmacSHA1 无法满足签名算法只能从后台var host=pm.environment.get("host");var text=encodeURIComponent(plain);pm.sendRequest(host+"/FaceIn/ToHmacsha1?plain="+text+"&secret="+sercret, function (err, response) {var json=response.json();//签名含有+等特殊字符需要url编码pm.environment.set("sign",encodeURIComponent(json.result));});}
}
eval(environment.postmanUtil);
postmanUtil.setLsdzSign();

3、脚本写在环境变量中

在Pre-request Script写上面代码,要是单个接口还是可以的,即使很多接口只要Copy一份即可。

万一脚本需要改麻烦就来了,你需要去每个请求的 Pre-request Script窗口改,怎么解决呢?

可以解决,将postmanUtil定在ENVIRONMENT中就可以了。

做法如下:

在这里插入图片描述

其实就是将postmanUtil放入环境变量了,其它没有变,只要维护环境变量里的值就OK了,不用一个个去改。

再看pre-request script代码,这样就简单多了:

在这里插入图片描述

4、postman console的用法

不知道是否成功获取了环境变量,又或者想查看某个变量的值,postman也提供了很方便的控制台查看,菜单View下Show Postman Console可以打开如下控制台:

在这里插入图片描述

图中是console.log(sercret) 和 sendRequest()的结果

5、Collection Runner 自动化API测试

1)创建接口的测试用例

对于返回html的结果,只要测试body中包含某个值就算通过

在这里插入图片描述

对于返回Json结果,只要Code为0即为通过

在这里插入图片描述

窗口右侧有常用的脚本快捷操作,选中就可以生成,很方便

2)选择并运行自动化接口测试

点击主页左上角Runner进入,选择之前构建好的接口,并选择好环境,点击Run xxx 接口运行脚本测试

在这里插入图片描述

3)测试结果

可以看到结果2接口都成功返回预定的结果

在这里插入图片描述

下面是我整理的2023年最全的软件测试工程师学习知识架构体系图

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

无论现在的起点有多么低微,只要你有追求,愿意努力,相信并坚持自己的能力,你一定能创造出属于自己的辉煌,让梦想的火焰燃烧不灭!奋斗吧,勇敢的心!

奋斗是生命的底色,努力是成功的密码。不畏艰辛,放眼未来,勇往直前,追求卓越。用行动书写辉煌,用奋斗点亮人生,成就自己,创造无限可能!

只要心怀梦想,努力不懈,每一步都是向前的动力。成功需要时间,奋斗需要坚持,但只要你相信自己,勇往直前,未来的辉煌将属于你!

相关文章:

全网最全,Postman接口自动化测试实战整理,避开所有弯路...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 背景描述 项目要…...

蓝桥杯双周赛算法心得——三带一(暴力枚举)

大家好,我是晴天学长,枚举思想,需要的小伙伴可以关注支持一下哦!后续会继续更新的。 1) .三带一 2) .算法思路 1.通过Scanner读取输入的整数n,表示接下来有n个字符串需要处理。 2.使用循环遍历每个字符串:…...

【C++】适配器模式 - - stack/queue/deque

目录 一、适配器模式 1.1迭代器模式 1.2适配器模式 二、stack 2.1stack 的介绍和使用 2.2stack的模拟实现 三、queue 3.1queue的介绍和使用 3.2queue的模拟实现 四、deque(不满足先进先出,和队列无关) 4.1deque的原理介绍 4.2dequ…...

EKP接口开发Webservice服务和Restservice服务以及定时任务Demo

继承com.landray.kmss.sys.webservice2.interfaces.ISysWebservice,同时在接口上使用WebService注解将其标识为WebService接口 package com.landray.kmss.third.notify.webservice;import com.alibaba.fastjson.JSONObject; import com.landray.kmss.sys.webservic…...

如何确定IP地址的具体位置?

IP地址通过几种方法帮助确定具体位置,尽管它们的准确性和精度因不同的情况而异。以下是几种确定具体位置的主要方法: 地理IP数据库:这是最常用的方法之一,它使用IP地址和地理位置数据的映射来确定用户的位置。这些数据库存储了大量…...

软考-网络安全体系与网络安全模型

本文为作者学习文章,按作者习惯写成,如有错误或需要追加内容请留言(不喜勿喷) 本文为追加文章,后期慢慢追加 by 2023年10月 网络安全体系相关安全模型 BLP机密性模型 BLP(Biba-格雷泽-麦克拉伦&#x…...

Java身份证OCR识别 - 阿里云API【识别准确率超过99%】

1. 阿里云API市场 https://market.aliyun.com/products/57124001/cmapi00063618.html?spm5176.28261954.J_7341193060.41.60e52f3drduOTh&scm20140722.S_market%40%40API%E5%B8%82%E5%9C%BA%40%40cmapi00063618._.ID_market%40%40API%E5%B8%82%E5%9C%BA%40%40cmapi0006361…...

vue中获取复选框是否被选中的值、如何用JavaScript判断复选框是否被选中

一、方法介绍 第一种方法:通过获取dom元素,getElementById、querySelector、getElementsByName、querySelectorAll(需要遍历,例如:for循环) 第二种是用v-model在input复选框上绑定一个变量,通过…...

Python学习之逻辑中的循环有哪些?

1. for循环 for 循环用于迭代 (遍历)一个序列,例如列表、元组、字符串或字典中的元素。 通常使用 for 循环来遍历可迭代对象中的元素,并对每个元素执行相同的操作。 示例: for item in iterable: # 执行操作2.while循环 -while循环用于在满足某个条件…...

【uniapp微信小程序+springBoot(binarywang)

uniapp前端代码 <template><view><page-head :title"title"></page-head><view class"uni-padding-wrap"><view style"background:#FFF; padding:50rpx 0;"><view class"uni-hello-text uni-cente…...

智能井盖的用处有哪些?好用在什么地方?

智能井盖是一种基于物联网技术的井盖系统&#xff0c;通过集成传感器、通信设备和数据处理功能&#xff0c;实现对井盖的实时监测、远程管理和智能化控制。WITBEE万宾的智能井盖传感器EN100-C2&#xff0c;只要在城市需要的井盖上面安装即可使用&#xff0c;一体式结构&#xf…...

微信小程序数据存储方式有哪些

在微信小程序中&#xff0c;数据存储方式有以下几种&#xff1a; 本地存储 本地存储是一种轻量级的数据存储方式&#xff0c;用于存储小量的数据&#xff0c;例如用户的配置信息、页面的状态等。微信小程序提供了 wx.setStorage() 和 wx.getStorage() 方法&#xff0c;用于将数…...

FTC局部路径规划代码分析

前置知识: costmap_2d::Costmap2DROS costmap; costmap_2d::Costmap2DROS 是一个ROS包中提供的用于处理2D成本地图的类。它是一个高级的接口&#xff0c;通常用于与ROS导航栈中的导航规划器和本地路径跟踪器等模块进行集成。 costmap 是一个指向 Costmap2DROS 对象的指针。通…...

SpringBoot集成Activiti7

SpringBoot集成Activiti7 SpringBoot版本使用2.7.16 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.16</version><relativePath/> <!-- lookup…...

25.1 MySQL SELECT语句

1. SQL概述 1.1 SQL背景知识 1946年, 世界上诞生了第一台电脑, 而今借由这台电脑的发展, 互联网已经成为一个独立的世界. 在过去几十年里, 许多技术和产业在互联网的舞台上兴衰交替. 然而, 有一门技术却从未消失, 甚至日益强大, 那就是SQL.SQL(Structured Query Language&…...

【VSCode】Windows环境下,VSCode 搭建 cmake 编译环境(通过配置文件配置)

除了之前的使用 VSCode 插件来编译工程外&#xff0c;我们也可以使用配置文件来编译cmake工程&#xff0c;主要依赖 launch.json 和 tasks.json 文件。 目录 一、下载编译器 1、下载 Windows GCC 2、选择编译器路径 二、配置 debug 环境 1、配置 lauch.json 文件 2、配置…...

useragent识别访问设备

背景需求 ruoyi框架&#xff0c;前后端分离。现在要在用户访问的时候根据不同的设备跳转到不同的登录页面。 教程 router/index.js 修改src/router/index.js&#xff0c;在这里增加自己的要跳转的页面 permission.js 在白名单中添加自己的登录页面 增加以下识别的代码 le…...

紫光同创FPGA实现UDP协议栈网络视频传输,带录像和抓拍功能,基于YT8511和RTL8211,提供2套PDS工程源码和技术支持

目录 1、前言免责声明 2、相关方案推荐我这里已有的以太网方案紫光同创FPGA精简版UDP方案紫光同创FPGA带ping功能UDP方案紫光同创FPGA精简版UDP视频传输方案 3、设计思路框架OV5640摄像头配置及采集数据缓冲FIFOUDP协议栈详解MAC层发送MAC发送模式MAC层接收ARP发送ARP接收ARP缓…...

【机器学习】逻辑回归

文章目录 逻辑回归定义损失函数正则化 sklearn里面的逻辑回归多项式逻辑回归 逻辑回归 逻辑回归&#xff0c;是一种名为“回归”的线性分类器&#xff0c;其本质是由线性回归变化而来的&#xff0c;一种广泛使用于分类问题中的广义回归算法。 线性回归是机器学习中最简单的的…...

DITA-OT 4.0新特性 - PDF themes,定制PDF样式的新方法

随着DITA-OT 4.0的发布&#xff0c;它提供了一种新的定制PDF样式方法&#xff0c;这种方法就是PDF theme。这篇文章来聊一聊这种定制PDF输出的新方法和实验结果。 在进入PDF theme细节之前&#xff0c;为各位读者梳理一下DITA-OT将DITA和Markdown发布成PDF的几种方法。 - 1 …...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上&#xff0c;你可以使用apt包管理器来安装NFS服务器。打开终端并运行&#xff1a; sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享&#xff0c;例如/shared&#xff1a; sudo mkdir /shared sud…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包&#xff1a;import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序&#xff08;自然排序和定制排序&#xff09;Arrays.binarySearch()通过二分搜索法进行查找&#xff08;前提&#xff1a;数组是…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式&#xff08;Singleton Pattern&#…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行

项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战&#xff0c;克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

Linux 中如何提取压缩文件 ?

Linux 是一种流行的开源操作系统&#xff0c;它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间&#xff0c;使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的&#xff0c;要在 …...

搭建DNS域名解析服务器(正向解析资源文件)

正向解析资源文件 1&#xff09;准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2&#xff09;服务端安装软件&#xff1a;bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...

【Veristand】Veristand环境安装教程-Linux RT / Windows

首先声明&#xff0c;此教程是针对Simulink编译模型并导入Veristand中编写的&#xff0c;同时需要注意的是老用户编译可能用的是Veristand Model Framework&#xff0c;那个是历史版本&#xff0c;且NI不会再维护&#xff0c;新版本编译支持为VeriStand Model Generation Suppo…...

基于江科大stm32屏幕驱动,实现OLED多级菜单(动画效果),结构体链表实现(独创源码)

引言 在嵌入式系统中&#xff0c;用户界面的设计往往直接影响到用户体验。本文将以STM32微控制器和OLED显示屏为例&#xff0c;介绍如何实现一个多级菜单系统。该系统支持用户通过按键导航菜单&#xff0c;执行相应操作&#xff0c;并提供平滑的滚动动画效果。 本文设计了一个…...