美文网首页postman
『政善治』Postman — 10.Postman断言(一)

『政善治』Postman — 10.Postman断言(一)

作者: 繁华似锦Fighting | 来源:发表于2021-03-09 08:06 被阅读0次

    我们检验一个测试用例是否通过,一般会将我们心理预期的结果与实际结果进行比对,如果结果一致则证明测试通过,如果结果不一致,则证明测试不通过,这即是我们经常所说的断言。

    1、Tests的介绍

    Postman中的断言是使用请求后脚本Tests,是对状态码、响应头、响应正文等信息进行断言操作。

    在Postman中封装了我们常见的断言代码片段,当然Tests除了可以作为断言,还可以当做后置处理器。

    经常应用于:

    1. 断言。
    2. 获取当前接口的响应数据,传递给下一个接口。

    提示:在一个请求或者一个集合都可以定义Tests,在集合中定义Tests,表示集合中的每一个请求响应后,都需要执行Tests中的断言脚本。

    点击请求中的Tests标签项,如下图:

    我们可以在上图看到,在Tests标签页的右侧边栏中,Postman为我们提供了一些常用的代码模版。

    提示我们:

    Test scripts are written in JavaScript, and are run after the response is received.
    测试脚本用JavaScript编写,并在收到响应后运行。
    
    Learn more about tests scripts
    点击这里,可以学习更多关于测试脚本的资料。
    

    这里学习关于Tests的更多用法:
    https://go.pstmn.io/docs-test-scripts

    总结:

    (1)Postman测试沙箱的执行顺序:

    1. 在发送Request之前,执行Pre-request Script中的js脚本,可定制化Request(准备数据)。
    2. 收到Response之后,执行Tests中的脚本,处理返回的数据(断言或者处理数据)。

    整个流大概是这样的:


    (2)Postman中Tests的作用:

    1. 做断言:可以断言状态码或者断言返回数据中的字段。
    2. 取返回值:做流程接口的时候,向下传递返回数据。

    2、常用SNIPPETS(片段)说明

    (1)常用变量相关

    • Get an environment variable:获取一个环境变量。
    • Get a gloval variable:获取一个全局变量。
    • Get a variable:获取一个变量(本地)。
    • Set an environment variable:设置一个环境变量。
    • Set a global variable:设置一个全局变量。
    • Clear an environment variable:清空一个环境变量。
    • Clear a global variable:清空一个全局变量 。

    使用:

    • 获取变量:如果在下一个请求中用到上一个请求的返回值,可以使用“设置一个环境变量”,将请求的返回值设置为环境变量,在下一个请求中,使用“获取一个环境变量”取到该值。
    • 清空变量:这里的清空等于删除变量,一个参数使用完成后,需要删除,或者清空值都可以使用该方法。

    (同前一篇Pre-request Script的使用方式一样)

    (2)状态码相关

    • Status code: Code is 200:判断状态码是否正确;默认判断状态是否为 200, 可修改。

      pm.test("Status code is 200", function () {
          pm.response.to.have.status(200);
      });
      
    • Status code:Successful POST request
      判断状态码是否为预期结果之一;比如默认断言状态码是否是 201, 202 中的一个。

      pm.test("Successful POST request", function () {
          pm.expect(pm.response.code).to.be.oneOf([201, 202]);
      });
      
    • Status code:Code name has string
      判断状态码描述是否包含字符串,比如是否包含 Created。

      pm.test("Status code name has string", function () {
          pm.response.to.have.status("Created");
      });
      

    (3)响应结果断言:

    • Response body: Contains string

      响应结果是否包含字符串;

      注意:这只能检查Response body中raw格式展示的返回数据,如果raw格式展示的返回数据中,有中文数据未解码,也只能匹配未解码形式的内容,且匹配包含不唯一(工作中很少见,一般接口返回数据中不会设计重复字段)。

      pm.test("Body matches string", function () {
          // 比如raw中的数据,“学院”没有进行Unicode解码,就只能如下方式进行比对。
          pm.expect(pm.response.text()).to.include("例如:\u5b66\u9662");
      });
      
    • Response body: JSON value check

      响应结果如果是 JSON格式的数据,检查具体的 JSON字段的值;

      实际工作中基本就用这个方式。(下面有练习好好看看)

      pm.test("Your test name", function () {
          var jsonData = pm.response.json();
          pm.expect(jsonData.value).to.eql(100);
      });
      
    • Response body: Is equal to a string

      响应结果与字符串是否全部匹配预期的字符串;

      就是在把Response body的数据用raw格式展示,然后全部复制到下面位置。

      pm.test("Body is correct", function () {
          pm.response.to.have.body("raw格式展示的返回数据,全部复制到这里");
      });
      
    • Response body: Convert XML body to a JSON Object
      将 XML 转换成 JSON;

      var jsonObject = xml2Json(responseBody);
      

    等等还有很多,用的时候我们可以查看相关文档。

    (4)Header :

    Response headers:Content-Type header check
    响应头部中是否包含字段,代码片段如下:

    pm.test("Content-Type is present", function () {
        pm.response.to.have.header("Content-Type(这里填写请求头属性)");
    });
    

    (5)响应速度:

    Response time is less than 200ms
    响应时间是否少于多少 ms。

    pm.test("Response time is less than 200ms", function () {
        pm.expect(pm.response.responseTime).to.be.below(200);
    });
    

    相关文章

      网友评论

        本文标题:『政善治』Postman — 10.Postman断言(一)

        本文链接:https://www.haomeiwen.com/subject/ojaqfltx.html