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