很多朋友对于快速掌握Postman接口自动化测试全攻略和不太懂,今天就由小编来为大家分享,希望可以帮助到大家,下面一起来看看吧!
工作环境及版本:
Windows 7(64 位)
邮递员(Chrome 应用程序v5.5.3)
附:不同版本的页面UI和部分功能位置会略有不同,但影响并不大。
首先,我们想一下。如果我们想要达到自动化接口测试的效果,那么在基本的模拟请求上还需要做什么呢?
我大致总结为3个问题(欢迎大家在评论区留下更多补充建议):
如何判断接口请求是否成功?
如何对接口进行批量和定期测试?
如何处理依赖接口问题(例如产品订购的接口必须先登录)?
因此,下面主要分为3个部分来介绍如何解决这3个问题。
1 接口结果判断
首先,既然是自动化测试,我们肯定需要借助Postman或者代码这个工具来帮助我们直接判断结果是否符合预期。所以说到接口测试,一般有两种思路:
判断请求返回的code是否符合预期
判断请求返回的内容是否包含期望的内容(关键词)
接下来我们看看如何使用Postman来解决上述问题:
1.1 色带区
图片1080428 104KB
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功能区提供的代码模板已经可以解决大部分情况。我们先选几个与结果判断相关的来解释一下:
状态码: 代码为200
//根据返回的Code判断请求状态tests["Status code is 200"]=responseCode.code===200;
响应正文: 包含字符串
//判断返回内容中是否存在“关键字”。 (tests的key可以修改,不再强调)tests["Body matches string"]=responseBody.has("这里可以改为你要判断的关键字内容"); //如上所述: //判断结果中是否存在access_token关键字tests["has access_token"]=responseBody.has("access_token");
响应body: 等于字符串
//判断返回的内容是否与期望的完全一致。 test["Body 正确"]=responseBody==="您可以将其更改为您期望的内容";
响应body: JSON 值检查
//如上所述,responseBody是字符串类型,支持转换为Json格式。 var jsonData=JSON.parse(responseBody);tests["您的测试名称"]=jsonData.value===100;
响应时间小于200ms
//判断请求时间是否小于200ms。具体时间可根据情况定制。 test["响应时间小于200ms"]=responseTime 200;
上面的介绍基本上已经足够完成单个接口的测试了,但是我们知道,如果没有批量和定时任务,那么这些就毫无意义了,所以继续……
2 采集(批量)测试
如果我们想要对接口进行批量测试和管理,我们需要将所有待测试的接口保存在同一个集合(Collections)中。您可以将其视为将它们保存在同一文件夹中。我们先看一下Postman中的步骤:
图片1080805 90.4 KB
通过以上步骤,我们得到了一组待测试的接口。为了简化情况,这里各个接口的成功条件是通过代码是否为200来判断的:
测试[“状态代码为200”]=responseCode.code===200;
2.1 批量执行
上述准备好后,我们就可以开始批量运行接口进行测试了:
图片1080648 96.4 KB
点击运行后,会打开一个新页面:
图片1080870 47.6 KB
环境:用于切换界面运行的环境。我们暂时不关心它。我们稍后再谈。
迭代次数:用于设置接口需要运行的总次数。
Delay: 设置每次运行该接口的时间间隔,单位为毫秒。
Data File: 上传测试数据文件(下面单独讨论)
2.2 更改参数数据
我们已经了解了如何让多个接口循环运行多次,但是现在有一个问题。按照目前的步骤,每次运行时界面的参数都是一样的,所以即使我们运行100次、1000次也没有任何意义。不大。
我们先看一下我们写的一个登录功能接口:
图片1080439 85.3 KB
使用变量
当前的登录账号和密码参数是硬编码的,也就是说,无论我们执行多少次,都会用这个账号来测试。那么如果我想测试账号和密码参数使用其他值时是否有异常该怎么办呢? (如果想每次都手动改,可以跳过这部分/手动搞笑)这里简单讲一下如何在Postman中使用“变量”,如下图:
图片1080361 67 KB
引用变量的语法是:{{变量名}}。如图所示,我们将账号和密码字段的参数值设置为变量:{xunaa},{{password}}。当然,修改后是不能直接点击运行(发送)的,因为这两个变量还没有被赋值,但是我们可以在Pre-request Script面板中进行赋值操作:
预请求脚本
Pre-request Script 与Tests 类似,只不过Pre-request Script 中的脚本在请求执行之前执行,而Tests 中的脚本在请求完成后执行。因此,我们可以使用Pre-request Script功能区中的脚本为上述两个变量赋值,例如:
//设置全局变量postman.setGlobalVariable("username","test1");postman.setGlobalVariable("password","123456");
但是,使用Pre-request Script进行赋值操作仍然不能解决我们的问题,因为按照这种写法,无论运行多少次,仍然使用固定(硬编码)的数据进行测试。当然,既然是脚本语言,就会有更灵活的用法,这里就不讨论了。
测试数据集
接下来,我们来谈谈数据文件。该选项在运行集合之前用于上传测试数据(文件)以给相应变量赋值。我们先以CSV格式的测试数据为例:
用户名,密码test1,123456test2,222222test3,123456test4,444444
数据格式类似于表格。第一行代表对应的变量名,后面4行代表4组账户密码数据(其中两组是正确的数据)。我们保存包含上述示例数据的后缀为.csv的文件后,再次开始测试看看效果。我们选择运行次数为4(对应4组测试数据),并选择对应的CSV文件来运行。可以看到我们的结果确实符合我们的预期。运行接口Request的结果是两次成功两次失败,即每次运行都分配了不同账号密码的测试数据(可以在最新的桌面客户端版本中看到每次的具体请求状态,这里是我不会的)不再赘述)。
如果使用Json文件,格式如下:
[ {"用户名":"test1","密码":"123456"},{"用户名":"test2","密码":"222222"},{"用户名":"test3","密码": "123456"}, {"用户名":"test4","密码":"444444"}]
2.3 常规任务
Postman提供了一个Monitors功能,可以让我们提交一个测试任务,并按照设定的定时器运行它,比如每小时测试一次。具体操作如下:
图片1080799 115 KB
3 请求依赖问题
说完接口结果判断和集合批量测试,我们再看一下更复杂的情况,即依赖请求问题。例如,我们的购物订单界面要求您必须登录才能访问。然而,大多数依赖性问题本质上是接口之间的数据传输问题。比如调用登录接口后,返回一个标识,假设是token。那么我们在请求订单接口的时候,只需要在请求中携带token参数就可以了。那么,问题就变成了:
保证接口调用的顺序
将接口A返回的数据传递给后续接口B、C、D
3.1 接口执行顺序
首先说明一下,接下来提到的接口默认都属于同一个集合(Collections)。
我们以上面创建的接口集合为例。如果你留意我们批量测试的结果,你会发现接口的执行顺序其实就是这里目录中的顺序(从上到下),即:Request1 - Request2-Request3。
图片1080397 78.1 KB
这里的接口名称可能有点误导,所以再次强调:在目录中从上到下按顺序执行(与字典排序无关)
那么通过这个默认的执行顺序,我们就可以把需要执行的接口放在前面,比如把“登录接口”放在前面。
3.1.2 自定义执行顺序
当然,如果只有默认的执行顺序,通常无法满足我们复杂的业务需求,所以Postman为我们提供了一个函数:postman.setNextRequest("填写你要跳转的接口名称"),该函数支持我们去跳。继续执行到指定接口,例如:
当我们成功运行Request1接口后,就不需要运行Request2,直接跳转到Request3了。然后我就可以执行Request1接口的Tests功能区的跳转代码了,如:
图片1080589 106KB
这里有几点需要注意:
postman.setNextRequest() 仅在运行集合测试时才生效,这意味着当我们单独运行(发送)接口Request1时,该功能不起作用。
当我们从Request1到Request3成功运行采集测试时,如果Request3之后还有接口,则后面的接口会继续按照默认顺序执行,即图中的接口Request4仍然会被执行。
指定的跳转接口必须属于同一集合。
无论在Tests 脚本中的哪个位置调用setNextRequest() 函数,它都只会在当前脚本的末尾实际执行。例如,我们将图中的第二行与第一行互换后,运行跳转函数后仍然会执行第二行代码。
因此,使用setNextRequest()函数,我们可以根据条件跳过不必要的接口,或者创建我们自己的逻辑测试。
3.2 数据传输
在讲数据传输之前,我们先讲一下Postman中全局变量的使用和环境切换。
3.2.1 全局变量
其实我们在上面讲Pre-request Script的时候简单提到了全局变量的概念,也就是说我们可以通过脚本代码来设置全局变量。运行上面的脚本我们可以看到效果:
运行后我们可以看到,username和password这两个变量已经被成功保存,所以我们可以通过变量引用语法在任何界面中使用它们,例如:{xunaa}。
另外,Postman不仅支持通过代码设置全局变量的方式,还支持可视化操作:
图片1080678 96.2 KB
进入相应界面后,可以直接管理:
图片1080932 54 KB
3.2.2 多环境区分与切换
通常我们的接口分为测试版和线上版(或者更多),它们之间的区别可能只是ULR,所以全局变量不适合解决这个问题。
创建参数
您可能已经注意到,在上图中我为不同的环境创建了多个参数“集”。再看一下:
图片1080789 106 KB
我在每个环境中创建了一个主机参数,例如:
图片1080990 89.3 KB
当然我们的环境参数也可以通过脚本来设置。其功能是:
//注意,这个参数只是添加到你当前选择的环境的“参数集”中postman.setEnvironmentVariable("variable_key","variable_value");
使用及切换
环境“参数集”中的参数使用方式与全局变量相同,如图中的{{host}}所示。不同环境的切换如下图所示:
图片1080564 90.3 KB
3.3 解决依赖问题
掌握了上面的准备知识后,我们开始看看如何使用Postman来解决有依赖的接口测试。
假设情景
我们的接口Request1是登录接口。登录成功会返回一个access_token字段作为标识符(已实现)。那么假设接口Request3是下单接口,则需要携带登录返回的access_token才能正常访问。
想法
确保Request1先于Request3运行
将Request1返回的access_token值添加到环境变量“参数集”中。
request3请求时引用access_token的值
将返回值存储在“全局变量”或“环境变量”中,具体取决于具体的业务情况。本例中access_token的值与环境有关,所以这里我们选择使用设置的环境变量进行存储。
邮递员中的操作
在我们的目录中,已经保证Request1接口首先被执行。
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 :
图片1080292 42.7 KB
这里我把`token`放在头信息中。具体使用方式取决于接口参数规则。
【快速掌握Postman接口自动化测试全攻略】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
imparare a fare test di automazione con Postman, finalmente!
有19位网友表示赞同!
mi serve un modo semplice per testare le API, questo sembra perfetto
有17位网友表示赞同!
non ho mai usato Postman per il testing, questa guida mi potrebbe aiutare
有12位网友表示赞同!
ottima idea! semplificare l'automazione dei test è sempre utile.
有19位网友表示赞同!
se funziona veramente come dicen, sarebbe un ottimo strumento per la mia lavoro
有12位网友表示赞同!
finally, qualcosa di chiaro sull'automazione con Postman!
有16位网友表示赞同!
aspetto con ansia questa guida. ci sono molti tutorial confusi online
有14位网友表示赞同!
sposta il testing automatico a un livello superiore!
有5位网友表示赞同!
è possibile davvero automatizzare tutto in modo così semplice?
有11位网友表示赞同!
finalmente, una soluzione pratica per testare le API.
有17位网友表示赞同!
questo articolo mi aiuterà sicuramente a risparmiare tempo
有7位网友表示赞同!
imparare ad usare Postman per automated test? sì, please!
有17位网友表示赞同!
questa è la guida perfetta per i principianti come me
有9位网友表示赞同!
grazie per rendere l'automazione dei Test facile!
有6位网友表示赞同!
finalmente un modo semplice per testare le API !
有13位网友表示赞同!
questo mi piace! non importa se sono a livello principiante.
有10位网友表示赞同!
questa guida sarà utile anche ai team di sviluppo
有13位网友表示赞同!
imparare cose nuove e utili su Postman è sempre una buona cosa
有14位网友表示赞同!
l'automazione dei test è fondamentale, finalmente un modo semplice per farlo!
有14位网友表示赞同!
questo articolo potrebbe essere molto utile per il mio progetto.
有19位网友表示赞同!