用到的两个接口
1.登录接口,返回用户信息,其中有个role字段,1表示普通用户,0表示管理员
2.添加商品接口,返回添加是否成功信息。
接口信息如下:
[
{
"request":{
"uri":"/login",
"method":"post",
"json":{
"name":"darl",
"age":"18"
}
},
"response":{
"json": {
"code": "0",
"msg": "操作成功",
"data": {
"role": "1",
"name": "darl",
"age" : "18"
}
}
}
},
{
"request": {
"uri": "/addError",
"method": "post",
"json": {
"role": "1",
"product": "fruit"
}
},
"response": {
"json": {
"code": "1",
"msg": "您不是管理员无权进行此操作",
"data": {
"status": "error",
"role": "1",
"product": "fruit"
}
}
}
},
{
"request": {
"uri": "/addSuccess",
"method": "post",
"json": {
"role": "0",
"product": "fruit"
}
},
"response": {
"json": {
"code": "0",
"msg": "操作成功",
"data": {
"status": "success",
"role": "0",
"product": "fruit"
}
}
}
}
]
python代码如下:
'''
fiddler mock
'''
from unittest import mock
import requests
import unittest
import json
def post_request(url,data):
res = requests.post(url,data=data).json()
return res
#添加商品信息
def addProduct(role,product):
#如果是管理员
if(role == "0"):
print("这是管理员")
success_url = 'http://127.0.0.1:8081/addSuccess'
data = {
"role":"0",
"product":product
}
res = post_request(success_url,json.dumps(data,ensure_ascii=False))
else:
print("这是普通用户")
error_url = 'http://127.0.0.1:8081/addError'
data = {
"role":"1",
"product":product
}
res = post_request(error_url,json.dumps(data,ensure_ascii=False))
return res
if(__name__ == '__main__'):
post_url = 'http://127.0.0.1:8081/login'
data = {
"name":"darl",
"age":"18"
}
print(type(data))
#json.dumps()----------dict->json
res = post_request(post_url,json.dumps(data,ensure_ascii=False))
print(res)
print(type(res))
#获取返回结果的role---res是字典类型
role = res["data"]["role"]
print(role)
res1 = addProduct(role,"fruit")
print(res1)
由于login接口返回role=1,所以商品将一直不能添加成功,fiddler抓包如下:
下面想要实现的效果是利用fiddler修改login接口的返回数据role=0,然后访问addSuccess接口,成功添加信息
1)找到要mock的接口,在此指login接口
response区域点击TextView,点击view in notepad
3)面板上拖动这个接口到AutoResponder下
在这里插入图片描述
5)打开cmd窗口,启动MockRunner服务,重新运行代码
D:\D1\code\AutoTest\python_interface_autotest\PythonInterfaceAutoTest\Mock>java -Dfile.encoding=utf-8 -jar ./moco-runner-0.10.0-standalone.jar http -p 8081 -c ./config_fiddler_mock.json
29 鍏湀 2021 09:34:05 [main] INFO Server is started at 8081
29 鍏湀 2021 09:34:05 [main] INFO Shutdown port is 55671
login的接口返回值已被修改,即实现了mock的功能
模拟“添加商品”成功
1.dict与json之间的转化:
1)
json.loads():将json数据转化成dict数据
2)
json.dumps():将dict数据转化成json数据
如果有中文会出现乱码,因为默认是用ASCII码解析的,但是中文没有ASCII码是由Unicode编码
#json.dumps()----------dict->json
res = post_request(post_url,json.dumps(data,ensure_ascii=False))
2.访问字典中元素
{'code': '0', 'msg': '操作成功', 'data': {'status': 'success', 'role': '0', 'product': 'fruit'}}
role = res["data"]["role"]
json数据类型在python中并不存在,但是对应dict数据类型
def post_request(url,data):
res = requests.post(url,data=data).json()
return res
这里的res是dict类型,python通过dict来访问返回的json信息
3.MockRunner
按照json格式请求,返回json格式信息
{
"request": {
"uri": "/addError",
"method": "post",
"json": {
"role": "1",
"product": "fruit"
}
},
"response": {
"json": {
"code": "1",
"msg": "您不是管理员无权进行此操作",
"data": {
"status": "error",
"role": "1",
"product": "fruit"
}
}
}
}