欢迎来真孝善网,为您提供真孝善正能量书籍故事!

全面攻略:掌握Postman接口自动化测试技巧

时间:11-22 名人轶事 提交错误

很多朋友对于全面攻略:掌握Postman接口自动化测试技巧和不太懂,今天就由小编来为大家分享,希望可以帮助到大家,下面一起来看看吧!

Window 7(64 位)Postman(Chrome 应用程序v5.5.3)不同版本的页面UI以及部分功能的位置会略有不同,但影响并不大。

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

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

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

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

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

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

1 接口结果判断

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

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

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

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

1.1 功能区

在一篇文章中完成Postman接口自动化测试。 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判断请求状态

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

Response body: Contains string//判断返回内容中是否存在“关键字”。 (测试重点可以修改,不再强调)

test["Body匹配字符串"]=responseBody.has("这里可以改为你要判断的关键字内容");

//如上所述:

//判断结果中是否存在access_token关键字

测试["有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);

测试["您的测试名称"]=jsonData.value===100;

Response time is less than 200ms//判断请求时长是否小于200ms,具体时长根据情况定制

test["响应时间小于200ms"]=responseTime 200;

上面的介绍基本上已经足够完成单个接口的测试了,但是我们知道,如果没有批量和定时任务,那么这些就毫无意义了,所以继续……

2 集合(批量)测试

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

一篇文章完成Postman接口自动化测试。通过以上步骤,我们得到了一组待测试的接口。为了简化情况,这里各个接口的成功或失败条件是通过代码是否为200来判断的:

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

2.1 批量执行

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

一篇文章完成Postman接口自动化测试。点击运行后,会打开一个新页面:

一篇文章完成Postman接口自动化测试。环境:用于切换界面运行的环境。我们暂时忽略它。我们稍后再谈。迭代次数:用于设置接口需要运行的总次数。延迟: 设置每次运行该接口的时间间隔,单位为毫秒。数据文件: 上传测试数据文件(下面单独讨论)

2.2 变化的参数数据

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

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

Postman接口自动化测试一文

使用变量

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

一篇文章解释了Postman接口自动化测试中引用变量的语法:{{变量名}}。如图所示,我们将账户和密码字段的参数值设置为变量: {xunaa}, {{password}} 。当然,修改后是不能直接点击运行(发送)的,因为这两个变量还没有被赋值,但是我们可以在Pre-request Script面板中进行赋值操作:

Pre-request Script

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

//设置全局变量

postman.setGlobalVariable("用户名", "test1");

postman.setGlobalVariable("密码", "123456");

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

测试数据集

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

用户名、密码

测试1,123456

测试2,222222

测试3,123456

测试4,444444

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

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

[

{

"用户名": "test1",

"密码":"123456"

},

{

"用户名": "test2",

"密码":"222222"

},

{

"用户名": "test3",

"密码":"123456"

},

{

"用户名": "test4",

"密码":"444444"

}

]

2.3 定期任务

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

一文中的Postman接口自动化测试

3 请求依赖问题

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

保证接口调用顺序,将接口A返回的数据传递给后续接口B、C、D

3.1 接口执行顺序

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

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

一篇文章中的Postman接口自动化测试这里的接口名称可能有点误导,所以再次强调:在目录中从上到下按顺序执行(与字典排序无关)

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

3.1.2 自定义执行顺序

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

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

以下是一篇文章完成Postman接口自动化测试时需要注意的几点:

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

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

3、指定的跳转接口必须属于同一集合。

4、无论在Tests脚本中的哪个位置调用setNextRequest()函数,它只会在当前脚本的末尾真正执行。例如,我们将图中的第二行与第一行互换后,运行跳转函数后仍然会执行第二行代码。

因此,使用setNextRequest()函数,我们可以根据条件跳过不必要的接口,或者创建我们自己的逻辑测试。

3.2 数据传递

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

3.2.1 全局变量

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

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

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

一篇文章完成Postman接口自动化测试。进入相应界面后可以直接管理:

Postman接口自动化测试一文

3.2.2 多环境区分与切换

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

参数的创建

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

为了在一篇文章中完成Postman接口的自动化测试,我在每个环境中创建了一个host参数,例如:

一篇文章完成Postman接口的自动化测试。当然我们的环境参数也可以通过脚本来设置。其功能是:

//注意这个参数只是添加到你当前选择环境的“参数集”中

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

使用与切换

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

Postman接口自动化测试一文

3.3 解决依赖问题

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

假设场景

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

思路

1. 确保Request1 在Request3 之前运行

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

3、Request3请求时引用access_token的值

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

Postman 中的操作

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

2、Request1中Tests的代码情况:

if(responseCode.code===200 responseBody.has("access_token")){

//如果code为200,且返回数据中存在access_token关键字,则认为登录成功。

测试["登录"]=true;

//将返回内容转换为json格式,获取access_token内容,添加到环境变量中

var jsonData=JSON.parse(responseBody);

//access_token的取值方式取决于具体的json数据结构。

postman.setEnvironmentVariable("token",jsonData.result.access_token);

//跳转到Request3接口

postman.setNextRequest("Request3")

}别的{

测试["登录"]=false;

//如果登录失败,可以选择失败后跳转到对应的处理界面进行测试。

//postman.setNextRequest("其他请求")

}

3、在接口Request3中使用变量token :

一篇文章完成Postman接口自动化测试。这里我把token放到了头部信息中。具体使用方法取决于接口参数规则。

运行并查看结果

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

原文链接:

https://blog.csdn.net/cai_iac/article/details/81030619

用户评论

关于道别

终于可以告别手动测试了!

    有10位网友表示赞同!

敬情

想快速入门接口自动化测试?这篇文章刚好合适。

    有13位网友表示赞同!

坏小子不坏

Postman真是一件宝,学习它能提升测试效率。

    有15位网友表示赞同!

青衫故人

期待详细的教程,方便我跟着做。

    有8位网友表示赞同!

执笔画眉

看标题就感觉很实用!赶紧收藏起来。

    有20位网友表示赞同!

追忆思域。

接口自动化测试一直是我的学习目标,这篇文章让我更有动力了。

    有20位网友表示赞同!

秘密

希望文章能涵盖各种常用的测试场景。

    有13位网友表示赞同!

爱到伤肺i

终于有了时间学习Postman了,刚好可以看看这本书的内容!

    有13位网友表示赞同!

陌上花

自动化测试确实比手动测试省时省力啊。

    有20位网友表示赞同!

堕落爱人!

这篇文章正好解决我最近的难题,太棒了!

    有15位网友表示赞同!

拥抱

接口自动化测试很重要,尤其是现在项目迭代快。

    有20位网友表示赞同!

旧爱剩女

学习一个新的技术总是需要时间和耐心,这篇文希望能帮到像我一样的菜鸟。

    有9位网友表示赞同!

大王派我来巡山!

看了标题就觉得这个文章值得一看的。

    有13位网友表示赞同!

盲从于你

我也想试试Postman,看看它能带给我什么改变。

    有9位网友表示赞同!

?娘子汉

希望文章能够简单易懂,哪怕是完全不懂编程的人也能看明白。

    有16位网友表示赞同!

肆忌

自动化测试是未来软件开发趋势,学习起来吧!

    有13位网友表示赞同!

呆檬

期待看到详细的案例讲解,更快速上手Postman。

    有16位网友表示赞同!

oО清风挽发oО

以前也试着学习过接口自动化,但没有系统地学习过,看来这篇文章是个很好的资源。

    有15位网友表示赞同!

念初

学习完Postman之后,可以做一些更加高效的测试了。

    有10位网友表示赞同!

疯人疯语疯人愿

分享一下学习Postman的心得和技巧也很棒!

    有14位网友表示赞同!

【全面攻略:掌握Postman接口自动化测试技巧】相关文章:

1.蛤蟆讨媳妇【哈尼族民间故事】

2.米颠拜石

3.王羲之临池学书

4.清代敢于创新的“浓墨宰相”——刘墉

5.“巧取豪夺”的由来--米芾逸事

6.荒唐洁癖 惜砚如身(米芾逸事)

7.拜石为兄--米芾逸事

8.郑板桥轶事十则

9.王献之被公主抢亲后的悲惨人生

10.史上真实张三丰:在棺材中竟神奇复活