• Postman系列进阶


    涵盖内容

    一、接口测试分类:

    分类
    测试外部接口:是被测系统和外部系统之间的接口。(一般只要正常调用即可)
    测试内部接口:是被测系统内部各个模块之间的接口。

    • 1.内部接口提供给内部系统使用(一般只要正常调用即可)
    • 2.内部接口提供给外部系统使用(测试必须非常全面)

    电商平台=A
    淘宝,京东,支付宝。

    接口测试重点测试什么?
    接口参数传递的正确性,接口功能的正确性,以及各种异常情况系统的容错能力,接口的权限控制,接口的兼容性。

    二、接口测试用例设计

    1. 拿到api接口文档(可以从开发拿,也可以抓包自己创建,也可以录制后自己创建),熟悉接口文档业务,接口地
      址,接口鉴权(鉴定是否有访问接口的权限)方式,接口入参,出参,是否有完善的错误码机制。
    2. 编写接口测试用例以及评审。
      思路:
      正例:输入正常的入参,接口能够正常返回。(get/post)
      反例:
      鉴权反例:必填,错误的鉴权码,鉴权码已过期........
      参数反例:必填,参数类型异常,参数的长度异常......
      错误码反例:
      其他场景:黑名单,接口调用次数限制,分页场景。
      接口的兼容性:一个接口是否能兼容多个版本的前端。
    3. 使用接口测试工具Postman/jmeter/apifox执行接口测试,提供BUG,以及BUG验证。
    4. Postman+Newman+Jenkins+git实现持续集成并且生成报告。

    三、执行接口测试

    请求:请求方式、请求路径,请求头、请求参数

    image-20220218140940905

    Params:get请求传参。
    Authorization:鉴权
    Headers:请求头

    • accept:客户端接收的数据类型。

    • content-type:客户端发送给服务器的数据类型

    • user-agent:客户端的类型

    • xmlhttprequest:异步请求

      .....

    Body:post请求传参
    image-20220218140949644

    • none:没有参数
    • form-data:文件上传(包含键值对和文件上传)
    • x-www-from-urlencodeed:表单请求(键值对)
    • raw:使用原始数据格式请求(JSON,XML,HTML,Text,Javascript)
    • binary:二进制文件上传。

    Pre-request Script:请求之前的脚本。
    Tests:请求之后的脚本。
    Settings:设置
    Cookies:是Postman用于自动管理Cookie的功能

    响应

    image-20220218141010909

    Body:返回的值

    • Pretty:以不同的格式查看返回结果
    • Raw:以文本格式查看返回结果
    • Preview:以网页格式查看返回结果

    Cookies:响应的Cookie
    Headers:响应头
    TestResults:断言的结果

    调试

    Console控制台
    面试题:get请求和post请求的区别是什么?

    1. get请求一般用于获取数据,post一般用于提交数据。
    2. 传参的方式不一样:
      get请求在接口地址里面以?的方式传参,多个参数直接用&分隔。
      post是在body当中传参。
    3. post比get请求安全。
    4. get请求只发一个数据报文,post请求发送两个数据报文。

    四、接口关联

    第一种方式:

    1. 取值并设置全局变量(JSON提取器)
    //打印用于调试 
    console.log(responseBody); 
    //把返回的字符串转换成JSON对象。 
    var baili = JSON.parse(responseBody); 
    //取值 
    console.log(baili.access_token); 
    
    1. 在需要的接口里面通过{{}}取得全局变量的值
    {{token}} 
    

    json;是一种数据格式。
    它有两种数据:

    1. 对象(字典)(键值对,key:value) {key:value}
    2. 数组 (列表) [a,b,c,d]
      键值对:key:value

    第二种方式:

    1. 正则表达式提取器
    //正则表达式提取器 
    console.log(responseBody);
    //通过正则匹配值,match匹配, 
    var aaa = responseBody.match(new RegExp('"access_token":"(.*?)"')); 
    console.log(aaa[1]); 
    //设置成全局变量 
    pm.globals.set("tokens",datas[1]); 
    
    1. 在需要的接口里面通过{{}}取得全局变量的值
      Python自动换行
    {{token}} 
    

    五、环境变量和全局变量

    全局变量:在所有的接口里面都可以访问的变量。
    环境变量:在当前环境里面都可以访问的变量。

    1. 设置环境变量

      image-20220218141048841

    2. 把所有的请求中的ip地址改成获取环境变量的方式

      {{ip}}

    3. 在postman的右上角选择不同的环境即可。

    六、遗留问题

    1. 多种接口关联方式以及Tests里面右边的功能。
    2. 创建接口里面标签名需要手动修改。
    3. 接口流程案例

    七、Postman动态参数

    第一种:系统自带的动态参数

    {{$timestamp}} //动态时间戳
    {{$randomInt}} //动态0-1000的整形
    {{$guid}} //动态的guid字符串
    

    第二种:自定义的动态参数

    //自定义动态参数生产随机数 
    var times = Date.now(); 
    pm.globals.set("times",times); 
    //定时五秒 
    const sleep = (milliseconds) => { 
    const start = Date.now(); 
    while (Date.now() <= start + milliseconds) {} 
    }; 
    sleep(5000); 
    

    八、Postman的业务闭环用例

    九、Postman的断言

    image-20220218142423266

    检查返回的状态码是否为200(常用)
    检查返回的数据中包括有指定的字符串(常用)
    检查json中的其中一个字段的值(常用)
    检查返回的值等于一个指定的字符串(常用)
    检查是否包含有content-type响应头
    检查请求的时间少于200MS
    检查返回的状态码是否在数组中。
    检查状态信息是指定的字符串。

    //----------------------------------断言----------------------- 
    pm.test("检查返回状态码为200", function () { 
    pm.response.to.have.status(200); 
    }); 
    // 
    pm.test("检查返回的结果中包括指定字符串", function () { 
    pm.expect(pm.response.text()).to.include("access_token"); 
    }); 
    // 
    pm.test("检查json中其中一个字段的值", function () { 
    var jsonData = pm.response.json(); 
    pm.expect(jsonData.expires_in).to.eql(7200); 
    }); 
    //第四种在编辑接口 
    pm.test("Body is correct", function () { 
    pm.response.to.have.body('{"errcode":0,"errmsg":"ok"}'); 
    }); 
    
    // 
    pm.test("Content-Type is present", function () { 
    pm.response.to.have.header("Content-Type"); 
    }); 
    // 
    pm.test("Response time is less than 200ms", function () { 
    pm.expect(pm.response.responseTime).to.be.below(300); 
    }); 
    pm.test("Successful POST request", function () { 
    pm.expect(pm.response.code).to.be.oneOf([200, 202]); 
    }); 
    pm.test("Status code name has string", function () { 
    pm.response.to.have.status("OK"); 
    }); 
    

    一旦需要断言随机数,那么就必须使用自定义动态参数并且要注意如下事项:

    1. 在断言中不能够使用{{}}的方式取全局变量。
    2. 一般通过:pm.globals.get("times") 取全局变量的值

    十、Postman批量运行测试用例

    特别要注意:文件上传的接口在做批量运行的时候会报错。
    解决方案:

    image-20220218143715627

    十一、Postman的参数化(CSV,JSON)

    第一组数据

    
    { 
    "access_token": "54_9ztT4UEWEtv5LBGm4gUoqsqm9xjbSu35VjsV8vDUOlDi9EUGoRN5R3ywKqHZIXPC
    45cMsuymFkP7GazAnBrH7LrYi8mJ8apGSh-q4bayPdXtbSzfETP7IEQRLT2vwQPknfYPQE8e-
    oA_I2urQZUfAIAENI",
    
    "expires_in": 7200 
    } 
    
    

    第二组数据

    { 1
    "errcode": 40002, 
    "errmsg": "invalid grant_type rid: 620cfc5e-51b0dfc4-118b36a1" 
    } 
    

    特别注意:
    在断言中取数据文件的值,不能使用: pm.globals.get("times") ,而是要使用: data.assert_str

    十二、必须带请求头的接口测试

    十三. Postman接口测试之Cookie鉴权

    1. 什么是 Cookie ?
      cookie是一小段文本,格式是key-valuie键值对。

    image-20220218144942252

    分类:持久化,回话级。

    1. 查看Cookie?
      F12,抓包工具。

    2. Cookie是如何实现鉴权的,如果判断接口和接口之间存在Cookie鉴权。
      cookie可以传输session,也可以传输token。

    3. cookie鉴权的原理:分为两步
      1.当客户端第一次访问服务器的时候,那么服务器就会生成cookie,并且通过响应里面的set-cookie
      传输给客户端。客户端会自动保存。

      2.当客户端第2-N次访问服务器的时候,那么客户端就会自动的读取本地的cookie,然后根据主机IP或
      域名添加对应的cookie从而实现鉴权。

    4. Postman实现Cookie鉴权。
      自动处理。但是不是万能的。经常会有坑。

    十四. Mock Server服务器

    mock:模拟
    应用场景:

    1. 前后端分离的架构下,前后端的开发是不同步,前端的展示数据依赖于后端的接口。后端的接口还没完成。这时候怎么办?
      前后端联调:就是去掉mock,然后让前端访问真实的后端接口。
    2. 当被测系统调用第三方接口,这个时候我们想要测试这个接口的错误场景。
    3. 去甲方展示demo,静态网页。
      Shift+F5
      每天只能访问1000次。
      打通Flask的Mock Server。

    十五. Postman处理需要加密解密的接口

    目前市面上的加密技术:

    1. 对称式加密:DES , AES,Base64
    ase64位加密 
    //把需要加密的值转换成utf-8的编码格式 
    var us = CryptoJS.enc.Utf8.parse("admin"); 
    var pw = CryptoJS.enc.Utf8.parse("123"); 
    //对转换后的值做Base64加密 
    var bs64_us = CryptoJS.enc.Base64.stringify(us); 
    var bs64_pw = CryptoJS.enc.Base64.stringify(pw); 
    //设置为全局变量 
    pm.globals.set("bs64_us",bs64_us.toString().toUpperCase()); 
    pm.globals.set("bs64_pw",bs64_pw.toString().toUpperCase());
    
    1. 非对称式加密(双钥):RSA加密
    2. 只加密不解密:SHA加密,MD5
    3. 混合加密(自定义加密方式)
    4. 接口签名Sign

    十六. Postman非GUI方式运行以及参数详解

    newman:专为postman而生的命令行工具。
    安装:

    1. 安装Node.js
    2. 安装newman
    命令如下:npm install -g newman
    
    1. 导出postman的脚本并执行。
      导出:用例,环境,全局变量。
      命令:
    newman run "e:\newmans\yongli.json" -e "e:\newmans\huanjing.json" -g
    "e:\newmans\quanju.json" -r cli,html,json,junit --reporter-html-export
    "e:\newmans\report.html
    

  • 相关阅读:
    如何提高Java并行程序性能??
    《实战Java虚拟机》,最简单的JVM入门书,京东活动,满200就减100了,该出手了
    看JVM就推荐这本书
    【Java】实战Java虚拟机之五“开启JIT编译”
    实战Java虚拟机之四:提升性能,禁用System.gc() ?
    实战Java虚拟机之三“G1的新生代GC”
    实战Java虚拟机之二“虚拟机的工作模式”
    实战Java虚拟机之一“堆溢出处理”
    实战java虚拟机的学习计划图(看懂java虚拟机)
    aspose.cells 复制单元格
  • 原文地址:https://www.cnblogs.com/crstyl/p/15919812.html
Copyright © 2020-2023  润新知