Python接口自动化之mock模块基本使用(2)

而side_effect生效,这里我给的参数值是sub.add 相当于add方法的地址,那么当调用add方法时就会真实的使用add方法,也就达到了我们测试实际的add 方法。

你也可以理解为当传递了side_effect参数且值为被测方法地址时,mock就不会起作用

side_effect接收的是一个可迭代序列,当传递多个值时,那么每次调用mock时会返回不同的值

mock_obj = mock.Mock(side_effect= [1,2,3])
print(mock_obj())
print(mock_obj())
print(mock_obj())
print(mock_obj())

输出
Traceback (most recent call last):
1
  File "D:/MyThreading/mymock.py", line 37, in <module>
2
    print(mock_obj())
3
  File "C:\Python36\lib\unittest\mock.py", line 939, in __call__
    return _mock_self._mock_call(*args, **kwargs)
  File "C:\Python36\lib\unittest\mock.py", line 998, in _mock_call
    result = next(effect)
StopIteration

Process finished with exit code 1

当所有值被取完后就会报错(这个地方有点类似生成器的原理)

存在依赖关系的功能如何测试?

假设有这样一个场景:我们要测试一个支付接口但是这个支付接口又依赖一个第三方支付接口,那么第三方支付接口我们暂时没有权限使用,那么我们该如何测试我们自己这个接口呢?

看下面的实例

假设第三方接口和我们自己的支付接口如下

"""
------------------------------------
@Time : 2019/6/26 15:09
@Auth : linux超
@File : PayMent.py
@IDE  : PyCharm
@Motto: Real warriors,dare to face the bleak warning,dare to face the incisive error!
@QQ  : 28174043@qq.com
@GROUP: 878565760
------------------------------------
"""
import requests


class PayApi(object):

@staticmethod
    def auth(card, amount):
        """
        第三方支付接口
        :param card: 卡号
        :param amount: 支付金额
        :return:
        """
        pay_url = "http://www.zhifubao.com"  # 第三方支付接口地址
        data = {"card": card, "amount": amount}
        response = requests.post(pay_url, data=data)  # 请求第三方支付接口
        return response  # 返回状态码

def pay(self, user_id, card, amount):
        """
        我们自己的支付接口
        :param user_id: 用户id
        :param card: 卡号
        :param amount: 支付金额
        :return:
        """
     # 调用第三方支付接口
        response = self.auth(card, amount)
        try:
            if response['status_code'] == '200':
                print('用户{}支付金额{}成功'.format(user_id, amount))
                return '支付成功'
            elif response['status_code'] == '500':
                print('用户{}支付失败, 金额不变'.format(user_id))
                return '支付失败'
            else:
                return '未知错误'
        except Exception:
            return "Error, 服务器异常!"


if __name__ == '__main__':
    pass

很明显第三方支付接口是无法访问的,因为接口的地址是我DIY的,为了模拟实际中我们无法使用的第三方支付接口

编写测试用例

"""
------------------------------------
@Time : 2019/6/26 15:22
@Auth : linux超
@File : testpay.py
@IDE  : PyCharm
@Motto: Real warriors,dare to face the bleak warning,dare to face the incisive error!
@QQ  : 28174043@qq.com
@GROUP: 878565760
------------------------------------
"""
import unittest
from unittest import mock

from payment.PayMent import PayApi


class TestPayApi(unittest.TestCase):

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/6170e5aa1528dd542305aabf129ca02f.html