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"])