一、概述
1.1 背景介绍
作为测试应该都遇到过如下两大痛点:
1.只想测试被测系统A,却需要从依赖系统开始一层层造自己想要的测试数据,造数花费时间长,边界值及异常场景不好模拟。
2.接口自动化,UI自动化,埋点自动化因为服务或者测试数据的不稳定性导致自动化维护成本高。
要解决上述问题,基本都会想到mock。目前市面上有很多优秀的开源mock框架:Mockito、PowerMock、EasyMock、JMockit等,但这些框架对于我们现在的业务场景及主要是在集成测试过程中使用,显然不是我们想要的。因为我们希望在不改动开发代码的情况下支持随心所欲的构造mock接口的返回报文来测试不同的业务场景,基于这种外部依赖服务走http形式的技术架构,一套无侵入式的mock平台应运而生。
hulk是一个无侵入式的http mock平台,支持客户端代理,从网关层mock,支持后端服务之间的mock。支持返回报文函数配置,并且具备放行逻辑。未来还将支持filter,根据不同的入参返回不同的mock数据。
1.2 系统架构
基于Django + mitmproxy + vue + MongoDB + MySQL
目前整个技术架构比较简单,mock服务基于Django框架开发,代理层主要是在开源框架mitmproxy基础上做了二次开发打通和mock系统的交互,前端配置平台使用了公司的脚手架poizon-cli。数据存储主要用了MongoDB和MySQL,提高性能后续会考虑引入redis,将配置信息缓存到redis中降低接口响应时间。

1.2.1 服务端mock时序图

1.2.2 客户端mock时序图

二、mock服务
2.1 部署及性能
通过Nginx + Uwsgi + Django部署,支持高并发。
可以直接通过测试组jenkins构建部署。
部署脚本:
# 服务器项目地址
# shellcheck disable=SC2164
cd /home/dhk/workspace/hulk
python37 -m venv venv # 生成虚拟环境
source venv/bin/activate # 启动虚拟环境
python37 -m pip install --upgrade pip # 升级pip
python37 -m pip install -r requirements.txt # 安装依赖库
# shellcheck disable=SC2164
cd /home/dhk/workspace/hulk/hulk #进到uwsgi.ini目录
# shellcheck disable=SC2006
# shellcheck disable=SC2009
# 获取uwsgi父进程
pid=`ps -ef | grep "uwsgi" | grep -v grep | awk '{print $2}' | awk 'NR==1{print}'`
if [ -n "$pid" ]
then
uwsgi --reload uwsgi.pid
else
uwsgi --ini uwsgi.ini
fi
性能:在4C8G的机器上的单机性能指标

2.2 框架设计原理
mock服务可以理解为一个类似于业务系统的应用,可以请求该服务的接口地址并返回对应的报文。并提供了前端配置功能,支持配置自定义的mock接口信息及放行接口对应的业务系统host映射关系。想要设计成一个支持动态接收自定义接口路径的mock服务,需要先了解Django处理请求的原理及路由配置。
2.2.1 Django 如何处理一个请求
先看一下Django框架处理请求的原理,熟悉该原理后,可以很好地利用这点来设计成一个mock服务所需要的支持自定义路由的功能。感兴趣的可以参照官方文档。
当一个用户请求Django 站点的一个页面,下面是Django 系统决定执行哪个Python 代码使用的算法

本文介绍了Hulk,一个无侵入式的HTTP Mock平台,旨在解决测试中依赖系统和自动化维护成本高的问题。Hulk基于Django、mitmproxy、Vue和MongoDB等技术构建,支持动态配置Mock接口返回报文,实现客户端和服务器端的Mock。文章详细阐述了系统架构、Mock服务的部署、性能、设计原理,以及如何配置和使用Mock服务。此外,还讨论了实际的社区实践案例,展示了Hulk在提升测试效率方面的价值。
最低0.47元/天 解锁文章
558

被折叠的 条评论
为什么被折叠?



