• 干货| Postman 接口测试全面教程


    本文是霍格沃兹测试学院优秀学员学习笔记,进阶学习文末加群。

    Postman 是谷歌开发的一款网页调试和接口测试工具,能够发送任何类型的 HTTP 请求,支持 GET/PUT/POST/DELETE
    等方法,可以直接填写 URL,header,body 等就可以发送一个请求,非常简单易用,是接口测试必备利器。本文将详细介绍 Postman
    的使用,接口测试关键步骤以及 Jenkins 持续集成。

    Postman 的使用

    创建用例集

    启动 Postman 以后,会看到这个控制面板。

    点击 Request 是创建一个 Request 测试请求,但是需要创建用例集保存这个请求。

    点击 Collection 是创建一个用例集来保存测试请求。

    创建 Collection 完成后,会在左侧生成用例集文件架,每次创建的测试接口都要保存到用例集中。

    第一个接口测试

    创建 get 请求为例,通常需要写 url、params、headers,会把 params 拼接到 url 末尾。

    点击 send 按钮并且请求成功,会展示响应结果。

    创建 post 请求为例,通常需要写 url、body、headers 等参数,body 参数格式一般是 form 或者 json 格式。具体 body
    使用那个格式,需要按照接口文件中的参数。

    接口断言

    点击 Tests 编写测试断言

    断言响应时间

    pm.test("Response time is less than 200ms", function () {  
        pm.expect(pm.response.responseTime).to.be.below(200);  
    });  
    // 断言响应事件小于 200ms  
    

    断言状态码

    pm.test("Successful POST request", function () {  
        pm.expect(pm.response.code).to.be.oneOf([200,202]);  
    });  
    // 断言状态码 200-202 区间  
    

    断言响应中包含某个字符串

    pm.test("Body matches string", function () {  
        pm.expect(pm.response.text()).to.include("ok");  
    });  
      
    // 断言响应中包含 "ok"  
    

    断言响应中的字段等于某个值

    pm.test("message test", function () {  
        var jsonData = pm.response.json();  
        pm.expect(jsonData["message"]).to.eql("ok");  
    });  
      
    // 断言响应中 "message" = ok"  
    

    断言响应中的字段不等于某个值

    var jsonData = JSON.parse(responseBody);  
    tests["message 不为 bad"] = jsonData["message"] != "bad";  
      
    // 断言响应中 "message" != bad"  
    

    断言响应中的列表长度

    pm.test("data list test", function () {  
        var jsonData = pm.response.json();  
        pm.expect(jsonData["data"].length).to.eql(41);  
    });  
      
    // 断言响应中 "list" 的字段长度  
    

    断言响应中的列表中第几个元素的字段值

    pm.test("data list 0 test", function () {  
        var jsonData = pm.response.json();  
        pm.expect(jsonData["data"][0]["time"]).to.eql("2018-11-28 17:27:41");  
    });  
      
    // 断言响应中 "list 0 的 " 的 time 字段的值  
    

    Json schema 验证

    tv4 是 postman 内置的 JSON Schema 验证库 , 参考:https://geraintluff.github.io/tv4/

    responseBody 如下 :

    {  
        "errCode": 0,  
        "errMsg": "",  
        "data": {  
            "id": 3210,  
            "title": "",  
    
    
    
    const customerSchema = {  
      "type": "object",          
      "properties": {  
        "errCode": {  
            "type": "integer",  
            "minimum": 0,  
            "maximum": 3,  
            "minLength": 2,  
            "maxLength": 3  
        },  
        "errMsg": {"type": "string"},  
      }  
    };  
      
    var customer = JSON.parse(responseBody);  
    // console.log(customer);  
    tests["Valid Data1"] = tv4.validate(customer, customerSchema);  
    // 验证 json 中的 errCode 类型是 integer, 并且验证最小值和最大值区间、验证长度区间  
    

    以上是常用断言方法,更多使用参考:
    https://learning.getpostman.com/docs/postman/scripts/test_scripts/

    测试前准备

    发送请求之前往往需要准备数据,比如设置 header 中参数或者计算签名。

    使用 Pre-request Script 可以编写一些准备数据。

    image

    在 header 头中引入刚刚设置{{timestamps}}环境变量。

    可以看到 header 中已经填写了时间戳参数。

    请求前编写加密算法

    var username = "test";  
    var pwd = "123321";  
    var base64Str = CryptoJS.enc.Utf8.parse(username+pwd);  
    var token = CryptoJS.enc.Base64.stringify(base64Str);  
    postman.setGlobalVariable("token",token);  
    console.log(token);  
      
    // 使用账号 + 密码的 base64 位加密算法  
    

    加密生成的字符串

    header 头中携带生成加密的 token 变量

    服务端使用 base64 位解密

    接口环境变量

    接口参数化

    全局变量

    局部变量

    • 使用{{}}作为变量

    • 参数化文件

    .csv 文件格式,第一行是变量名,后面是具体赋值。

    • 选择参数化文件

    接口参数传递

    在登录接口的响应数据中获取 token 值。

    把 token 传递给第二个接口中的 header 头中。第二个接口中的 header 头中已经拿到了 token。

    其他常用的方法

    设置环境变量

    pm.environment.set("variable_key", "variable_value");  
    

    设置全局变量

    pm.globals.set("variable_key", "variable_value");  
    

    获取环境变量

    pm.environment.get("variable_key");  
    

    获取全局变量

    pm.globals.get("variable_key");  
    

    清除环境变量

    pm.environment.unset("variable_key");  
    

    清除全局变量

    pm.globals.unset("variable_key");  
    

    Newman 的使用

    官方文档

    https://learning.getpostman.com/docs/postman/collection_runs/command_line_integration_with_newman/

    安装

    npm install -g newman

    运行

    1. 简单运行
    newman run 接口测试 .postman_collection.json  
    

    打印循环次数、请求次数、断言次数、耗时等 , 但是没有输出文件 .

    1. 循环执行
    newman run 接口测试 .postman_collection.json -n 2  
    
    1. 参数化

    -d 是参数化文件

    newman run 接口参数化测试 .postman_collection.json -d 参数化数据 .csv  
    
    1. 报告(图略)

    Jenkins 持续集成

    在 Jenkins 中创建自由风格的 job

    job 配置

    构建 shell 配置

    newman run 文件路径 / 接口测试 .postman_collection.json  
    --reporters cli,html,json,junit  
    --reporter-json-export jsonOut.json  
    --reporter-junit-export xmlOut.xml  
    --reporter-html-export htmlOut.html  
    

    构建后报告配置参数

    **/*.xml  
    

    以上,欢迎留言探讨。

    ** _
    来霍格沃兹测试开发学社,学习更多软件测试与测试开发的进阶技术,知识点涵盖web自动化测试 app自动化测试、接口自动化测试、测试框架、性能测试、安全测试、持续集成/持续交付/DevOps,测试左移、测试右移、精准测试、测试平台开发、测试管理等内容,课程技术涵盖bash、pytest、junit、selenium、appium、postman、requests、httprunner、jmeter、jenkins、docker、k8s、elk、sonarqube、jacoco、jvm-sandbox等相关技术,全面提升测试开发工程师的技术实力
    QQ交流群:484590337
    公众号 TestingStudio
    点击获取更多信息

  • 相关阅读:
    mongo的csv文件参考
    apache安装配置
    部署Java的运行环境
    ubuntu下没有ping命令
    webbench压力测试
    判断当前是否是微信浏览器,还是APP客户端
    PHP uniqid 高并发生成不重复唯一ID
    http_build_query()函数使用方法
    防XSS攻击
    PHP中json_encode()使用须知,JSON数组和JSON对象
  • 原文地址:https://www.cnblogs.com/hogwarts/p/15829071.html
Copyright © 2020-2023  润新知