Postman

目录

基础

  1. 接口测试简介,接口测试流程,接口测试用例设计,实战接口介绍
  2. Postman简介和安装
  3. Postman接口请求工具界面讲解
  4. Postman设置环境变量和全局变量
  5. Postman接口关联
    进阶
  6. Postman动态参数及自定义参数
  7. Postman断言
  8. Postman使用CSV或TXT文件实现数据驱动
  9. Postman请求头
  10. Postman实现接口Mock Server自定义接口服务器
  11. Postman实现Cookie鉴权以及Token鉴权
  12. Postman接口加密Base64,MD5,RSA,DES,RES解密
  13. Postman+Newman+Jenkins接口自动化持续继承

基础

接口测试的简介和分类

概念:接口测试就是测试系统组件接口之间的一种测试
分类:

  • 测试外部接口:测试被测系统和外部系统之间的接口(只需要测试正例即可)
  • 测试内部接口:
    1. 内部结构只提供内部系统使用。(只需要测试正例即可)
    2. 内部接口提供给外部系统使用(测试必须非常全面,正例,各种异常场景)

接口测试的流程以及测试用例的设计

  1. 拿到接口api文档(通过珠宝工具获取),熟悉接口业务,接口地址,鉴权方式,入参,
  2. 编写接口用例及评审
    1. 思路:
      1. 正例:输入正常入参,接口你能够返回数据。
      2. 反例:
        1. 鉴权反例:鉴权码为空,鉴权码错误,鉴权码过期;
        2. 参数反例:参数为空,参数类型异常,参数长度异常,异常参数;
        3. 错误码覆盖:根据业务而定的
        4. 其他错误场景:接口黑名单,接口调用次数,分页场景,数据量等;
  3. 使用接口测试工具Postman执行接口测试
  4. Postman+Newman+Jenkins接口自动化持续继承并用邮箱发送结果

动漫图片 - 木小果API (muxiaoguo.cn)
后去权限:appid,sercret(密钥)

Postman的简介,安装

安装,1:Chrome应用商店搜索Postman安装,2:官网安装,3.Postman注册登录;
界面介绍:

  1. home主页
  2. workspaces工作空间
    1. Collections:集合,收藏,项目集合,
      1. Params get请求参数
      2. Authorization 鉴权
      3. Headers 请求头
      4. Body 请求体:
        1. none没有参数,
        2. form-data:既可以传输键值对参数,也可以传文件
        3. x-www-from-urlencoded:只能够传键值对参数
        4. raw:串json,text,xml,html,javascript;
        5. binary:把文件以二进制的方式传参;
      5. pre-request-script:请求之前的脚本
      6. tests:请求之后的断言
      7. cookies:用于管理cookie信息;
      8. Body:接口返回的数据
        1. pretty:以Json,html,xml。。不同的格式查看返回的数据;
        2. Raw:以文本的方式查看返回的数据
        3. PreView以网页的方式i查看返回的数据
      9. Cookies:响应的Cookie信息
      10. Headers:响应头
      11. Test Results:断言的结果
    2. ApiS api文档
    3. Environment 环境变量,全局变量
    4. Mock Server 虚拟服务器
    5. Monitors 监听器
    6. Flows 流动
    7. History 历史
  3. Explore 探索
  4. reports 报告

使用Postman的环境变量以及全局变量

环境变量:环境变量就是全局变量
全局变量:全局变量是能够在任何接口里面访问的变量。

获取环境和全局变量的值通过{{变量名}},来引用

接口关联

  1. json提取器实现接口关联

    1. var data=pm.response.json();

    var dd=data.data

    console.log(dd.imgurl)

    pm.globals.set("dd", dd.imgurl);

  2. 使用正则表达式来实现接口关联,

var data=pm.response.text();

console.log(data);

var dd=data.match(new RegExp('"imgurl":"(.*?)"'));

console.log(dd[1]);

pm.globals.set("dd", dd[1]);

pm.globals.set("variable_key", dd[1]);
var data=pm.response.text();

console.log(data);

var dd=data.match(new RegExp('"imgurl":"(.*?)"'));

console.log(dd[1]);

pm.globals.set("dd", dd[1]);

pm.globals.set("variable_key", dd[1]);

var data=pm.request.url.query;

console.log(data);

Postman内置动态参数以及自定义的动态参数

postman内置动态参数:
{{timestamp}}生成当前事件的事件错 {{randomint}}生成0-1000之间的随机数
{{$guid}}生成随机Guid数
自定义动态参数

var times=Date.now();

  

//设置全局变量

pm.globals.set("timee",times);

上传文件:传入的Body中key选择file即可;

Postman断言

Status code : code is 200 检查返回的状态码是否为200
Response Body:Contains string 检查响应中包括指定字符串
Response body:Json value check 检查响应中其中json的值
Response body :is equal to a sting 检查响应响应等于一个字符串
Response headers:Content-type...检查是否包含响应头Content-type
Response time is less than 200ms :检查请求耗时小于200ms

在断言中获取自定义动态参数的方式(全局变量):
pm.globals.get("times")
globals["times"]
globals.times

上述描述中都是在一个接口中获得的断言,如何将所有接口都增加这个断言呢?
设置全局断言
步骤:

  1. 找到创建的组,点击进入
  2. 选择tests
  3. 编写断言代码即可

如果在测试过程遇到上传文件,单独调接口可以选择但是也会出现一个组运行时出现错误的困扰,这就是因为postman在运行组过程中不会再访问你其他盘的数据导致的

上传文件

在上传文件之前要将Content-Length的值进行取消选中,因为这个值会影响你上传的文件传输提的大小,如果不一致则会导致上传失败!
在form-data中


image.png

如果在使用数据驱动csv/json执行时需要注意要将该文件的地址设置一下postman可以支持访问的地址;

  1. 设置postman的工作路径,上传对应文件:


    Pasted image 20220308210348.png

即可

Postman数据驱动csv文件和json文件的处理

在组点击run弹出右侧弹窗选择文件:
文件内容如:

[
{"username":"sj17600446278@163.com","password":"dc483e80a7a0bd9ef71d8cf973673924","sysfrom":"pc","msg":"操作成功"},
{"username":"sj17600446278@163.com","password":"dc483e80a7a0bd9ef71d8cf973673921","sysfrom":"pc","msg":"密码输入错误,请重新输入"},
{"username":"sj17600446278@161.com","password":"dc483e80a7a0bd9ef71d8cf973673924","sysfrom":"pc","msg":"帐号不存在"}

]

这样传参
username={{username}}&password={{password}}&sysfrom={{sysfrom}}
通过data.调用文件里的数据;
进行上传成功,执行文件即可

测试必须带请求的接口

Postman接口Mock Servier服务器
Mock模拟
https://9b1ab83d-466a-439e-a437-b28f679caf34.mock.pstmn.io
输入信息启动,注意不要忘了请求时把环境变量启动一下哦;

Postman的Cookie鉴权

什么是cookie?

Postman实现接口的加密和解密

  1. 目前市面上的加密方法
  2. 对称式加密:DES,ASE,Base64加密算法
  3. 非对称式加密:双钥(公钥,私钥,公钥和私钥解密)加密,RSA加密算法
  4. 不考虑解密:MD5,SHA1,SHA3

可以直接使用函数进行:
Base64加密

//base64加密
var username=CryptoJS.enc.Utf8.parse("admin");//先转为UTF-8格式
var base64_username=CryptoJS.enc.Base64.stringify(username);//进行Base64加密
console.log(base64_username);

Base64解密:

//base64解密
var username = CryptoJS.enc.Base64.parse("YWRtaW4=");//进行解密
var utf8_username = username.toString(CryptoJS.enc.Utf8);//转为UTF-8格式
console.log(utf8_username);

MD5加密:

//MD5加密(转换为MD5加密(32位小写),再转为字符串,并将转码后的字符串转换为32位大写)
var MD5_username = CryptoJS.MD5("admin").toString().toUpperCase();
console.log(MD5_username);

这样

//--------------以下为需要加密的内容,可以根据需求定义多个------------------//
var clearText = '{"arg1":"abc","arg2":123,"arg3":4.56}';   //对应{{rsaBody}}的明文
// var clearText = '{"arg1":"def","arg2":123,"arg3":7.89}';

//---------------------------------------------------------------------//
const encrypt_key = '(密钥复制到此处)';
const forge_url = 'https://gitee.com/lzq1357/various/raw/master/forge_min.js';
//forge_min.js来自:https://raw.githubusercontent.com/loveiset/RSAForPostman/master/forge.js
//---------------------------------------------------------------------//

function encryptRsa(encrypt_key, clearText){
    console.info('cleartext: ' + clearText);
    //注意此处上下的BEGIN PRIVATE KEY不要删除,框架自带的
    const public_key = '-----BEGIN PUBLIC KEY-----\n'
            + encrypt_key
            + '\n-----END PUBLIC KEY-----';
    var publicKey = forge.pki.publicKeyFromPem(public_key);
    var buffer = forge.util.createBuffer(clearText, 'utf8');
    var bytes = buffer.getBytes();
    var encryptedText = forge.util.encode64( publicKey.encrypt(bytes, 'RSAES-PKCS1-V1_5', {
            md: forge.md.sha256.create(),
            mgf1: {
                md: forge.md.sha1.create()
            }
        })
    );
    console.info('encryptedText: '+ encryptedText);
    return encryptedText;
};

// 第一次运行时从网络加载forgeJS,会导致请求失败
if(!pm.globals.has('forgeJS')){
    console.log('request forge.js from ' + forge_url);
    pm.sendRequest(forge_url, function (err, res) {
            if (err) {
                console.error(err);
            } else {
                console.info("request forgs.js: Succeed, please try again");
                pm.globals.set('forgeJS', res.text());
            }
        }
    );
}
eval(pm.globals.get('forgeJS'));

//------------------以下内容根据需要修改定义,可以加密多个字段------------------------//
var encryptedText = encryptRsa(encrypt_key, clearText);
postman.setEnvironmentVariable("rsaBody", encryptedText);     //rsaBody对应Body中{{}}

Newman

newman可以让postman的脚本通过非GUI的方式;

  1. 默认不会安装newman 需要使用 npm命令进行安装,需要先安装node,再输入命令:
    npm install -g newman
    进行安装newman命令;
    接着使用:
    npm install -g newman-reporter-html
    进行安装导出报告的库;

运行命令:newman run 运行的json文件
文件需要在postman中进行导出,导出环境变量,导出全局变量;
常用参数

  1. -e引用环境变量
  2. -g引用全局变量
  3. -d 引用数据文件
  4. -m指定测试用例迭代的次数
  5. -r cli,html,json,junit --reporter-html-export name.html


    image.png

    此处如果连着则会生成“:
    生成会生成Newman的文件夹,文件名是):


    image.png

-r html,json --reporter-json-export jsonReport.json --reporter-html-export htmlReport.html
指定生成html的报告

Postman+Newman+Jenkins持续集成

  1. 访问jenkins,创建项目,配置项目信息中选择General勾选使用自定义的工作空间,将postman的目录复制进去:E\postman
  2. 构建,切换到构件中将命令执行输出报告的命令粘贴进去
  3. 新增Execute system Groovy script,(如果没有找到因是你没有安装此插件,搜索安装startup-trigger-plugin和Groovy插件后,我们就可以进行配置了)因为默认你在查看postman的报告样式的时候,部分样式会丢失,配置Groovy脚本样本就不会丢失了配置内容如下:
    System.setProperty("hudson.model.DirectoryBrowserSupport.CSP","")
  4. 选择构建之后的操作步骤选择:publish HTML reports (如果没有则进行安装publish HTML )
    新增
    HTML directory to archive -> ./
    index page[s] ->report.html
    index page title[s] (Optional)-> Postman+Newman接口测试报告
    Report title-> HTMLReport
  5. 执行即可;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容