Postman高级应用——流程控制、调试、公共函数、外部数据文件

目录

流程控制html

调试json

公共函数数组

外部数据文件网络

 

流程控制

流程控制简言之就是设置接口的执行顺序,流程控制只有在collection runner或Newman里才生效函数

若是须要实现多个接口的一次循环,只需在每一个接口的Tests中编写脚本
postman.setNextRequest('下一个接口名');

操做以下图所示:post

使用if进行判断来结束执行:
if(globals["个人地盘::建立新列表 - 禅道"])postman.setNextRequest("null"); tests["执行完毕!"] = responseCode.code ===200;
个人地盘::建立新列表 - 禅道为接口B中的返回值,在接口B中将其定义成一个全局变量。接口A经过判断全局变量是否存在进而判断接口B是否执行。如全局变量存在,将终止执行,不然执行接口B。
postman.setNextRequest("null");是一个终止程序做用
 
【注意】
1.若是不设终止条件,接口A执行完到接口B,接口B执行完又指向接口A,会构成死循环。该示例中if(globals["个人地盘::建立新列表 - 禅道"])为终止条件。
2.执行前需将用来作判断的全局变量删除,不然第一次执行完接口A后就将终止执行。
3.为了更清楚直观的查看运行结果,最好在每个接口的Tests中增长一个断言,不然难以判断接口A执行的次数

调试

调试有三种方式:
1.使用Ctrl+Alt+c 能够打开Postman的控制台,能够查看请求和响应(只适用于客户端,不适用于Chrom 插件)
2.用console.log()打印,到控制台看
3.tests['这里拼出你想看的字符串'] = true在界面/报告看断言
 
使用Postman控制台查看,以下图所示:

使用console.log()打印输出内容操做以下图所示:spa

 

 使用tests['这里拼出你想看的字符串'] = true,tests并不仅仅是指设置断言,也能够是普通的输出某些信息,以下图所示:插件

公共函数

经常使用的公共函数分为六种,分别是:代理

1).判断是否超时( assertNotTimeout):
var hasResponse=postman.getResponseHeader('Content-Type')?true:false; if(!hasResponse) tests['服务端在超时前没返回任何数据,请检查相关服务、网络或反向代理设置(如下跳过其余断言)']=false;
2).未超时,显示发出的请求参数( logParams):
if(hasResponse) tests[`[INFO] 请求参数(超时没返回时不解析):${JSON.stringify(request.data)}`]=true;
3).未超时,解析返回的JSON对象( getResponseJson):
try{if(hasResponse) var json=JSON.parse(responseBody);}catch(err){ tests['服务端没返回合法的JSON格式,请检查相关服务、网络或反向代理设置(如下跳过其余断言)']=false; tests[`[INFO] 返回:${responseBody}`]=true; console.error(err);}
4).返回元素的类型( assertType):
var assertType=(name,value,type)=>{let isType=(type==='array')? Array.isArray(value):typeof value===type; tests[`${name}为${type}(实际值:${value})`]=isType;};
5).返回元素是否与预期值一致( assertEqual):
var assertEqual=(name,actual,expected)=>{tests[`${name}等于${expected}(实际值:${actual})`]=actual===expected;};
6).返回元素是否与预期值不一致( assertNotEqual):
var assertNotEqual=(name,actual,expected)=>{tests[`${name}不等于${expected}(实际值:${actual})`]=actual!==expected;};
 
为了使用方便,因此将以上函数设置为全局变量,每行一对 key:value 的形式编辑设置成全局变量,以下图所示:

设置好以后,来使用以上函数,使用时的代码为:调试

复制代码
eval(globals.assertNotTimeout);//判断是否超时 eval(globals.logParams);//未超时,显示发出的请求参数 eval(globals.getResponseJson);//未超时,解析返回的JSON对象 eval(globals.assertType);//返回元素的类型 eval(globals.assertEqual);//返回元素是否与预期值一致 eval(globals.assertNotEqual);//返回元素是否与预期值不一致
复制代码

各函数的具体用法,以下详解:

①第一个函数和第二个函数一块儿使用,先判断是否超时,若未超时,便显示发出的请求参数,操做以下图所示:

tests中的代码为:

eval(globals.assertNotTimeout);
eval(globals.logParams);

②第一个函数和第三个函数一块儿使用,先判断是否超时,若未超时,便解析返回的JSON对象,操做以下图所示:

tests中填入以下代码:

eval(globals.assertNotTimeout);
eval(globals.getResponseJson);

tests[json.expires_in] = 7200;

注意:因为getResponseJson是解析返回的JSON对象,因此接口请求返回的定是JSON才能使用

 ③返回元素的类型(assertType),操做以下图所示:

tests中代码为:

复制代码
eval(globals.assertType);
//assertType=(name,value,type); //name为返回的元素key,value为该元素的值,type为该元素的类型 assertType('姓名','boss','string'); assertType('昵称','一壶清酒','string'); assertType('数字',1,'number');
复制代码

注意:此处需注意的是,数字类型并非常说的int型,而是number,填入int会一直报错

返回元素类型的值中代码:var assertType=(name,value,type)=>{let isType=(type==='array')? Array.isArray(value):typeof value===type; tests[`${name}为${type}(实际值:${value})`]=isType;};

从返回元素类型的值中代码来看,该代码是一个三目运算符,重要点在于typeof中的value值,好比输入该代码:assertType('数字',1,'number');value为1,type为number,便会执行经过pass,若把type改成int,执行结果只会显示fail

进行以下操做就能垂手可得明了,以下所示:

tests中的代码为:

//解释typeof tests[typeof 'hello'] =true;//返回出来的是string,值的类型 tests[typeof 1] =true; //返回出来的是number

④返回元素是否与预期值一致(assertEqual),相等为true(pass),反之为false(fail),操做以下图所示:

tests中代码为:

复制代码
eval(globals.assertNotTimeout);
eval(globals.getResponseJson); eval(globals.assertEqual); //assertEqual=(name,actual,expected); //name为返回的元素key,actual为返回的实际值,expected为预期值 assertEqual('expires_in',json.expires_in,7200); assertEqual('expires_in',json.expires_in,7100);
复制代码

作简单的预期结果与实际结果判断也可以下操做:

复制代码
eval(globals.assertEqual);
//assertEqual=(name,actual,expected); //name为返回的元素key,actual为返回的实际值,expected为预期值 //号码相同pass,不相同fail assertEqual('电话号码',18867210313,18867210313); assertEqual('电话号码',18867210310,18867210313);
复制代码

⑤返回元素是否与预期值不一致(assertNotEqual),不相等为true(pass),反之为false(fail),操做以下图所示:

tests中代码以下:

复制代码
eval(globals.assertNotTimeout);
eval(globals.getResponseJson);
eval(globals.assertNotEqual);
//assertNotEqual=(name,actual,expected); //name为返回的元素key,actual为返回的实际值,expected为预期值 //号码不相等pass,相等fail assertNotEqual('expires_in',json.expires_in,7100); assertNotEqual('expires_in',json.expires_in,7200);
复制代码

外部数据文件

外部数据文件是Collection Runner在HTTP requests 和script中能够导入CSV文件或是JSON文件,从数据文件(即CSV或JSON文件)中使用values,为了在Postman UI中去使用它们,你须要遵循和environment or global variables同样的语法。
 
操做步骤:
1.在你的Collection request中使用变量,如下的全部变量将会被数据文件中的相应的值替换
2.准备你所须要运行的数据文件(JSON/CSV)
CSV文件要在Collection Runner中工做,第一行必须是在request中要使用的变量名,每一行是一条用例,并表示一次迭代。
JSON文件,你须要确保你的文件有键/值对数组。数组中的每一个元素是键值对的对象,表明了一次迭代。key是做为变量名,values是代替request里的值。
3.打开Collection Runner窗口以及选择合适的Collection或文件夹
4.选择“Choose files”,从文件选择区加载数据文件,若是加载成功,你能够预览Collection Runner中执行的数据量
5.设置迭代次数。每次迭代都将使用你的数据文件中的一行,若是迭代次数超过数据文件中的行数,将重复执行最后一行
6.运行Collection以及观察结果
 
注意:当有多个key值,中间用英文,隔开便可,csv文件中第一行的参数名要与发送请求中设置的变量名要一致
举例为百度接口,设置好参数,以下图所示:

 

在左侧面板中选中该接口并运行,以下图所示:

配置参数,以下图所示:

csv格式文件先制做好,再在运行时添加进来,预览效果如为:

 

最终运行效果以下图所示:

 

本文仅表明做者观点,系做者@温一壶清酒发表。
欢迎转载,但未经做者赞成必须保留此段声明,且在文章页面明显位置给出原文链接,不然保留追究法律责任的权利。
文章出处:http://www.cnblogs.com/hong-fithing/
相关文章
相关标签/搜索