专栏文章 极简接口录制的后台数据管理

simonpatrick · 2023年05月06日 · 最后由 simonpatrick 回复于 2023年05月06日 · 8177 次阅读

接口测试 极简接口录制工具 这篇文章有一些反馈,看到大佬提到说一些代码生成的事情,
这个也会去做,不过考虑到实际团队需要共享数据的情况,就进行了一个录制共享数据的后台原型。有了后台页面,做代码生成也会更方便一些.

在小公司成本是关键,所以怎么简单怎么来了。

下面是服务端页面的一个例子,还是一样,做这个后台主要是成本不高,实际也就是花了一天时间,当然每个人情况不同,这个需要额外考虑.

大体效果: 基本增删改查 都实现了.

  • 菜单都可以配置实现

  • 基本 CRUD 也都可以完成

目前数据已经记录下来了,服务端也可以保存了,那么这个数据可以共享了. 通过下载功能可以把所有的录制场景下的请求和返回数据通过 excel 下载.

后续的修改和代码生成就是通过这个 excel 来进行了. 也可以只进行数据修改就可以,通过接口直接运行.

实现这样一个后台,其实就定义了一个实体

实现这样一个后台,其实就定义了一个实体,然后运行通过 Springboot 运行就可以,启动后相应的菜单都可以配置,
这个会在后面在详细介绍下,目前先把录制数据/下载说完了.

@Data
public class ApiMonitorRecord extends MetaModel {

    @EruptField(
            views = @View(title = "app"),
            edit = @Edit(
                    title = "app应用名",
                    type = EditType.TAGS, search = @Search(vague = true), notNull = true,
                    tagsType = @TagsType(
                            fetchHandler = SqlTagFetchHandler.class,
                            fetchHandlerParams = "select distinct app from api_monitor_record"
                    )
            ))
    private String app;
    @EruptField(
            views = @View(title = "场景名称"),
            edit = @Edit(title = "场景名称",
                    type = EditType.TAGS, search = @Search(vague = true), notNull = true,
                    tagsType = @TagsType(
                            fetchHandler = SqlTagFetchHandler.class,
                            fetchHandlerParams = "select distinct scenario_name from api_monitor_record"
                    )
            ))
    private String scenarioName;
    @EruptField(
            views = @View(title = "请求地址"),
            edit = @Edit(title = "请求地址", notNull = true, search = @Search)
    )
    private String requestUrl;

    @EruptField(
            views = @View(title = "服务"),
            edit = @Edit(
                    title = "服务",
                    type = EditType.TAGS, search = @Search(vague = true), notNull = true,
                    tagsType = @TagsType(
                            fetchHandler = SqlTagFetchHandler.class,
                            fetchHandlerParams = "select distinct service from api_monitor_record"
                    )
            )
    )

    private String service;
    @EruptField(
            views = @View(title = "接口API"),
            edit = @Edit(title = "接口API", notNull = true, search = @Search)
    )
    private String api;

    @EruptField(
            views = @View(title = "请求路径"),
            edit = @Edit(title = "请求路径", notNull = true, search = @Search)
    )
    private String path;

    @EruptField(
            views = @View(title = "请求头"),
            edit = @Edit(title = "请求头", type = EditType.CODE_EDITOR, codeEditType = @CodeEditorType(language = "json"))
    )
    private String requestHeaders;

    @EruptField(
            views = @View(title = "方法"),
            edit = @Edit(title = "方法", notNull = true, search = @Search)
    )
    private String method;

    @EruptField(
            views = @View(title = "请求报文", type = ViewType.CODE),
            edit = @Edit(title = "请求报文", type = EditType.CODE_EDITOR,
                    codeEditType = @CodeEditorType(language = "json"))
    )
    private String requestBody;

    @EruptField(
            views = @View(title = "response_headers"),
            edit = @Edit(title = "responseHeaders", type = EditType.CODE_EDITOR,
                    codeEditType = @CodeEditorType(language = "json"))
    )
    private String responseHeaders;

    @EruptField(
            views = @View(title = "status_code"),
            edit = @Edit(title = "status_code", notNull = true, search = @Search)
    )
    private int statusCode;

    @EruptField(
            views = @View(title = "返回报文", type = ViewType.CODE),
            edit = @Edit(title = "返回报文", type = EditType.CODE_EDITOR,
                    codeEditType = @CodeEditorType(language = "json"))
    )
    private String responseBody;


}

工作量和效果

  • 功能:
    1. 基本的增删改查都可以,下面是个编辑页面,支持代码高亮和 JSON 等
  1. 支持不同录制场景的查询
    • 工作量:
  2. 这个 server 框架由于之前了解,所以这个时间我自己没有考虑在里面
  3. 后台的构建我自己也就今天 1 个下午
    • 后续打算
  4. 和自动化框架做对接,下载的 EXCEL 经过修改之后可以用作接口测试
  5. 录制场景修改完的数据,可以用来造数据,通过管理后台实现
  6. 自动化跑的 CASE 进行记录
  7. 录制的数据和目前所有的 API 清单做一个对比,可以知道那些有接口测试覆盖了

其实按照目前的效果看,后续打算里面的内容都会在这几天里面可以完成一个原型。

不足和说明

目前肯定是比较粗糙的, 主要还是实现成本低,来验证思路是否符合实际情况的使用,是否真的可以提高效率.
也欢迎大家多提意见和建议,有人反馈是最开心的事情.

后台代码在: github
代码量其实真的没有太多夸张,真的很少.

main
├── java
│   └── io
│       └── fluentqa
│           └── server
│               ├── QAWorkspaceApp.java
│               └── recorder
│                   ├── handles
│                   │   └── SqlTagFetchHandler.java
│                   └── model
│                       └── ApiMonitorRecord.java
└── resources
    ├── application-dev.yaml
    └── application.yaml

做了这么一些尝试,我想最重要的是尽可能介绍画太多额外的时间进行接口测试:

  1. 接口测试最好可以业务测试的时候,就可以获取相关的接口请求 - 所以进行场景名的录制
  2. 不用太去做太多额外的造数据的工作,录制的场景就可以在进行数据修改之后就可以用来造数据
  3. 不同人的数据是可以方便的在团队内不共享的
  4. 投入尽可能少的
  5. .........

可能有还有很多很多, 好处就是能动手了,有目的了,大家就都可以动起手来,如果没用,成本也低,而且最少还能学点东西;如果不要,反正就不用了,也就是几天时间;如果效果不错,那可以再人做漂亮的后台,自己做也可以,就是花时间,但是如果核心是有用的,最少是解决了一些问题。
理念太多有时也不一定解决太多问题,凡事都要能动起手来才行,不能动手有个样子,也不知道具体是个什么东西.

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
最佳回复

第一次知道这么高效的管理后台界面生成工具 https://www.erupt.xyz/#!/ ,受教了。以后快速开发新程序可以用起来😉

共收到 2 条回复 时间 点赞

第一次知道这么高效的管理后台界面生成工具 https://www.erupt.xyz/#!/ ,受教了。以后快速开发新程序可以用起来😉

陈恒捷 回复

还是很好用的,效率很高,尤其对后端熟悉的同学友好

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册