postman的基本介绍跟基本的用法,在此就不做过多赘述,主要是受限于时间,网上有很多大神总结的已经算是很详尽了,给出链接并感谢大神的辛苦与奉献;

  postman基本用法:http://www.jianshu.com/p/13c8017bb5c8

  这个链接相对来讲更全面系统,在页面下方有不同知识点的链接,直接点击链接学习系统的postman相关知识;

  

  我这边想说的是关于断言语法的东西,Postman测试沙箱是一个JavaScript执行环境,可以通过JS脚本来编写pre-request Script和test Script。pre-request Script可以用来修改一些默认参数。也就是说其实请求的预置脚本跟测试脚本都是用js语法来写的,如果熟悉js完全可以忽略本文,肯定能写出更牛的脚本;下面列出的是一些常用的预置脚本跟测试脚本,如果对js语法不了解,可能通过这样的积累也能起到想要的效果,语法也很简单,多敲几次就掌握其中的套路了;

Pre-request script:

  

  由右侧的选项也可以看到,Pre-request Script主要是设置一些全局变量跟环境变量,包括清除跟增加;

  全局变量是在postman中所有的api都使用的变量,可以直接引用全局变量中的变量,而不用指定环境;

  

  点击右上角的眼睛可以看环境变量跟全局变量,当前没有选择环境变量,只有下面的Globals有值;

  环境变量是特定的环境下引用的变量,必须要制定对应的环境才能引用到其中的变量;

  

  右上角Manage Enviroments可管理环境变量,包括新增、下载、删除等等,之后要自动跑api测试脚本,测试用例对应的环境变量集也要一并下载放到脚本里跑,否则用例中引用的环境变量会没有任何意义;如果我的解释太过模糊,请参考上面的链接。。。。。。

  

  选择一个环境后,在点击右上方的眼睛,可以看到全局变量的上方会有选中的环境变量集合;而pre-request script也很简单,就是删除全局变量或者环境变量,以及设置全局变量或者环境变量,简单写:

  postman.setEnvironmentVariable("username", "postman");
  这样在调用这个接口的时候,这个变量就会自动添加到环境变量中,可在相同环境的其他接口中调用这个变量,调用的方法为:{{username}}
  常用的环境变量通常比较简单,也通常能应付一些场景,但是有些场景可能比较特殊,需要比如随机生成一个字符串作为用户名,或者需要发起请求前获取到当前的时间戳放到参数里,这样变量对应的值需要用到js中的函数:  
  1、注册之前生成一个字符串作为随机用户名:
  postman.setEnvironmentVariable("random_username", ("0000" + (Math.random()*Math.pow(36,4) << 0).toString(36)).slice(-4));
  2、在发起请求之前获取当前的时间戳放在参数里:
  postman.setEnvironmentVariable("unixtime_now", Math.round(new Date().getTime()/1000));
  其实一般的设置方法应该可以够用,若实在需要构造特殊场景的变量,那就请教熟悉javascript的同事吧;
Test script:
  
 
  

  测试脚本右侧也有一些设置的选项,相信大家都能看懂什么意思,也能根据选项的意思大体晓得应该怎样设置测试断言,下面列出一些常用的测试断言: 

  1、验证本次请求的状态码,即验证本次请求是否能调通;
  tests["Status code is 200"] = responseCode.code === 200;
  tests["Status code is 201"] = responseCode.code === 201;
  其中的tests["Status code is 201"] 只是起到断言开始的作用,并且断言的描述为"Status code is 200",或可任意写合适的描述,运行测试或跑自动化脚本时,在测试报告中会表示出"Status code is 200"该断言是否判定成功;如:
  

 
  2、验证返回相应中的字段值:
  var jsonData = JSON.parse(responseBody);
  tests["Check respose value err_code"] = jsonData.err_code === 0;
  先声明一个变量jsonData,调用JSON.parse()方法将responseBody转换成json的标准格式并赋值给变量jsonData,然后判断jsonData中的err_code是否为0;
  javascript中===表示全等;真实的响应结果如下:
  

 
  3、把环境变量里的token设为JSON里的token
  postman.setEnvironmentVariable("username", jsonData.username);
  这一句是将相应中的"username"字段设置为环境变量,在同环境其他的接口中,可以调用这个变量;另外一点,变量值取得是jsonData.username,前提是在这个断言之前已经执行var jsonData = JSON.parse(responseBody);即变量jsonData是已经声明并赋值了得,否则应该换成responseBody.username,但responseBody可能不是json格式的,直接用可能不准确,所以最好还是先将responseBody转换成标准json格式,当然变量jsonData名可以任意,直接取为body也没有问题,那设置环境变量的值为body.username,但变量名不能与已经有的字段名相同;
  
 
  4、响应时间小于500ms
  tests['Response time is less than 500ms'] = responseTime < 500;
  在postman中给的是相应时间小于200ms,500ms跟200ms相差不大,具体应该多少,凭君喜好,甚至可以更大,单位是ms;
 
  5、验证响应报文的JSON格式:
  //最简单的格式验证
  var schema = {
    properties: {
      err_code: {type: 'int'},
      err_msg: {type: 'string'}
    }
  };
  tests["Valid data schema"] = tv4.validate(responseBody, schema);
  先声明一个变量,在构造一个json格式赋值给变量schema,当然这个构造的json格式,就应该是接口返回的理论上的json格式,通过运行接口获取实际返回的responseBody与构造的标准json格式对比,看是否符合;这里也用到了tv4工具库中的validate()方法来对比json格式;
 
  //带有字段描述的响应json格式验证
  var schema = {
    properties:{
      "err_code":{
        "description": "The code of response!",
        "type": "int"
      },
      "err_msg":{
        "description": "The message of response!",
        "type": "string"
      }
    }
  };
  tests["valid response schema"] = tv4.validate(responseBody, schema);
 
  6、验证相应报文中是否包含某字段:
  tests["body has status"] = jsonData.status = true;
 
  7、先判断某字段是否存在,若存在则设置环境变量,若不存在则不设置:
  if (jsonData.status) {
    tests["body has status"] = true;
    postman.setEnvironmentVariable("status", jsonData.status);
  }
  else {
    tests["body has status"] = false;
  }
Pre-request script 与Test script相互调用:
 
  1、在pre-request script中随机生成cardno和cardname,并设置成环境变量:
  postman.setEnvironmentVariable("random_cardno", Math.round(Math.random()*9999999));
  postman.setEnvironmentVariable("random_cardname", ("0000" + (Math.random()*Math.pow(36,4) << 0).toString(36)).slice(-4));
 
  发起请求后,test script调用环境变量验证相应中的cardname是否正确,同时记录新卡id:
  var data = JSON.parse(responseBody); tests["check cardname"] = data.desc === environment.random_cardname;                                        postman.setEnvironmentVariable("new_card_id", data.id);
 
  2、将某请求获取到的token跟user_id设置为环境变量,以供后续使用:
  

  在Test script编辑器中键入如下脚本:
  var data = JSON.parse(responseBody);
  if (data.token) {
     tests["Body has token"] = true;
    postman.setEnvironmentVariable("user_id", data.user_id);
        postman.setEnvironmentVariable("token", data.token);
  }
  else {
    tests["Body has token"] = false;
  }
  如果上面的测试是在主窗口或者集合运行器中执行,那么 user_id 和 token 会自动地被添加到环境变量中。
  发送一个POST请求到 {{url}}/blog/posts ,并将 user_id 和 token 添加在URL参数中:
  

 

  调用环境中设置的环境变量使用: {{EnviromentValue}}
  请求成功的话将返回一个带有post_id的JSON,将文章ID保存到环境变量:
  var data = JSON.parse(responseBody);
  if (data.post_id) {
    tests["post_id found"] = true;
    postman.setEnvironmentVariable("post_id", data.post_id);
  }
  else {
    tests["post_id found"] = false;
  }
 
  将通过上面返回的文章ID来获取我们创建的文章。这里我们将用到Postman内置的 tv4 JSON 验证器来检查服务器响应的JSON。
  创建一个GET请求到 {{url}}/blog/posts/{{post_id}},并将下面这段代码添加到测试编辑器中:
  var schema = {
    "type": "object",
    "properties": {
      "content": "string",
      "created_at": "integer",
      "id": "integer" },
    "required": ["content", "created_at", "id"]
  };
  var data = JSON.parse(responseBody);
  var result = tv4.validateResult(data, schema);
  tests["Valid schema"] = result.valid;
  
 
结语:

  js语法规则很多,但设置pre-request script跟test script常用的也没有很多,认真体会上面列出的常用断言的语法规则,才能更好的使用;当需要构造特殊场景的时候,没办法请教大神吧;

  

参考资料:

三、postman测试断言设置语法的更多相关文章

  1. application/octet-stream二进制流, springboot项目, postman 测试参数设置

    这里使用 原生String接受,之后解析,

  2. Postman系列四:Postman接口请求设置环境变量和全局变量、测试沙箱和测试断言、测试集运行与导入数据文件

    一:Postman中接口请求设置环境变量和全局变量 全局变量和环境变量可以通过Pre-request Script和Tests设置,会在下面测试沙箱和测试断言中讲到. 全局变量的设置:官网参考http ...

  3. postman(三):添加断言

    进行接口测试时,添加断言时必不可少的,断言就是判断响应内容与预期返回是否一致 进行接口测试时,添加断言时必不可少的,断言就是判断响应内容与预期返回是否一致   postman可以在请求模块的Tests ...

  4. postman测试实例--断言

    postman测试实例--断言 让我们来看看postman测试的一些例子. 其中大部分是作为内部postman片段. 大多数测试是为单行的JavaScript语句一样简单. 只要你想一个请求,你可以有 ...

  5. API测试之Postman使用全指南(原来使用 Postman测试API如此简单)

    Postman Postman是一个可扩展的API开发和测试协同平台工具,可以快速集成到CI/CD管道中.旨在简化测试和开发中的API工作流. Postman 工具有 Chrome 扩展和独立客户端, ...

  6. Django学习笔记(3)——表单,测试和模板语法的学习

    一,表单form 为了接收用户的投票选择,我们需要在前段页面显示一个投票界面,让我们重写之前的polls/detail.html文件,代码如下: <h1>{{ question.quest ...

  7. 使用PostMan测试WebService接口

    使用PostMan测试WebService接口 参考资料: 通过XML请求WebServer  https://blog.csdn.net/qq_33933408/article/details/53 ...

  8. postman Tests断言

    摘要:关于postman的断言方法很多,在网上随便搜寻下,能搜出一大推,什么牛鬼蛇神都有,让人眼花缭乱..甚至在应用时出现错误.Test断言都是根据js规则来写的,对于我这种不懂js语言的来说确实不友 ...

  9. postman的断言/环境变量的处理

    我们做接口测试都会有一个断言操作:也有一个变量被频繁使用,这时候可以用环境变量来处理 目录 1.postman之断言 2.postman之环境变量 1.postman之断言 同样以postman的登录 ...

随机推荐

  1. bytes 与 str的区别以及装换

    bytes 和 str 的区别: bytes 存储字节( 通常值在 range(0, 256)) str 存储unicode字符( 通常值在0~65535) bytes 与 str 的转换 编码(en ...

  2. 使用PE工具箱 ughost 恢复系统导致被捆绑一堆软件的问题

    很多的pe系统,都有这么一个东西, 没啥技术含量,就是给ghost 加一个UI 而已 , 但是使用这玩意恢复系统,会被感染一些捆绑软件 ,开机之后就会卡顿, 并下载一堆软件 包括  爱奇艺 , 百度搜 ...

  3. mysql时间与字符串的互转

    将时间转换为字符串select date_format(now(), '%Y%m%d%H%i%s'), now(); 将字符串转换为时间select str_to_date('201901131111 ...

  4. ios逆向工程-内部钩子(Method Swizzling)

    Method Swizzling(方法调配) 怎么说呢,先了解什么是钩子为什么用钩子,学过C++的朋友应该清楚,hook就是用来获得(截断/改变)底层调用的方法.这样我们可以自由的修改或者读取一些想要 ...

  5. js helper(hsv/hsb转rgb颜色,uuid,金额小写转大写)

    hsv/hsb转rgb颜色 //h:[0,360],s:[0,100],v:[0,100] //return r:[0,256], g:[0,256],b:[0,256] function hsvto ...

  6. JS 快速获取数据中的最大、最小值

    var  numbers = [5,23 , 1420 , 5215 , 228 , 400 , 105, 411]; var maxInNumbers = Math.max.apply(Math, ...

  7. __weak、__strong这样的关键词和weak、strong有哪些区别

    ios4 设备上最好就不要使用 ARC... strong,weak 用来修饰属性.strong 用来修饰强引用的属性:@property (strong) SomeClass * aObject;  ...

  8. Gridview实现突出显示某一单元格的方法

    GridView突出显示某一单元格(例如金额低于多少,分数不及格等) 效果图: 解决方案:主要是绑定后过滤 GridView1.DataBind();        for (int i = 0; i ...

  9. awk&sed 小实例

    1.打印文件奇数行sed -n 'p;n'sed 'n;d' sed -n '$!N;P'sed -n '1~2p'awk 'i=!i'awk 'NR%2'2.打印文件偶数行sed -n 'n;p's ...

  10. znpc改版前后网址修改办法

    znpc改版前后网址修改办法把原网址中的http://bbs.znpc.net/viewthread.php?替换为http://bbs.znpc.net/forum.php?mod=viewthre ...