背景:

1 常见的接口自动化框架只能覆盖对外接口的测试点,不能覆盖到服务交互异常情况
2 缺少基于微服务的自动化测试框架
3 被测服务涉及到三方服务或其他团队服务,排查问题沟通成本大,其他团队研发不能及时回复会导致问题阻塞

思路:

为解决以上问题,其实只要实现内部交互服务的桩就行,让开发把内部服务的 host 和 port 提取到服务启动配置项,就能实现内部服务 mock 消息;而想要实现自动化首先得在框架入口处启动服务,才能控制服务的依赖关系,接着桩服务可以用 python 的 flask 框架实现 http 服务,用 socket 模块实现 tcp/udp socket 服务。那 python 脚本怎么和这些桩进行通信交互?在桩和 python 建立一个长连接通道即可,只要桩接收到消息直接转发到 python 服务端,python 服务端想 mock 数据返回通过通道进行消息包的发送,装服务接到消息包再转成可处理的协议返回即可,整体思路看下图。

桩框架实现:

httpServerStub.py
http 服务桩模块,主要管理桩服务实例化 socket 客户端的方法以及基于 flask 框架的应用。

httpServerOperate.py
http 桩操作模块,操作方法包括 “桩 socket 客户端的启动”、“http 桩初始化”、“桩下线”、“桩 mock 消息接收”、“桩 mock 消息返回”

HttpCommon.py
支持 http 协议请求时的多线程等待

threadCount.py
校验桩服务启动的正确性

main.py
在框架执行入口定义桩启动方法、服务启动、服务启动校验、用例执行、桩下线、服务下线

测试用例:

用例序号 用例标题 操作步骤 期望结果
1 三方服务返回正常时 请求被测服务文档编辑接口,三方服务接到请求返回 200 状态码和文档数据 被测服务返回 200 状态码
2 三方服务返回异常状态码 请求被测服务文档编辑接口,三方服务接到请求返回 403 状态码和文档数据 被测服务返回 500 状态码
3 三方服务返回数据超时 请求被测服务文档编辑接口,三方服务接到请求等待 5s 后再返回结果 被测服务返回 504 状态码

用例脚本:

用例 2

用例 3

框架支持的能力:

框架待办事项:

总结:

如果想实现其他协议比方说 socket、grpc,会比 http 桩更容易实现,http 没法把请求和返回独立开,而 socket 协议可以单独控制消息的 send 和 receive。不过服务端测试的核心还是测试用例,尽可能的场景覆盖,自动化的手段只是提高工作效率,晚点我也会更新服务端的测试策略。


↙↙↙阅读原文可查看相关链接,并与作者交流