- 文末获取测验开发进阶攻略 –
本文适合现已把握 Postman 根本用法的读者,即对接口相关概念有必定了解、现已会运用 Postman 进行模仿恳求等根本操作。
工作环境与版别: - Window 7(64位)
- Postman (Chrome App v5.5.3)
P.S. 不同版别页面 UI 和部分功用方位会有点不同,不过影响不大。
首要咱们来思考一下,假如要到达自动化接口测验作用,在根本的模仿恳求上还需求做哪些呢 我粗略归纳为 3 个问题(欢迎在评论区留言更多弥补主张):
-
怎么判别接口是否恳求成功?
-
怎么进行接口批量、定期测验?
-
怎么处理依靠接口问题(比方产品下单的接口有必要要求先登录)?
所以,接下来就主要分为 3 个部分,介绍怎么处理这 3 个问题。
首要,既然是自动化测验,那么咱们必定需求经过东西 Postman 或者代码,帮咱们直接判别成果是否契合预期。那么在接口测验上,大体就两个思路: -
判别恳求回来的 code 是否契合预期
-
判别恳求回来的内容中是否包括预期的内容(关键字)
接下来咱们看看怎么利用 Postman 来处理上述的问题:\在 Postman 中相关的功用在十分显眼的地方,Tests 功用的运用需求咱们有必定的编程言语基础,现在支撑的脚本言语即为 JavaScript 。但比较好的一点是,咱们不需求再去考虑上下文问题以及运转环境的问题 ,也便是说咱们只需求在这边完成成果逻辑判别的代码块即可。
而 Postman 还为咱们供给了一些常用的代码模板,在 Tests 面板右边的 SNIPPETS 功用区中,所以对 JavaScript 不大了解问题也不大。代码编写相关将在下文进行详细介绍。
先看上图的代码部分,咱们能够发现 responseCode 、 responseBody 和 tests 三个变量(可直接运用) :
-
responseCode :包括恳求的回来的状况信息(如:code)。
-
responseBody:为接口恳求放回的数据内容(类型为字符串)。
-
tests :为键值对方法,用于表明咱们的测验成果是成功与否,终究展现在 Test Results 中。
-
key :(如:code 200)咱们能够用来当做成果的一个描绘。
-
value:其值为布尔型,ture 表明测验经过, false 表明测验失利。
所以上述代码应该不难理解了,而有了回来成果的数据以及表明成果成功与否的方法,那么咱们“接口成果判别”的问题也就根本处理了。
别的还有几个比较常用的: -
responseTime :恳求所耗时长
-
postman :能够做的比较多,比方
-
获取回来数据的头部信息:
postman.getResponseHeader("")
-
设置全局变量:
postman.setGlobalVariable("variable_key", "variable_value");
更多功用能够查看官方文档。
Postman 在 SNIPPETS 功用区中为咱们供给的代码模板现已能处理大部分状况了,以下先挑几个跟成果判别相关的进行解说:
Status code : Code is 200
Response body: Contains string
Response body: is equal to string
Response body: JSON value check
Response time is less than 200ms
以上介绍的这些根本现已满足完成对单一接口的测验了,但咱们知道假如没有批量、定时使命, 那么这些都将毫无含义,所以持续 …
想要进行接口的批量测验、办理,那么咱们需求将待测验的接口全部都保存到同一个调集(Collections)中,你能够认为便是保存到同一个文件夹中。先看看 Postman 中的操作过程:\经过以上过程,咱们得到一个待测的接口调集,为了简化状况,我这边每个接口成功与否的条件都是用 code 是否为 200 来判别:
以上准备就绪后,咱们就能够开端批量运转接口进行测验了:\点击Run 后,会新翻开一个页面:\
-
Environment :用于切换接口运转的环境,这儿先不论,后边再讲
-
Iteration :用于设置接口一共要运转的次数。
-
Delay : 设置每次运转接口之间的时间间隔,单位为毫秒。
-
Data File : 上传测验数据文件 (下文独自讲)
咱们现已了解了,怎么让多个接口循环运转屡次,但是现在有个问题,按现在这个过程,每次运转时接口的参数都是相同的,那么就算咱们运转个100次、1000次含义也不大。
先看看咱们写好的一个登录功用的接口:\现在登录的账号和暗码参数都是写死的,也便是不过咱们履行多少次,都是拿这个账号去测验。那么假如想要测验账号暗码参数运用其它值有没有反常怎么办呢?( 想要每次都手动改的能够跳过这部分 /手动滑稽)这儿咱们先简略讲一下在 Postman 中运用怎么“变量”,如下图:
引证一个变量的语法:{{变量名}}, 图中能够看到,咱们将账户和暗码字段的参数值都设置为变量:{{username}} 、{{password}} 。修正完直接点击运转 (Send) 当然是不可的,因为现在这两个变量还未被赋值,不过咱们能够在 Pre-request Script 面板中进行赋值操作:
Pre-request Script 与 Tests 相似,差异在于:Pre-request Script 中的脚本是在履行恳求之前运转,而Tests 中的脚本则是在恳求完成之后履行。所以,咱们能够在 Pre-request Script 功用区顶用脚本先个上面两个变量进行赋值,如:
但是用 Pre-request Script 进行赋值操作依然不能处理咱们的问题,因为依照这种写法,不论运转多少次其实都仍是用固定(写死)的数据进行测验。当然既然是脚本言语,也会有更灵活的用法,这边先不将。
接下来咱们讲讲 Data File , 在运转调集前的这个选项便是用来上传测验数据(文件)以赋值给相应变量的。咱们先以 CSV 格局的测验数据为例:
数据格局相似表格,榜首行表明对应的变量名,下面 4 行表明 4 组账号暗码数据(其间两组为正确数据) ,咱们保存一份内容为上述示例数据后缀名为.csv 的文件后,再次开端测验看看作用,咱们挑选运转次数为 4 (对应 4 组测验数据)、挑选对应的 CSV 文件运转后,能够看到咱们的成果的确如咱们的预期。接口 Request 运转的成果为两次成功两次失利,也便是每一次运转都赋值了不同的账号暗码的测验数据 (在最新的桌面客户端版别中能够看到每次详细的恳求状况,这边就不再细说了)。
假如运用 Json 文件的话,那么格局如下:
Postman 供给了一个 Monitors (监视器)功用,支撑咱们提交一个测验使命,依照设置的定时器进行运转,如每小时测验一次,详细操作如下:\
1080799 61.5 KB
讲完接口成果判别和调集批量测验后,咱们再来看看比较杂乱的状况,即依靠恳求问题,比方咱们的购物下订单接口要求有必要先登录后才可拜访。但大部分依靠问题其实本质上便是一个接口间数据传递的问题,比方调用登录接口后回来一个标识,假设为 token ,那么咱们恳求下订单接口时只要一同携带 token 参数进行恳求即可。所以,问题变为:
-
确保接口调用次序
-
将接口A回来的数据传递给后续的接口B、C、D
首要,说明一下,接下来说的接口都是默许属于同一个调集 (Collections) 中的。
仍是以咱们上文中创建好接口调集为例,假如你有注意咱们履行批量测验的成果,就会发现接口的履行次序其实便是依照这边目录中的次序(从上到下),即: Request1 → Request2 → Request3。\所以有了这个默许的履行次序后,那么咱们便能够把需求优先履行的接口放前面即可,比方把“登录接口”放在榜首个。
当然,假如只有默许的一个履行次序的话,通常没法满足咱们杂乱的业务需求,所以 Postman 为咱们供给了一个函数:postman.setNextRequest(“填写你要跳转的接口名”) ,支撑咱们跳转到指定接口持续履行,举个例子:
咱们在运转完 Request1 接口成功后,不需求再运转 Request2 而是直接跳至 Request3 ,那么我能够在 Request1 接口的 Tests 功用区中履行跳转代码,如:\1080589 58.1 KB
这儿需求注意几点:
- postman.setNextRequest() 只在运转调集测验的时候收效,也便是说咱们独自运转 (Send) 接口Request1 时,函数是不起作用的。
- 当咱们运转调集测验成功从 Request1 → Request3 后,假如 Request3 后边还有接口,那么后边的接口依然持续按默许次序履行,即图中的接口 Request4 仍会被履行。
- 指定的跳转接口有必要属于同一个调集中。
- setNextRequest() 函数不论在 Tests 脚本中何处被调用,它都只在当前脚本最终才被真正履行。比方咱们将图中的第二行与榜首行互调后,那么在运转跳转函数后第二行代码仍会被履行。
所以,利用 setNextRequest() 函数,咱们便能够依照条件跳过不必要的接口,或者建立咱们自己的一个逻辑测验。
在讲数据传递前,先聊聊 Postman 中全局变量、环境切换的运用。
全局变量的概念其实咱们在上文中讲 Pre-request Script 时有简略提到,也便是说咱们能够经过脚本代码来设置全局变量,咱们能够看看运转上文的脚本后的作用:
咱们能够看到运转后,username 和 password 两个变量现已被成功保存下来,那么咱们在恣意接口中便都能够经过变量引证的语法如:{{username}} 来运用它们。
别的,Postman 不只支撑代码设置全局变量的方法,它还支撑可视化操作:
进入对应界面后,便可直接进行办理:\
通常状况下,咱们的接口都会分为测验版别和线上版别(或者更多),而他们的差异可能仅是 ULR 不同,那么全局变量便不大适宜处理这个问题。
可能你现已注意到,上图中我现已建有几个不同环境的参数“调集”了,再看一下:\
我在每个环境中都创建了一个 host 参数,如:\
当然,咱们的环境参数也能够经过脚本的方法来进行设置,函数为:
环境“参数集” 中的参数运用方法和全局变量一致,如图中 {{host}} ,不同环境的切换见下图:\
把握以上的准备常识后,咱们开端看看怎么用 Postman 处理存在依靠关系的接口测验。
咱们的接口 Request1 为登录接口,登录成功将会回来一个 access_token 字段作为标识(已实现)。那么假设接口 Request3 为一个下订单的接口,需求携带登录回来的 access_token 才能正常拜访。
-
确保 Request1 在 Request3 之前被运转
-
将 Request1 回来的 access_token 的值添加到环境变量”参数集”中。
-
Request3 在恳求时引证 access_token 的值
-
咱们目录中已确保 Request1 接口优先履行
-
Request1 中 Tests 的代码状况:
-
在接口 Request3 中运用变量 token :\
运转调集测验,能够看到咱们成果契合咱们的预期,Request1 和 Request3 经过测验,Request2 被跳过,Request4 仍被履行。Done…
更多技术文章
喜爱软件测验的小伙伴们,假如我的博客对你有协助、假如你喜爱我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦