Mock数据的两个简单方法:Python or 工具

     在测试过程中,少不了各种情况下的数据的模拟。正常情况下可以通过流程的进行来测试,但有些时候正常流程却无法得到想要的数据,(比如一个接口异常信息的前端展示,正常情况下这种异常不会出现,测试时又不好复现异常场景),这时就需要我们自己来“伪造”一些我们想要的内容了。

一、Mock的定义

先来看下什么叫做Mock,下面是维基百科中的定义:

在面向对象程序设计中,模拟对象(英语:mock object,也译作模仿对象)是以可控的方式模拟真实对象行为的假的对象。程序员通常创造模拟对象来测试其他对象的行为,很类似汽车设计者使用碰撞测试假人来模拟车辆碰撞中人的动态行为。

通俗来讲,就是使用技术手段来创建出一份“虚假数据”

二、使用Python + Charles来实现

首先来看下怎样通过Python来实现。python现成的可以实现服务端的框架比较出名的有Django、flask等,但对于我们来说这些框架都有些过重了。就拿Django来说,如果我想实现一个接口,我需要创建项目—创建app—编写views代码—配置url路由地址—配置setting等一系列操作。所以综合考虑下来,决定使用一个小型的框架:FastApi ✰✰✰官方文档地址✰✰✰

1. 安装fastapi

要使用fastapi,需要安装两个包

pip install fastapi
pip install uvicorn

2. 示例Demo实现

官方文档中实现一个接口的示例代码:

from fastapi import FastAPI

app = FastAPI()

@app.get("/") 
async def root():	# 这里用到了协程,也可以使用普通函数
	return {"message":"success"}

在控制台中运行代码:

uvicorn fastapidemo:app --reload

其中fastapidemo是这个示例代码文件的名字,app是实例化的对象。如果没有其他问题的话,在控制台中可以看到如下内容
服务启动成功
此时在浏览器中访问 http://127.0.0.1:8000 即可看到返回的结果(因为@app.get("/")中没有配置其他路由地址,所以直接访问http://127.0.0.1:8000)
这只是最基本的一个接口,几行代码就可搞定了,接下来看看具体如何实现mock数据

3. 实际应用

首先说明下要实现的功能吧!这次举例用的是一个登录接口,入参为姓名(不做校验)、手机号、验证码,因为每次登录测试都需要发送手机短信验证码,比较麻烦。所以我就想要实现绕过验证码的校验,输入任意验证码都返回成功(因为是一个公司内部使用的接口,所以安全校验方面没做太多拦截,要想绕过验证码也可以使用其他方法。这里使用这个接口举例只是因为比较简单。。。。)

  1. 首先要确定标准数据返回的json的结构,可以正常请求一次接口,拿到这个数据。类似这种格式:
{
	"success": true,
	"message": "success",
	"code": "200",
	"data": {
		"userId": 2085,
		"token": "wer23fAiOiJKV1QiLCJhbGcixxx"
	}
}
  1. 编写一个简单的接口,retrun回想要的标准结果
from fastapi import FastAPI

app = FastAPI()

@app.post("/")
async def login(phone:str, code:str, userName:str):
    return {
	"success": True,
	"message": "success",
	"code": "200",
	"data": {
		"userId": 2085,
		"token": "werWEUV1QiLCJhbGciOiJIU"
	}
}

这里需要注意的是login()方法的三个参数,这时需要在url中传入的,如:http://127.0.0.1:8000/?phone=13428888888&code=111111&userName=zhangsan,这里的传参方式是通过url来实现的,也可以使用json传参,使用json的话就需要使用BaseModel包来实现,具体的方法可以查阅fastapi的官方文档。
3. 通过Charles实现代理转发

  • 在charles想要转发的请求上右键单机,选择Map remote

    在这里插入图片描述

    • 在弹窗中,修改到刚才python中的地址 在这里插入图片描述
    • 点击确定后,在浏览器端正常访问登录地址,输入用户名、手机号以及任意验证码(严格来说也不能说是任意验证码,因为需要和charles的map
      remote中的Query中相对应,也就是http://127.0.0.1:8000/?phone=13428888888&code=111111&userName=zhangsan中的code)
    • 之后就可以绕过验证码的拦截成功登录,同时在python的控制台中也看到访问的log了
      在这里插入图片描述

三、使用Mock工具来实现

  1. 我这次使用的工具是Mockoon
    在这里插入图片描述
    使用方式比较简单,我就不多做介绍了,唯一需要注意的是要在设置页面(点击右上角小齿轮按钮)中勾选中 “Enable”
    在这里插入图片描述
  2. 之后的仍然是在charles中按照同样方法进行map remote的配置,略过了。。。

四、其他

是使用代码还是工具来实现,完全看个人爱好了,其他实现方式例如python的一个单独的mock库,工具中的easy-mock、Yapi等等等等,本文只能算是浅尝辄止,之后可以继续深挖一下更方便测试工作的展开。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值