Mock技术分享
Mock技术介绍
1、什么是mokc技术?
- 在软件测试过程中,对于一些不容易构造,获取的对象,用一个虚拟的对象来替代他它,已达到相同的效果,这个虚拟的对象就是Mock
- 在前后端分离的项目中,当后端工程师还没有完成接口的时候,前端开发可以利用Mock技术,调取一个虚拟的接口,模拟接口返回的数据,来完成前端页面的开发
- 其实,接口测试和前端开发有一个共同点,就是都需要用到后端工程师提供的接口。所以,当我们做接口测试的时候,如果后端某些接口还不成熟、所依赖的接口不稳定或者所依赖的接口为第三方接口、构造依赖的接口数据太复杂等问题时,我们可以用mock的方式先虚拟这些接口返回来代替。提高工作效率
2、mock技术(测试桩/挡板)使用场景?
- 后端某些接口还不成熟、不稳定、响应 时间特别长、数据太复杂;
- 后端某些功能没有实现,自动化测试的脚本需要提前开发与调试。
- 如果项目接口里有很多第三方接口,调用关系比较复杂,耗时比较长;
- 某些接口没有搞定的情况下,后续又是重点,可以使用mock绕过去!
3、实现mock方案
-
自己开发一个后端,使用django flask,这个对于一般的测试人员有很大的挑战。
2、使用一些框架,例如 mock 减轻测试人员的开发的成本。
3、 moco介绍 -
实现mock的技术很多,这些技术中,可以分为两类,
mock数据和mock服务:- mock数据:即 mock, 一个对象,写入一些预期的值,通过它进行自己想要的测试。
常见的有:EasyMock、Mockito 、WireMock、JMockit。主要适用于单元测试。 - mock 服务:即mock, 一个 sever,构造一个依赖的服务并给予他预期的服务返回值,适用范围广,更加适合集成测试。如 moco框架。
mock是类似一个 mock 的工具框架,一个简单搭建模拟服务器的程序库/工具,下载就是一个JAR包。有如下特点:
1、只需要简单的配置 request、response 等即可满足要求;
2、支持 http、https、socket 协议,可以说是非常的灵活性;
3、支持在 request 中设置 Headers , Cookies ,StatusCode 等;
4、对 GET、POST、PUT、DELETE 等请求方式都支持;
5、无需环境配置,有 Java 环境即可;
6、修改配置后,立刻生效。只需要维护接口,也就是契约即可;
7、支持多种数据格式,如 JSON、Text、XML、File 等;
8、可与其他工具集成,如 Junit、Maven等。
- mock数据:即 mock, 一个对象,写入一些预期的值,通过它进行自己想要的测试。
4、总结
- Moco还可以通过在json文件中添加cookies、header、重定向这些参数,来模拟各种情况下的请求和返回值,可以根据自己工作的需求去对这些东西进行了解。
- Moco是热更新的,所以启动了jar包的服务之后,即使修改了json文件中的内容,也不需要重启服务就生效。
- 掌握了mock测试的技术,可以让我们在开发没有完成对应接口的时候,有接口文档就提前进入到测试状态,是现在敏捷模式下不可或缺的技术,也是持续集成中一个重要的组成部分。
实战:
将mock包放在项目根目录下:
mocojar官网下载:
https://repo1.maven.org/maven2/com/github/dreamhead/moco-runner/0.10.0/
链接:https://pan.baidu.com/s/1rbpgOy2kfj_e5TL6MgjvoQ
提取码:2q2i
启动文件配置 9999定义端口 启动对应的json文件
启动.bat文件
order_shop.json文件 模拟配置接口数据
import requests
import time
HOST = 'http://127.0.0.1:9999'
def create_order(inData):
url = f'{HOST}/api/order/create/'
payload = inData
resp = requests.post(url,json=payload)
return resp.json()
if __name__ == '__main__':
# startTime = time.time()#所有接口运行的开始时间
#测试数据
testData = {
"user_id": "123456",
"goods_id": "20200815",
"num": 1,
"amount": 200.6
}
print(create_order(testData))
嗨~今天你暴躁了吗?
~~~关注我,更多精彩内容带给你,关注私聊带走绝密知识~~~