三、postman测试断言设置语法

  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常用的也没有很多,认真体会上面列出的常用断言的语法规则,才能更好的使用;当需要构造特殊场景的时候,没办法请教大神吧;

  

参考资料:

  

https://segmentfault.com/a/1190000005055899

时间: 2024-08-02 11:02:31

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

postman测试实例--断言

让我们来看看postman测试的一些例子. 其中大部分是作为内部postman片段. 大多数测试是为单行的JavaScript语句一样简单. 只要你想一个请求,你可以有很多的测试. 注意:一个响应已从服务器接收后测试脚本运行. 测试实例 1.设置环境变量postman.setEnvironmentVariable("key", "value"); 例子: postman.setEnvironmentVariable("url", "ht

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

我们做接口测试都会有一个断言操作:也有一个变量被频繁使用,这时候可以用环境变量来处理 目录 1.postman之断言 2.postman之环境变量 1.postman之断言 同样以postman的登录接口为例,点击postman右侧的Response body: Contain string,查看上一次请求接口里面包含哪些字符串,可以作为断言,如下图: 如果想要以某一响应结果的字段作为准确断言,如响应结果为json串的,点击postman右侧的Response body: Json value

使用PostMan测试WebService接口

使用PostMan测试WebService接口 参考资料: 通过XML请求WebServer  https://blog.csdn.net/qq_33933408/article/details/53149435  WebService发布与访问并通过Postman测试WebService接口 https://blog.csdn.net/up123456789/article/details/79474446   一.操作步骤 1.设置URL 2.设置请求模式:Post 3.设置Header:添

Junit 4 Tutorials(Junit 4 教程) 三、Junit4 断言方法

Junit 4 断言方法允许检查测试方法的期望结果值和真实返回值.Junit的org.junit.Assert类提供了各种断言方法来写junit测试.这些方法被用来检查方法的真实结果值和期望值.下列一些有用的断言方法列表: Junit 4 Assert Methods Method Description assertNull(java.lang.Object object) 检查对象是否为空 assertNotNull(java.lang.Object object) 检查对象是否不为空 as

5、Cocos2dx 3.0游戏开发找小三之测试样例简介及小结

重开发者的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27186557 测试样例简介 Cocos2d-x 为我们提供了十分丰富的测试样例,这些测试样例是在引擎开发过程中为测试引擎的正确性而编写的代码,同时也是演示引擎各个部分如何使用的良好示例. 打开Cocos2d-x根目录下build文件夹下的cocos2d-win32.vc2012.sln解决方案,设置其中的 cpp-tests 项目为启动项目,成功运行后

如何把in_array 的第三个参数strict设置为 true

var_dump(in_array(0, array('s' )); 这句话的结果是bool(true). 因为in_array会将0 和's' 进行比较,0是number类型,'s'是string类型,根据php教程 manual 中"comparison operators" 一章的说明可知,number 和string进行 比较的时候,会先将string类型首先转化为number,然后再进行比较操作. 's'转化为number的结果为0,而0 == 0 的结果是true,所以in

PHP简单实现异步多文件上传并使用Postman测试提交图片

虽然现在很多都是使用大平台的对象存储存放应用中的文件,但有时小项目还是可以使用以前的方式上传到和程序一起的服务器上,强调一下这里是小众需求,大众可以使用阿里云的OSS,腾讯的COS,七牛的巴拉巴拉xxxxxx…… Postman使用 1. 打开后,选择"body"->"form-data",key悬浮的时候选择“File”, 然后value会出现一个文件按钮. 2. 本地的上传方法测试一下打印一下. 3. 以上使用Postman测试文件上传接口就通了,下面就写

使用 Postman 测试你的 API

使用 Postman 测试你的 API Intro 最近想对 API 做一些自动化测试,看了几个工具,最后选择了 postman,感觉 postman 的设计更好一些,我们可以在请求发送之前和请求获取到响应之后都可以自定义脚本,很灵活.而且 postman 的支持直接导入 swagger 定义,这样我们就可以很容易的和接口的 swagger 文档结合起来,而且值得一提的是看了几个工具 postman 是看的几个工具里唯一一个支持 openapi 3.0 的文档导入的,其他工具只支持 swagge

Junit 测试断言说明

Assert.assertEquals("发生错误时报告消息","预期值","生产值"); Assert.assertEquals("精确两位小数点",3.33,10.0/3.0,0.01); Assert.assertNotNull("");//验证是否为非空 Assert.assertNull(""); //验证是否为空 Assert.assertSame("",