为了测试重构接口,我开发了接口测试比对工具

顾名思义,该工具用于测试接口并比对两个接口返回的响应。开发这个工具的目的很简单,就是为了提供测试效率。

背景

由于服务重构,上百个接口的逻辑均需要进行测试。

分析

问题1:测试效率低

在刚开始使用postman验证了20-30个接口后,发现效率很低下。流程大致这样的:

  • 按照测试用例测试接口,在postman中,我创建了两个环境,如图:test环境和refactor-test,在这两个环境中分别设置变量以及变量值
  • 在请求中使用变量信息,在接口发生调用时,postman会使用使用环境中的变量值替换变量。分别在test环境和refactor-test环境发起接口调用,就能获取到新旧接口的响应
  • 将每次请求的响应分别粘贴到比对工具中,进行结果比对。

有没有发现一个问题:每次我均需要分别获取两个接口的响应,然后再分别粘贴到比对工具中比对。如果就几条测试用例还好,但是涉及的接口很多,几百条的测试用例,如果还是通过该方式去测试的话,效率就很低下了。

问题2:提单效率低

在发现接口bug之后,我们提单时还需要分别提供新旧服务接口的请求信息,必要时还需要粘贴测试时接口返回的响应信息。所以提bug时大概是这样的流程:

  • 创建jira单
  • postman中分别切换到test环境和refactor-test环境,生成curl请求,并粘贴到jira中
  • 还需要粘贴每个响应的响应头信息到jira中

每次发现问题还要粘贴比较多的信息(天天cc+cv,键盘顶不住,哈哈),效率也不高。

PS: 我们在测试环境执行完测试用例之后,在上线之前还要进行多次引流操作,在必要的情况下,还会手动造一些边界流量。将其他环境的流量在test环境进行回放,也会将不写db操作的接口的流量在live-test环境进行回放。

我们使用GoReplay进行流量回放,为了提供效率,我也写了一个流量回放平台,用于配置回放规则、比对流量,记录差异流量等。有兴趣的话,我后续将分享该平台的实现。

解决方案及开发

回归本次分享,为了提高手动测试接口的效率,我干脆造了个轮子,花了2-3天时间写了一个接口比对工具。使用Vue开发前端,Django开发后端。

该工具主要包含以下功能:

  1. 设置公共变量
  2. 配置新旧接口的请求信息
  3. 发起请求&&展示两者返回的响应
  4. 支持对响应信息提取
  5. 比对响应
  6. 支持分享本次请求信息并生成一个链接, 将链接粘贴到jira单极客,可以大大减少提单时手动粘贴大部分信息。

1.设置公共变量

设置公共变量的目的是同一组接口需要验证多种场景,我只需要将左边的请求信息和右边的请求信息配置好即可。如果想要测试其他场景,只需要将公共变量设置为其他值就行。

2.配置接口的请求信息

直接根据postman进行描绘。接口处理功能相对比较完善。目前除了暂不支持文件上传之外,其他场景均能支持。

3.发起请求&&展示两者返回的响应

左右两边的请求信息填写完毕,点击发送请求,前端会使用配置的公共变量将请求信息中设置的变量进行替换。替换完成后,将请求提交给后端服务器【一个代理服务器,主要是根据前端提供的请求参数,使用requests发起请求,再将响应返回给前端。】。

可能会有人问为什么不直接通过前端调用新旧接口呢?

这里就涉及到了跨域问题,如果请求接口的服务器不支持跨域访问的话,那么前端的调用接口将无法成功。我最初打算用前端axios发起接口调用,但是存在跨域问题。

发现存在跨域问题之后,我想了两个解决方案:

  • 第一种:使用代理服务器。代理服务器可以作为前端应用和后端服务器之间的中间层,处理所有的跨域请求。这样我只需要代理服务器上设置CORS策略,就能通过代理服务器调用所有后端服务器了。
  • 第二种:本地代理方式。通过开发Chrome插件进行实现。

由于对Chrome插件不太熟悉,有一定的上手成本,我选择了方案1。

4.响应信息提取与响应比对

我或许有人有疑问:为什么不直接对新旧接口返回的响应进行比对,还需要增加响应信息提取功能呢?

我的考虑是这样的:在发现新旧接口返回的响应有差异之后,我们能够得出接口不符合预期。但如果我想结合用例和响应信息来排查是什么原因导致的话,且响应内容较长,不容易从响应信息中进行分析。

添加响应信息提取功能,可以对接口响应信息进行统计,比如说统计某个列表的数量,过滤某个列表的字段大于100的元素等等。这些可以使用JS的map,filter等常用函数来实现。 响应比对使用了v-code-diff插件,能够更直观的看到响应是哪部分内容不一致。

5.支持将请求信息与响应信息生成链接并分享

做这个功能的目的是我想在提bug单时能够减少一些信息的填写,又能保证开发知道必要的信息。

如果发现接口测试不通过,测试人员能点击分享,那么本次的生成的请求信息以及响应就被保存到db中,同时生成一个链接。

在提单时将链接放到单子上即可,开发能够通过这个链接查看当时测试时的请求信息以及响应信息。

相关推荐
百万蹄蹄向前冲2 小时前
2024不一样的VUE3期末考查
前端·javascript·程序员
永恒,怎么可能3 小时前
关于博客系统的自动化功能测试报告
自动化·测试
陈哥聊测试1 天前
软件格局在变,谁能扛起国产替代的大旗?
安全·程序员·产品
黄油饼卷咖喱鸡就味增汤拌孜然羊肉炒饭2 天前
SpringBoot如何实现缓存预热?
java·spring boot·spring·缓存·程序员
少年姜太公2 天前
从零开始详解js中的this(下)
前端·javascript·程序员
凌虚2 天前
Kubernetes APF(API 优先级和公平调度)简介
后端·程序员·kubernetes
小华同学ai2 天前
ShowDoc:Star12.3k,福利项目,个人小团队的在线文档“简单、易用、轻量化”还专门针对API文档、技术文档做了优化
前端·程序员·github
小青鱼4 天前
AI编程-Cursor从入门到精通系列之常用概念及解释(二)
人工智能·程序员
捡田螺的小男孩5 天前
参数校验的十个建议!收藏好,别再给测试机会提bug~
java·后端·程序员
哔哩哔哩技术5 天前
B站装机系统实践:从初创到规模化的演进
前端·程序员