使用Fiddler进行mock测试

一.背景

用到的两个接口
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进行mock测试_第1张图片
使用Fiddler进行mock测试_第2张图片
下面想要实现的效果是利用fiddler修改login接口的返回数据role=0,然后访问addSuccess接口,成功添加信息

二.fiddler mock

1)找到要mock的接口,在此指login接口
response区域点击TextView,点击view in notepad
使用Fiddler进行mock测试_第3张图片

2)修改接口返回信息并保存到本地
使用Fiddler进行mock测试_第4张图片
使用Fiddler进行mock测试_第5张图片

3)面板上拖动这个接口到AutoResponder下
使用Fiddler进行mock测试_第6张图片
在这里插入图片描述

找到刚才保存到本地文件
使用Fiddler进行mock测试_第7张图片

4)确保如图信息正确且处于勾选状态,点击save
使用Fiddler进行mock测试_第8张图片

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

使用Fiddler进行mock测试_第9张图片

login的接口返回值已被修改,即实现了mock的功能
使用Fiddler进行mock测试_第10张图片
模拟“添加商品”成功
使用Fiddler进行mock测试_第11张图片

三.总结

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"
                }
            }
        }
    }

你可能感兴趣的:(接口测试,自动化测试,mock,Fiddler,requests,unittest,json)