python Mock基本使用

mock简介

mock原是python的第三方库。python3以后mock模块已经整合到了unittest测试框架中,不用再单独安装。Mock这个词在英语中有模拟的意思,因此我们可以猜测出这个库的主要功能是模拟一些东西。准确的说,Mock是Python中一个用于支持单元测试的库,它的主要功能是使用mock对象替代掉指定的Python对象,以达到模拟对象的行为既然mock已经被整合到了unittest单元测试框架中,可想而知mock的目的就是为了让我们更好的进行测试

mock作用

1. 解决依赖问题:当我们测试一个接口或者功能模块的时候,如果这个接口或者功能模块依赖其他接口或其他模块,那么如果所依赖的接口或功能模块未开发完毕,那么我们就可以使用mock模拟被依赖接口,完成目标接口的测试

2. 单元测试:如果某个功能未开发完成,我们又要进行测试用例的代码编写,我们也可以先模拟这个功能进行测试

3. 模拟复杂业务的接口:实际工作中如果我们在测试一个接口功能时,如果这个接口依赖一个非常复杂的接口业务,那么我们完全可以使用mock来模拟这个复杂的业务接口,其实这个和解决接口依赖是一样的原理

4.前后端联调:如果你是一个前端页面开发,现在需要开发一个功能:根据后台返回的状态展示不同的页面,那么你就需要调用后台的接口,但是后台接口还未开发完成,是不是你就停止这部分工作呢?答案是否定的,你完全可以借助mock来模拟后台这个接口返回你想要的数据

支付案例:第三方支付接口目前不能调用情况下 使用mock完成测试

支付功能: payment.py

import requests
from unittest import mock

def request_lemonfix():
    """

    :return:
    """
    res = requests.get('http://www.lemonfix.com')
    return res.status_code.encode('utf-8')


if __name__ == '__main__':
    request_lemonfix = mock.Mock(return_value="这里会显示论坛主页")
    print(request_lemonfix())
然后再来一个实用的例子:第三方支付接口目前不能调用情况下 使用mock完成测试

import requests


class Payment:
    """
    定义第三方支付类
    """
    def authe(self, card_num, amount):
        """
        请求第三方支付接口,并返回响应码
        :param card_num: 卡号
        :param amount: 金额
        :return: 返回状态码200 代表支付成功,500 代表支付异常
        """
        url = "https://www.dd.com"  # 第三方的url
        data = {"card_num": card_num, "amount": amount}
        response = requests.post(url, data=data)
        return response.status_code

    def pay(self, user_id, card_num, amount):
        """
        支付
        :param user_id: 用户id
        :param card_num: 卡号
        :param amount: 金额
        :return:
        """
        try:
            status_code = self.authe(card_num, amount)
        except TimeoutError:
            status_code = self.authe(card_num, amount)

        if status_code == 200:
            print("支付成功")
            return "success"
        if status_code == 500:
            print("支付失败")
            return "fail"

测试Case功能:Mock_demo

# -*- coding: utf-8 -*-
#@Time : 2021/11/2 20:16
#@Auth : Ann
#@File :modular.py
#@IDE :PyCharm
import requests

class Payment:
    """
    定义第三方支付类
    """
    def authe(self, card_num, amount):
        """
        请求第三方支付接口,并返回响应码
        :param card_num: 卡号
        :param amount: 金额
        :return: 返回状态码200 代表支付成功,500 代表支付异常
        """
        url = "https://www.dd.com"  # 第三方的url
        data = {"card_num": card_num, "amount": amount}
        response = requests.post(url, data=data)
        return response.status_code

    def pay(self, user_id, card_num, amount):
        """
        支付
        :param user_id: 用户id
        :param card_num: 卡号
        :param amount: 金额
        :return:
        """
        try:
            status_code = self.authe(card_num, amount)
        except TimeoutError:
            status_code = self.authe(card_num, amount)

        if status_code == 200:
            print("支付成功")
            return "success"
        if status_code == 500:
            print("支付失败")
            return "fail"
原文地址:https://www.cnblogs.com/lanyinhao/p/15501081.html