• 0
  • 0
分享

 1.2 如何获取Swagger的内容

上一个小节,我们学习到了什么是Swagger,使用它带来的好处有哪些。如果Swagger只提供了上一节说到的功能,那我们就不会特殊来讲它了。实际上Swagger起初就是一套标准,一套编写接口API文档的规范。既然是规范,就一定有固定的格式,既然有固定的格式,就可以解析它。有的同学可能要问,你为什么非要去解析它呢?在线调式的页面都有了,你还想要什么?我想要接口文档变更后,接口测试相关用例、脚本自动同步更新。

咱们还是一步步来,先不谈接口用例、脚本如何同步更新。说说如何自动化的获取到Swagger文档中的数据。如果Swagger能给我提供一个接口,我去调用它,就可以获取到文档中的所有数据。这些数据原本是展示在前端调式页面的信息,我现在可以直接获取它,那就太方便了。Swagger做到了我们想要的。

调用Swagger数据接口

我们在上一个小节,在8080端口部署了一个服务。我们还是访问8080端口,只是稍稍修改一下后面的路径,增加:/v2/api-docs

```
http://49.232.147.132:8080/v2/api-docs
```

图4.jpg


所有的数据全部以一个庞大的Json返回。下一步我们尝试使用Python的Requests类型调用这个接口。这么大的数据量还是需要脚本来做进一步处理。==关于如何使用Python对接口进行自动化测试,请参考我的《接口测试最佳实践》的第三章==

```
import requests
res = requests.get("http://49.232.147.132:8080/v2/api-docs")
print(res.text)
```


图5.jpg


到这一步结束,我们已经使用Python拿到了所有Swagger数据--Json字符串格式。

弄清楚Swagger的Json返回数据格式

有了数据,就要动手开始解析了。在解析之前要先弄清楚,这个庞大的Json内部的格式。网上有很多Json文档在线解析工具,作用就是把大的Json串重新排列,让大家能看清楚里面结构关系。

我们利用在线工具把Json节点收起,这样就会看的很清晰


图6.jpg


```
{
"swagger":"2.0",
"info":{},
"host":"49.232.147.132:8080",
"basePath":"/",
"tags":[],
"paths":{},
"securityDefinitions":{},
"definitions":{}
}
```

Json中有8个主要键值对

- swagger:swagger版本号

- info:接口服务的项目信息:项目描述、名称、项目版本号等

- host:接口服务的主机名

- basePath:接口服务的起始根路径

- tags:接口服务中所有控制器的名称和描述

- paths:每个接口的详细信息:地址、参数、响应等

- securityDefinitions:接口的认证和授权方式信息

- definitions:每个接口方法中每一个参数的类型说明

下一步,我们要进入几个主要键值对中。看看哪些参数是我们关心的。

tags


```
"tags": [
            {
                "name": "CmsPrefrenceAreaController",
                "description": "商品优选管理"
            },
            {
                "name": "UmsMemberLevelController",
                "description": "会员等级管理"
            },
            {
                "name": "SmsCouponHistoryController",
                "description": "优惠券领取记录管理"
            }...
        ]
```


 paths


```
"paths": {
        "/admin/info": {
            "get": {
                "tags": [
                    "UmsAdminController"
                ],
                "summary": "获取当前登录用户信息",
                "operationId": "getAdminInfoUsingGET",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "*/*"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/CommonResult"
                        }
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "403": {
                        "description": "Forbidden"
                    },
                    "404": {
                        "description": "Not Found"
                    }
                }
            }
        }....
}
```


 definitions


```
"definitions":{
    "OmsUpdateStatusParam": {
            "type": "object",
            "properties": {
                "companyAddressId": {
                    "type": "integer",
                    "format": "int64",
                    "description": "收货地址关联id"
                },
                "handleMan": {
                    "type": "string",
                    "description": "处理人"
                },
                "handleNote": {
                    "type": "string",
                    "description": "处理备注"
                },
                "id": {
                    "type": "integer",
                    "format": "int64",
                    "description": "服务单号"
                },
                "receiveMan": {
                    "type": "string",
                    "description": "收货人"
                },
                "receiveNote": {
                    "type": "string",
                    "description": "收货备注"
                },
                "returnAmount": {
                    "type": "number",
                    "description": "确认退款金额"
                },
                "status": {
                    "type": "integer",
                    "format": "int32",
                    "description": "申请状态:1->退货中;2->已完成;3->已拒绝"
                }
            }
        }....
}
```


  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 今天我们就来浅聊一下什么是接口测试,接口测试又该如何进行呢?一、什么是接口测试?接口测试是一种常见的软件测试方法,用于测试软件系统中不同模块之间的接口。接口是指两个或多个独立软件模块之间进行数据交换的地方。在软件系统中,不同的模块之间相互依赖和交互,这些模块通过接口来实现数据的传递和共享。因此,对于一个软件系统,接口测试是至关重要的,它可以帮助发现接口错误、性能问题、安全漏洞等问题。接口测试的主要目标是检查系统的不同部分之间是否正确地传递数据和调用其他组件。二、接口测试的步骤接口测试没有说有固定的步骤,会根据每个团队的需求产生不同的步骤,但基本步骤大差不差的:1、确定接口确定哪些接口需要测试以...
            0 0 1608
            分享
          •   据报道,OpenAICEO山姆·阿尔特曼(SamAlteman)最近接受媒体采访时表示,他“有点害怕”人工智能技术及其对劳动力、选举和虚假信息传播产生的影响。  最近几个月火遍全球的ChatGPT聊天机器人正是由OpenAI开发的,它能以类似于人类的方式回答问题,从而引发了新一轮人工智能热潮。  “我觉得大家真的从ChatGPT那里获得了乐趣。”阿尔特曼接受采访时说。  他很看好人工智能技术的转型潜力,认为这最终将反映“人类集体的力量、创造力和意志”。  中国科技公司百度最近也举行了发布会,推出了与ChatGPT竞争的文心一言。  谷歌和微软同样在积极参与人工智能竞争。微软选择与OpenA...
            0 0 818
            分享
          • 概念       性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。       简单的来说就是选择适合自己系统业务逻辑的方式,用最低的成本、最快的时间来做出最有价值的事情。分类       根据不同的测试目的,在具体的测试执行中又有所侧重和区分,详细可分为:压力测试、容量测试、极限测试、基准测试压力测试:评估系统处于或超过预期负载时系统的运行情况。压力测试的关注点在于系统在峰值负载或超出最大载荷情况下的处理能力。在压力级别逐渐增...
            15 14 1887
            分享
          • 前言不同类型的软件产品测试的方式和重点不一样,测试流程也会不一样。同样类型的软件产品,不同的公司所制定的测试流程也会不一样。虽然不同软件的详细测试步骤不同,但它们所遵循的最基本的测试流程是一样的。分析测试需求测试人员在制定测试计划之前需要先对软件需求进行分析,以便对要开发的软件产品有一个清晰的认识,从而明确测试对象及测试工作的范围和测试重点。在分析需求时还可以获取一些测试数据,作为测试计划的基本依据,为后续的测试打好基础。此外,分析测试需求也是对软件需求进行测试,以发现软件需求中不合理的地方。被确定的测试需求必须是可核实的,测试需求必须有一个可观察、可评测的结果。无法核实的需求就不是测试需求。...
            0 0 1826
            分享
          •   据英国金融时报报道,日本 TDK 宣布其在小型全固态电池所用材料方面取得突破,预计将显著提升从无线耳机到智能手表等设备的性能。该新材料的能量密度(即特定空间内可存储的能量)达到 1,000 Wh / L,是 TDK 目前量产电池的约 100 倍。  据这家苹果供应商介绍,自 2020 年推出以来,竞争对手们也在推进小型全固态电池的开发,目前已有产品可提供 50 Wh / L 的能量密度,而传统的液体电解质充电式硬币电池的能量密度约为 400 Wh / L。  “我们相信,我们新开发的全固态电池材料能够为社会能源转型做出重大贡献。我们将继续努力,争取早日实现商业化,”TDK 首席执行官 No...
            0 0 585
            分享
      • 51testing软件测试圈微信