dirtyhand-tester 极简接口录制的后台数据管理
接口测试 极简接口录制工具 这篇文章有一些反馈,看到大佬提到说一些代码生成的事情,
这个也会去做,不过考虑到实际团队需要共享数据的情况,就进行了一个录制共享数据的后台原型。有了后台页面,做代码生成也会更方便一些.
在小公司成本是关键,所以怎么简单怎么来了。
下面是服务端页面的一个例子,还是一样,做这个后台主要是成本不高,实际也就是花了一天时间,当然每个人情况不同,这个需要额外考虑.
大体效果: 基本增删改查 都实现了.
菜单都可以配置实现
基本 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;
}
工作量和效果
- 功能:
- 基本的增删改查都可以,下面是个编辑页面,支持代码高亮和 JSON 等
- 支持不同录制场景的查询
- 工作量:
- 这个 server 框架由于之前了解,所以这个时间我自己没有考虑在里面
- 后台的构建我自己也就今天 1 个下午
- 后续打算
- 和自动化框架做对接,下载的 EXCEL 经过修改之后可以用作接口测试
- 录制场景修改完的数据,可以用来造数据,通过管理后台实现
- 自动化跑的 CASE 进行记录
- 录制的数据和目前所有的 API 清单做一个对比,可以知道那些有接口测试覆盖了
其实按照目前的效果看,后续打算里面的内容都会在这几天里面可以完成一个原型。
不足和说明
目前肯定是比较粗糙的, 主要还是实现成本低,来验证思路是否符合实际情况的使用,是否真的可以提高效率.
也欢迎大家多提意见和建议,有人反馈是最开心的事情.
后台代码在: github
代码量其实真的没有太多夸张,真的很少.
main
├── java
│ └── io
│ └── fluentqa
│ └── server
│ ├── QAWorkspaceApp.java
│ └── recorder
│ ├── handles
│ │ └── SqlTagFetchHandler.java
│ └── model
│ └── ApiMonitorRecord.java
└── resources
├── application-dev.yaml
└── application.yaml
做了这么一些尝试,我想最重要的是尽可能介绍画太多额外的时间进行接口测试:
- 接口测试最好可以业务测试的时候,就可以获取相关的接口请求 - 所以进行场景名的录制
- 不用太去做太多额外的造数据的工作,录制的场景就可以在进行数据修改之后就可以用来造数据
- 不同人的数据是可以方便的在团队内不共享的
- 投入尽可能少的
- .........
可能有还有很多很多, 好处就是能动手了,有目的了,大家就都可以动起手来,如果没用,成本也低,而且最少还能学点东西;如果不要,反正就不用了,也就是几天时间;如果效果不错,那可以再人做漂亮的后台,自己做也可以,就是花时间,但是如果核心是有用的,最少是解决了一些问题。
理念太多有时也不一定解决太多问题,凡事都要能动起手来才行,不能动手有个样子,也不知道具体是个什么东西.