高效实现 Postman 接口自动化测试全攻略

更新:11-13 现代故事 我要投稿 纠错 投诉

大家好,如果您还对高效实现 Postman 接口自动化测试全攻略不太了解,没有关系,今天就由本站为大家分享高效实现 Postman 接口自动化测试全攻略的知识,包括的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

Windows 7(64 位)

邮递员(Chrome 应用程序v5.5.3)

附:不同版本的页面UI和部分功能位置会略有不同,但影响并不大。

首先,我们想一下。如果我们想要达到自动化接口测试的效果,那么在基本的模拟请求上还需要做什么呢?

我大致总结为3个问题(欢迎大家在评论区留下更多补充建议):

1、如何判断接口请求是否成功?

2、如何对接口进行批量和定期测试?

3、如何处理接口相关问题(例如产品订购接口必须先登录)?

因此,下面主要分为3个部分来介绍如何解决这3个问题。

1 接口结果判断

首先,既然是自动化测试,我们肯定需要使用Postman或者代码这个工具来帮助我们直接判断结果是否符合预期。所以说到接口测试,一般有两种思路:

判断请求返回的code是否符合预期

判断请求返回的内容是否包含期望的内容(关键词)

接下来我们看看如何使用Postman来解决上述问题:

1.1 功能区

image.png Postman中的相关功能都处于非常显眼的地方。 Tests功能的使用需要我们有一定的编程语言基础。当前支持的脚本语言是JavaScript。但更好的是,我们不再需要考虑上下文问题和运行环境问题,这意味着我们只需要在这里完成对结果进行逻辑判断的代码块即可。

Postman 还在Tests 面板右侧的SNIPPETS 功能区中为我们提供了一些常用的代码模板,因此如果您对JavaScript 不太了解,这不是一个大问题。下面详细介绍代码的编写。

1.2 脚本相关

首先看上图中的代码部分。我们可以找到三个变量:responseCode、responseBody和tests(可以直接使用):

responseCode:包含请求返回的状态信息(如code)。

responseBody:接口请求返回的数据内容(类型为字符串)。

test:以键值对的形式,用来表示我们的测试结果是否成功,最终显示在Test Results中。

key:(例如:代码200)我们可以用它作为结果的描述。

value:其值为布尔值,true表示测试通过,false表示测试失败。

所以上面的代码应该不难理解,有了返回结果的数据以及表示结果成功与否的方式,我们“接口结果判断”的问题就基本解决了。

另外还有几个比较常用的:

responseTime:请求需要多长时间

邮递员:你可以做更多的事情,比如

获取返回数据的头信息:

postman.getResponseHeader("")

设置全局变量:

postman.setGlobalVariable("variable_key", "variable_value");

更多功能请查看官方文档。

1.3 代码模板

Postman在SNIPPETS功能区提供的代码模板已经可以解决大部分情况。我们先选几个与结果判断相关的来解释一下:

Status code : Code is 200//根据返回的Code判断请求状态tests["Status code is 200"]=responseCode.code===200;Response body: Contains string//判断返回内容中是否存在“关键字”。 (tests的key可以修改,不再强调)tests["Body matches string"]=responseBody.has("这里可以改为你要判断的关键字内容"); //如上所述: //判断结果中是否存在access_token。关键字测试["has access_token"]=responseBody.has("access_token");Response body: is equal to string//判断返回内容是否与预期完全一致。 test["Body 正确"]=responseBody==="您可以将其更改为您期望的内容";Response body: JSON value check//如上所述,responseBody是字符串类型,支持转换为Json格式var jsonData=JSON. parse(responseBody);tests["您的测试名称"]=jsonData.value===100;Response time is less than 200ms//判断请求时间是否小于200ms,具体时间可以根据情况自定义tests["响应时间小于200ms"]=responseTime 200;上面的介绍基本上已经足够完成单个接口的测试了,但是我们知道,如果没有批量和定时任务,那么这些就毫无意义了,所以继续……

2 集合(批量)测试

如果我们要对接口进行批量测试和管理,需要将所有待测试的接口保存在同一个集合(Collections)中。您可以将其视为将它们保存在同一文件夹中。我们先看一下Postman中的步骤:

image.png 通过以上步骤,我们得到了待测试的接口集合。为了简化情况,这里各个接口的成功条件是通过代码是否为200来判断的:

测试["状态代码为200"]=responseCode.code===200;

2.1 批量执行

以上准备好后,我们就可以开始批量运行接口进行测试了:

单击“运行image.png”后,将打开一个新页面:

image.pngEnvironment:用于切换界面运行的环境。我们这里先忽略,稍后再讲。

迭代次数:用于设置接口需要运行的总次数。

Delay: 设置每次运行该接口的时间间隔,单位为毫秒。

Data File: 上传测试数据文件(下面单独讨论)

2.2 变化的参数数据

我们已经了解了如何让多个接口循环运行多次,但是现在有一个问题。按照目前的步骤,每次运行时界面的参数都是一样的,所以即使我们运行100次或者1000次也没有多大意义。

我们先看一下我们写的一个登录功能接口:

image.png

使用变量

当前的登录账号和密码参数是硬编码的,即无论我们执行多少次,始终使用这个账号进行测试。那么如果我想测试账号和密码参数使用其他值时是否有异常该怎么办呢? (如果想每次都手动改,可以跳过这部分/手动搞笑)这里简单讲一下如何在Postman中使用“变量”,如下图:

image.png 引用变量的语法是:{{变量名称}}。如图所示,我们将账号和密码字段的参数值设置为变量:{xunaa},{{password}}。当然,修改后是不能直接点击运行(发送)的,因为这两个变量还没有被赋值,但是我们可以在Pre-request Script面板中进行赋值操作:

Pre-request Script

预请求脚本与测试类似。区别在于Pre-request Script中的脚本是在请求执行之前执行的,而Tests中的脚本是在请求完成之后执行的。因此,我们可以使用Pre-request Script功能区中的脚本为上述两个变量赋值,例如:

//设置全局变量postman.setGlobalVariable("username", "test1"); postman.setGlobalVariable("密码", "123456");但是,使用Pre-request Script 进行赋值操作仍然不能解决我们的问题,因为按照这种写法,无论运行多少次,仍然使用固定(硬编码)的数据进行测试。当然,既然是脚本语言,就会有更灵活的用法,这里就不讨论了。

测试数据集

接下来,我们来谈谈数据文件。该选项在运行集合之前用于上传测试数据(文件)以给相应变量赋值。我们先以CSV格式的测试数据为例:

用户名,密码test1,123456 test2,222222 test3,123456 test4,444444 数据格式类似于表格。第一行代表对应的变量名。下面4行代表4组账户密码数据(其中2组是正确的数据)。我们将上面的示例数据保存一个后缀为.csv的文件后,再次开始测试看看效果。我们选择运行次数为4(对应4组测试数据)。选择对应的CSV文件运行后,就可以看到我们的结果了。正是我们所期望的。运行接口Request的结果是两次成功两次失败,即每次运行都分配了不同账号密码的测试数据(可以在最新的桌面客户端版本中看到每次的具体请求状态,这里是我不会的)不再赘述)。

如果使用Json文件,格式如下:

[ { "用户名": "test1", "密码": "123456" }, { "用户名": "test2", "密码": "222222" }, { "用户名": "test3", "密码": "123456" }, { "username": "test4", "password": "444444" } ]

2.3 定期任务

Postman提供了一个Monitors功能,可以让我们提交一个测试任务,并按照设定的定时器进行运行,如每小时测试一次,具体操作如下:

image.png

3 请求依赖问题

讲完了接口结果判断和采集批量测试,我们再看一下更复杂的情况,即依赖请求问题。例如,我们的购物订单界面要求您必须登录才能访问。然而,大多数依赖性问题本质上是接口之间的数据传输问题。比如调用登录接口后,返回一个标识,假设是token。那么我们在请求订单接口的时候,只需要在请求中携带token参数就可以了。那么,问题就变成了:

保证接口调用的顺序

将接口A返回的数据传递给后续接口B、C、D

3.1 接口执行顺序

首先说明一下,接下来提到的接口默认都属于同一个集合(Collections)。

我们以上面创建的接口集合为例。如果你留意我们批量测试的结果,你会发现接口的执行顺序其实就是这里目录中的顺序(从上到下),即:Request1 - Request2-Request3。

image.png的接口名称可能有点误导,再次强调:在目录中从上到下按顺序执行(与字典排序无关)

那么通过这个默认的执行顺序,我们就可以把需要执行的接口放在前面,比如把“登录接口”放在前面。

3.1.2 自定义执行顺序

当然,如果只有默认的执行顺序,通常无法满足我们复杂的业务需求,所以Postman为我们提供了一个函数:postman.setNextRequest("填写你要跳转的接口名称") ,它支持我们跳转到指定的接口继续执行,例如:

当我们成功运行Request1接口后,就不需要运行Request2,直接跳转到Request3了。然后我就可以执行Request1接口的Tests功能区的跳转代码了,如:

image.png 这里有几点需要注意:

postman.setNextRequest() 仅在运行集合测试时才生效,这意味着当我们单独运行(发送)接口Request1时,该功能不起作用。

2、当我们成功运行Request1到Request3的采集测试时,如果Request3后面还有接口,则后面的接口会继续按照默认顺序执行,即图中的接口Request4仍然会被执行。

3、指定的跳转接口必须属于同一集合。无论在Tests 脚本中的哪个位置调用setNextRequest() 函数,它都只会在当前脚本的末尾实际执行。例如,我们将图中的第二行与第一行互换后,运行跳转函数后仍然会执行第二行代码。因此,使用setNextRequest()函数,我们可以根据条件跳过不必要的接口,或者创建我们自己的逻辑测试。

3.2 数据传递

在讲数据传输之前,我们先讲一下Postman中全局变量的使用和环境切换。

3.2.1 全局变量

上面讲Pre-request Script的时候其实已经简单提到了全局变量的概念,也就是说我们可以通过脚本代码来设置全局变量。运行上面的脚本我们可以看到效果:

运行后我们可以看到,username和password这两个变量已经被成功保存,所以我们可以通过变量引用语法在任何界面中使用它们,例如:{xunaa}。

另外,Postman不仅支持通过代码设置全局变量的方式,还支持可视化操作:

进入相应界面后,可以直接管理image.png:

image.png

3.2.2 多环境区分与切换

通常我们的界面分为测试版本和在线版本(或更多),它们之间的区别可能只是ULR,所以全局变量不适合解决这个问题。

参数的创建

您可能已经注意到,在上图中我为不同的环境创建了多个参数“集”。再看一下:

image.png 我在每个环境中创建了一个主机参数,例如:

image.png 当然我们的环境参数也可以通过脚本来设置。其功能是:

//注意,这个参数只是添加到你当前选择的环境的“参数集”中postman.setEnvironmentVariable("variable_key", "variable_value");

使用与切换

环境“参数集”中的参数使用方式与全局变量一样,图中的{{host}},不同环境的切换如下图所示:

image.png

3.3 解决依赖问题

掌握了上面的准备知识后,我们开始看看如何使用Postman来解决有依赖的接口测试。

假设场景

我们的接口Request1是登录接口。登录成功会返回一个access_token字段作为标识(已实现)。那么假设接口Request3是下单接口,则需要携带登录返回的access_token才能正常访问。

思路

1. 确保Request1 在Request3 之前运行

2. 将Request1返回的access_token的值添加到环境变量“参数集”中。

request3在请求时引用access_token的值,并将返回值存储在“全局变量”或“环境变量”中,具体取决于具体的业务情况。本例中access_token的值与环境有关,所以这里我们选择使用设置的环境变量进行存储。

Postman 中的操作

1. Request1 接口已保证在我们的目录中首先执行。

Code status of Tests in Request1: if(responseCode.code===200 responseBody.has("access_token")){ //如果code为200且返回数据中存在access_token关键字,则认为登录成功tests[ "登录"]=true; //将返回内容转换为json格式,获取access_token内容,添加到环境变量中var jsonData=JSON.parse(responseBody); //access_token的值取决于具体的json数据取决于结构体postman.setEnvironmentVariable("token",jsonData.result.access_token); //跳转到Request3接口postman.setNextRequest("Request3")}else{tests["login"]=false; //登录失败,可以选择失败后跳转到对应的处理界面进行测试//postman.setNextRequest("Other Request")} 3.在Request3接口中使用变量token:

image.png 这里我把`token`放在了头信息中。具体使用方式取决于接口参数规则。

运行并查看结果

运行采集测试,可以看到我们的结果符合我们的预期。 Request1和Request3测试通过,Request2被跳过,Request4仍然执行。完毕…

您好,如果您喜欢这篇文章,记得点“赞”哦!大家的支持很重要~() PS:如有任何疑问,请联系我们~v ceshiren001

OK,本文到此结束,希望对大家有所帮助。

用户评论

无关风月

终于有个简单方法学习Postman接口自动化测试了!

    有18位网友表示赞同!

自繩自縛

想要快速掌握接口测试,这篇文章正好适合我。

    有12位网友表示赞同!

枫无痕

我一直想找个教程来理解 Postman 的自动化功能,感谢分享!

    有10位网友表示赞同!

眼角有泪°

看起来这个方法很方便,省去很多重复操作的时间吧?

    有5位网友表示赞同!

↘▂_倥絔

一篇搞定? 我可是不太相信的...

    有11位网友表示赞同!

发呆

希望能详细介绍一下具体步骤,这样才更方便学习呀!

    有17位网友表示赞同!

残花为谁悲丶

对于接口测试小白来说,这篇文章是不是比较适合入门?

    有7位网友表示赞同!

采姑娘的小蘑菇

有了自动化测试,开发效率能大大提高吧?

    有15位网友表示赞同!

雁過藍天

我以前都是手动测试接口,这个方法太实用了!

    有13位网友表示赞同!

∞◆暯小萱◆

Postman 也许不是唯一的选择,这篇文章会介绍其他工具吗?

    有14位网友表示赞同!

肆忌

文章里提到了哪些常用的自动化测试用例?

    有12位网友表示赞同!

蔚蓝的天空〃没有我的翅膀

自动化的测试报告能更加清晰地展示问题所在。

    有6位网友表示赞同!

浅笑√倾城

希望看到一些案例,这样更能理解这种方法的实际应用。

    有16位网友表示赞同!

淡抹丶悲伤

Postman 的学习资源越来越多了,很高兴看到这样的文章分享。

    有5位网友表示赞同!

野兽之美

接口自动化测试确实很有前景,这篇文章让我对它更有兴趣了!

    有16位网友表示赞同!

゛指尖的阳光丶

如果结合机器学习等技术,自动化测试还能更上一层楼吧?

    有18位网友表示赞同!

我怕疼别碰我伤口

想了解一下自动化测试的成本效益分析。

    有5位网友表示赞同!

孤自凉丶

对于不同规模的项目来说,自动化测试的建议如何?

    有7位网友表示赞同!

爱到伤肺i

期待更多关于 API 测试领域的优秀内容!

    有6位网友表示赞同!

【高效实现 Postman 接口自动化测试全攻略】相关文章:

1.动物故事精选:寓教于乐的儿童故事宝库

2.《寓教于乐:精选动物故事助力儿童成长》

3.探索动物旅行的奇幻冒险:专为儿童打造的童话故事

4.《趣味动物刷牙小故事》

5.探索坚韧之旅:小蜗牛的勇敢冒险

6.传统风味烤小猪,美食探索之旅

7.探索奇幻故事:大熊的精彩篇章

8.狮子与猫咪的奇妙邂逅:一场跨界的友谊故事

9.揭秘情感的力量:如何影响我们的生活与决策

10.跨越两岸:探索彼此的独特世界

上一篇:轻松解决《心动小镇》安装难题:DLL文件丢失不再困扰 下一篇:《茶啊二中》第五季精彩回顾:第1集不容错过