• PostMan 测试


    前言:

         用的ruo-yi框架测试。

         自己上前端F12查看想要测试接口的请求参数,这里不提供,只提供步骤。

    目录

    创建集合管理测试接口

    获取验证码

    登录 

    token获取

    API 响应数据断言  

    设置全局断言函数

    API请求头Token添加

    断言脚本编写

    测试

    API DB数据断言

             xmysql的安装及使用

    断言脚本编写

    测试

    Eorr code 一览  

    Mock Server 

    创建Mock集合

    创建response 例子

    创建Mock地址变量

    测试Mock


    创建集合管理测试接口

     接口顺序:     

          获取验证码:  获取加密的验证码。

          登录:获取token

          测试三个api断言

     获取验证码

    因为请求的验证码是加密后的uuid ,需要到redis下解密才可以,测试太麻烦,注释掉。

     

     找到代码注释就可以

    登录 

    token获取

    了解两个知识,你创建完api接口,会发现有这俩东西Tests,Pre-request Script

    Tests  :后置脚本    Api 请求后的操作,一般写断言脚本的地方

    Pre-request Script  :后置脚本     请求前的操作

    以下代码放进Tests 后置脚本当中。

    1. var respObj = JSON.parse(responseBody);
    2. // 获取到TOKEN,保存到环境变量中
    3. postman.setEnvironmentVariable("token", respObj.token);

    API 响应数据断言  

      

    设置全局断言函数

    这里写一个response的断言函数。为了方便测试,减少很多重复代码

    创建一个全局函数myGlobalFunction 变量  ,把下面代码放到变量中

    递归断言函数

    1. var deepCompare = (actual, expected, path = '') => {
    2. for (let key in expected) {
    3. let fullPath = path ? `${path}.${key}` : key;
    4. if (!actual.hasOwnProperty(key)) {
    5. tests[`${fullPath}:actualData中不存在此字段`] = false ;
    6. }
    7. if (actual.hasOwnProperty(key)) {
    8. if (typeof expected[key] === 'object' && expected[key] !== null) {
    9. if (typeof actual[key] === 'object' && actual[key] !== null) {
    10. deepCompare(actual[key], expected[key], fullPath);
    11. } else {
    12. pm.test(`Field ${fullPath} has the expected type`, function () {
    13. pm.expect(actual[key]).to.be.an('object');
    14. });
    15. }
    16. } else {
    17. if (actual[key] !== expected[key]) {
    18. tests[`${fullPath}:actual:${actual[key]} , expected:${expected[key]}`] =actual[key]===expected[key];
    19. }
    20. }
    21. }
    22. }
    23. }

      API请求头Token添加

    在你想要测试的api请求头中的Authorization 变量 上添加{{token}}环境变量

     好处是,调用token获取api后,不用手动粘贴过来

    断言脚本编写

      以下代码添加到tests后置脚本中

      准备以下三步

       // 准备预想数据

       // 获取实际数据

       // 调用编写好的全局函数测试断言(复杂的另写脚本)

    1. // 预期的 Response 数据
    2. const expectedData = {
    3. "msg": "操作成功",
    4. "code": 200,
    5. "data": {
    6. "createBy": "admin",
    7. "createTime": "2024-05-06 13:27:03",
    8. "updateBy": null,
    9. "updateTime": null,
    10. "remark": "",
    11. "postId": 11,
    12. "postCode": "ceo1",
    13. "postName": "董事长1",
    14. "postSort": 1,
    15. "status": "0",
    16. "flag": false,
    17. "test": false
    18. }
    19. };
    20. // 实际的 JSON 数据
    21. const actualData = pm.response.json();
    22. // response断言对比
    23. // 调用全局函数并传递参数
    24. eval(pm.globals.get('myGlobalFunction'))
    25. deepCompare(actualData, expectedData);

    测试

    可以清晰看到哪个字段错误,预想和实际值的比对结果。

    这里只出力错误的。

    API DB数据断言

    因为Postman本身并没有提供数据库的查询功能,这时就可以利用Xmysql来实现

    Postman的辅助工具Xmysql的主要作用是将数据库的表数据转换成Restful API接口,返回JSON格式的结果数据。在接口测试过程中,有时需要通过查询数据库数据来判断接口执行的结果是否正确,以校验数据的准确性。

      xmysql的安装及使用

    用 Postman 做接口自动化(十四)xmysql 辅助操作 mysql 数据库(一)_postman自动化打开数据库-CSDN博客  

    断言脚本编写

    现在你要测试一个更新db的api更新完db,你要检查我的数据是否已经更新成功了

    跟api一样的三步骤:

    1 提前把数据库字段数据作成json数据用作预想数据。

    2 利用xmysql  从数据库中检索到你更新的那条数据,用作实际数据

    3 对比

    1. // 预期的 Response 数据
    2. const expectedData = [{
    3. "user_id": 1,
    4. "dept_id": 103,
    5. "user_name": "admin",
    6. "nick_name": "若依",
    7. "user_type": "00",
    8. "email": "ry@163.com",
    9. "phonenumber": "15888888888",
    10. "sex": "1",
    11. "avatar": "",
    12. "password": "$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2",
    13. "status": "0",
    14. "del_flag": "0",
    15. "login_ip": "127.0.0.1",
    16. "login_date": "2024-05-15T05:06:54.000Z",
    17. "create_by": "admin",
    18. "create_time": "2024-05-06T05:27:02.000Z",
    19. "update_by": "12",
    20. "update_time": "2024-05-15T05:06:53.000Z",
    21. "remark": "管理员1"
    22. }];
    23. // 实际的 JSON 数据
    24. const actualData = pm.response.json();
    25. // 断言对比
    26. // 调用全局函数并传递参数
    27. eval(pm.globals.get('myGlobalFunction'))
    28. deepCompare(actualData, expectedData);

     response Body:跟预想值对比下就好,没啥用处

     

    测试

    问题:

       按理来说只有remark字段不对 

       updateTime   这种时间没办法用作断言比对

       在预想的时候去掉。。。// 待定

    Eorr code 一览  

    error_code: 常见HTTP请求和响应错误码大全 The definition of errno and errmsg

    Mock Server 

    创建Mock集合

    在你的接口集合中,创建一个Mock集合 

    注意:不同接口集合的Mock集合是不同的,需要另行创建。

     

     填写名字后,创建 

     获取一个Mock服务器地址:

    https://xxxxxxxxxxxxxxxxxxxx.mock.pstmn.io

     

    创建response 例子

     设置完后,点击save保存例子

    创建Mock地址变量

    把上面的Mock地址放到base_url变量中。

    下面代码放到前置脚本中运行,方便测试调试

    1. // postman.setEnvironmentVariable("base_url", 'localhost:8080');
    2. postman.setEnvironmentVariable("base_url", 'xxxxxxxxxxmock.pstmn.io');

    测试Mock

     

  • 相关阅读:
    万得凯通过注册:年营收7.5亿 为钟兴富及其连襟家族企业
    数据结构HW1
    HTML5网页设计制作基础大二dreamweaver作业、使用HTML+CSS技术制作博客网站(5个页面)
    Hbase系统架构及数据结构
    【算法训练营】 - ⑨ 贪心算法
    web前端——简单的网页布局案列
    在Windos 10专业版搭建Fyne(Go 跨平台GUI)开发环境
    C++:AVL树
    【微服务】分布式基础概念
    jQuery学习:自定义动画animate
  • 原文地址:https://blog.csdn.net/weixin_44390064/article/details/138904942