Postman 常用测试结果验证的方法

Posted yimai-series

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Postman 常用测试结果验证的方法相关的知识,希望对你有一定的参考价值。

Postman的test本质上是javascript代码,通过我们编写测试代码,每一个tests返回True,或是False。

每一个tests实际上就是一个测试用例
 
 官方文档给出了很多验证方式,我们通过实例来进行学习
 接口返回结果为json,示例如下
{  
  "status": 301,  
  "message": "购买商品库存不足",  
  "lists": [11]  
}  
1.检查response的body中是否包含字符串
 
  tests["测试点"] = responseBody.has("需要查找的字符串"); 
  例:
  tests["status code"] = responseBody.has("301"); 

  tests["status是否存在"] = responseBody.has("status"); 

  tests["lists是否存在"] = responseBody.has("lists"); 

  tests["lists值为11"] = responseBody.has("11"); 

  注:当json中value为integer时,需要查找的值可以不带双引号, 

  tests["xxx"]xxx代表的是你测试点的名字,可以是中文 

  tests["xxx"]xxx在一个脚本中如果出现多次,那么只执行第一个,所以尽量不要重复 

当value等于中文字符串时,这个方法貌似就不怎么好用了,但是我们有别的方法去验证,往下看,如果有读者知道怎么解决这个问题,也可以联系我,教教我

 

 2.检查Response Body是否等于字符串
 
 tests["测试点"] = responseBody === "Response Body返回的内容"; 
 这个可以用在接口返回内容为纯字符串时,直接检查整个返回结果的正确性, 
 例:  接口返回:哈哈 
  tests["返回为哈哈"] = responseBody === "哈哈"; 
  tests["返回为哈哈"] = responseBody === "哈"; 

第二个会返回False,必须完全匹配

 3.检查响应时间
  tests["Response time 小于200毫秒"] = responseTime > 200; 
  tests["Response time 大于200毫秒"] = responseTime < 200; 

 4.检查HTTP请求的状态码

  tests["Status code is 200"] = responseCode.code === 200; 
  注:  这里的状态码,跟上面我们用的json里边的"status"不是一回事 
  5.检查HTTP请求返回的状态码是否包含相应的字符串
  tests["Status code name has string"] = responseCode.name.has("Created"); 
  tests["502"] = responseCode.name.has("Server"); 
  tests["502"] = responseCode.name.has("Unreachable Server"); 
如下对应表,如果使用fiddler模拟相应的返回状态,注意fiddler返回的大小写有问题,用下表
? 100 Continue
? 200 OK
? 300 Multiple Choices
? 301 Moved Permanently
? 302 Move temporarily
......
? 500 Internal Server Error
? 501 Not Implemented
? 502 Bad Gateway
? 503 Service Unavailable
? 600 Unparseable Response Headers(省略了一些)

6.设置环境变量/全局变量

postman.setEnvironmentVariable("key", "value");
postman.setGlobalVariable("key", "value");    #postman可以用pm代替

7.把XML的body转换成JSON对象:

var jsonObject = xml2Json(responseBody);

8.检查json的值

var jsonData = JSON.parse(responseBody);tests["Your test name"] = jsonData.value === 100;

依然拿上面的json数据做测试

tests["状态码为301"] = jsonData["status"] == "301";
tests["message"] = jsonData["message"] == "购买商品库存不足";
tests["list"] = jsonData["lists"][0] == "11";

9.检查有信息

tests["Content-Type is present"] = postman.getResponseHeader("content-Type");//不区分大小写
tests["Content-Type is present"] = responseHeaders.hasOwnProperty("Content-Type");//区分大小写

10.POST request状态码

tests["Successful POST request"] = responseCode.code === 201 || responseCode.code === 202;

201 - Created 服务器已经创建了文档,Location头给出了它的URL。
202 - Accepted 已经接受请求,但处理尚未完成。

官方文档中还给出了对于json的验证例子,这种基于JSON格式定义JSON数据结构的规范,我们叫他JSON

Schema官方例子

var schema = { "items": { "type": "boolean" }};var data1 = [true, false];var data2 = [true, 123];console.log(tv4.error);tests["Valid Data1"] = tv4.validate(data1, schema);tests["Valid Data2"] = tv4.validate(data2, schema);

data1和data2是测试数据,schema相当于验证json的规范,示例是验证data1和data2中的value是否都是boolean类型

下面先了解下书写json规范文档常用的关键字

关键字 描述
$schema $schema 关键字状态,表示这个模式与 v4 规范草案书写一致。
title 用它给我们的模式提供了标题。
description 关于模式的描述。
type type 关键字在我们的 JSON 数据上定义了第一个约束:必须是一个 JSON 对象。
properties 定义各种键和他们的值类型,以及用于 JSON 文件中的最小值和最大值。
required 存放必要属性列表。
minimum 给值设置的约束条件,表示可以接受的最小值。
exclusiveMinimum 如果存在 "exclusiveMinimum" 并且具有布尔值 true,如果它严格意义上大于 "minimum" 的值则实例有效。
maximum 给值设置的约束条件,表示可以接受的最大值。
exclusiveMaximum 如果存在 "exclusiveMinimum" 并且具有布尔值 true,如果它严格意义上小于 "maximum" 的值则实例有效。
multipleOf 如果通过这个关键字的值分割实例的结果是一个数字则表示紧靠 "multipleOf" 的数字实例是有效的。
maxLength 字符串实例字符的最大长度数值。
minLength 字符串实例字符的最小长度数值。
pattern 如果正则表达式匹配实例成功则字符串实例被认为是有效的。

 

用下面的json做例子

{  
    "$schema": "http://json-schema.org/draft-04/schema#",  
    "id": "",  
    "properties": {  
        "lists": {  
            "id": "",  
            "items": {  
                "default": 11,  
                "description": "检查list值",  
                "id": "",  
                "title": "",  
                "type": "integer"  
            },  
            "type": "array"  
        },  
        "message": {  
            "default": "购买商品库存不足",  
            "description": "message信息",  
            "id": "",  
            "title": "",  
            "type": "string"  
        },  
        "status": {  
            "default": 301,  
            "description": "返回状态值",  
            "id": "",  
            "title": "",  
            "type": "integer"  
        }  
    },  
    "type": "object"  
}  

 

 下面是测试代码

var jsonData = JSON.parse(responseBody);  
  
var schema = {  
  "properties": {  
    "lists": {  
      "items": {  
        "default": 11,  
        "description": "库存不足的商品id",  
        "type": "integer"  
      },  
      "type": "array"  
    },  
    "message": {  
      "default": "购买商品库存不足",  
      "description": "id为11的商品库存不足",  
      "type": "string"  
    },  
    "status": {  
      "description": "status",  
      "type": "integer"  
    }  
  },  
  "type": "object"  
};  

 

示例如下:

 

  tests["json格式验证"] = tv4.validate(jsonData, schema); //验证json格式 

  tests["返回状态码是200"] = responseCode.code === 200; 

  tests["状态码为301"] = jsonData["status"] == "301"; 

  tests["message"] = jsonData["message"] == "购买商品库存不足"; 

  tests["list"] = jsonData["lists"][0] == "11"; 
另外Postman还提供了一些方法,如:
  responseCookies 
  request.data["key"]=="value" 
  request.headers["key"]=="value" 
  request.method 
  request.url 
  request 
  responseHeaders 
  responseBody  
  responseTime  
  responseCode 包含code,name,detail 
  iteration  

上述的方法可以帮助我们做更多的事情,比如通过一个接口拿到cookie值,然后把cookie设置成全局变量,提供给其他接口使用

 

当我们写测试脚本时,可能会遇到脚本书写错误或是需要一些log来辅助我们完善脚本,
我们可以打开 View->Show Postman Console,打开后我们可以通过console.log(xxx)来输出日志和查看错误信息

以上是关于Postman 常用测试结果验证的方法的主要内容,如果未能解决你的问题,请参考以下文章

Postman-Tests模块测试方法记录

关于postman与shiro权限验证问题

常用接口测试工具对比

常用python日期日志获取内容循环的代码片段

postman添加断言

接口测试——postman & jmeter