pytest-mock 调试实例

安装
pip install mock
pip install pytest-mock
 
实例
第三方接口 payment.py
# coding =  utf-8
 
 
import requests
 
 
 
 
class Payment:  # 支付类
 
 
    def requestOutofSystem(self, card_num, amount):
        '''
        请求第三方外部支付接口,并返回响应码
        :param card_num:
        :param amount:
        :return: 返回状态码,200 代表支付成功,500 代表支付异常失败
        '''
        print('调用第三方接口~~~~~~')
        url = "http://third.payment.pay/"  # 第三方支付接口请求地址
        data = {"card_num": card_num, "amount": amount}  # 请求参数
        response = requests.post(url, data=data)
        return response.status_code  # 返回状态码
 
 
    def doPay(self, user_id, card_num, amount):
        '''
        支付
        :param userId: 用户ID
        :param card_num: 卡号
        :param amount: 支付金额
        :return:
        '''
        try:
            # 调用第三方支付接口请求进行真实扣款
            resp = self.requestOutofSystem(card_num, amount)
            print('调用第三方支付接口返回结果:', resp)
        # except TimeoutError:
        #     # 如果超时就重新调用一次
        #     print('重试一次~~~~')
        #     resp = self.requestOutofSystem(card_num, amount)
        except:
            resp = self.requestOutofSystem(card_num, amount)
            print('调用第三方支付接口返回结果:', resp)
 
 
        if resp == 200:  # 返回第三方支付成功,则进行系统里面的扣款并记录支付记录等操作
            print("{0}支付{1}成功!!!进行扣款并记录支付记录".format(user_id, amount))
            return 'success'
 
 
        elif resp == 500:  # 返回第三方支付失败,则不进行扣款
            print("{0}支付{1}失败!!不进行扣款!!!".format(user_id, amount))
            return 'fail'

 

接口用例
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time : 2021/1/10 17:34
# @Author : ASUS
# @File : XIAOMING.py
# @Software: PyCharm Community Edition
 
 
import pytest
import payment
import mock
 
class TestDemoMork:
    def test_success(self,mocker):
        """
        测试支付成功
        :return:
        """
        pay = payment.Payment()
        pay.requestOutofSystem=mocker.patch('payment.Payment.requestOutofSystem',return_value=200)  #mock第三方接口.写路径和返回值
        #第二种写法
        #pay.requestOutofSystem=mocker.patch.object(payment.Payment,'requestOutofSystem',return_value=200)  #mock第三方接口
        resp = pay.doPay(user_id=1, card_num="439019098", amount=200)
        print("这是运行结果:{}".format(resp))
        assert resp=='success'
 
 
# if __name__ == '__main__':
#     pytest.main(["-s","test_demo1.py::TestDemoMork::test_success"])

 

 
posted @ 2021-01-10 20:42  冥鸿  阅读(254)  评论(0编辑  收藏  举报
Live2D