• python mock知识03


    参考文章:

    版权声明 


    出处: 博客园Linux超的技术博客--https://www.cnblogs.com/linuxchao/

    您的支持是对博主最大的鼓励,感谢您的认真阅读

    本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明, 且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

    作者: Linux超

    mock作用

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

    使用mock模拟被依赖接口,完成目标接口的测试

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

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

    这个和解决接口依赖是一样的原理

    4.前后端联调:如果你是一个前端页面开发,现在需要开发一个功能:根据后台返回的状态展示不同的页面,那么你就需要调用后台的接口,但是后台接口还未开发完成,是不是你

    就停止这部分工作呢?答案是否定的,你完全可以借助mock来模拟后台这个接口返回你想要的数据

    mock官方文档地址:

    https://docs.python.org/3/library/unittest.mock.html#the-patchers

    关于@patch.object()的用法截图如下:

    实现代码如下:文件名:test_03.py

    import requests
    import unittest

    from mock import patch


    class PayApi():

    @staticmethod
    def auth(card,amount):
    pay_url = "http:moni.com"
    data = {"card":card,"amount":amount}
    response = requests.post(pay_url,data = data)
    return response

    def pay(self,user_id,card,amount):
    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, 服务器异常!"


    class TestPayApi(unittest.TestCase):

    def setUp(self):
    self.pay = PayApi()

    def tearDown(self):
    pass

    # @mock.patch("test_03.PayApi")
    @patch.object(PayApi,'auth')
    def test_success(self,mock_auth):
    mock_auth.return_value = {'status_code':'200'}
    statusmsg = self.pay.pay('1000','12345','10000')
    self.assertEqual(statusmsg,'支付成功')

    @patch.object(PayApi,'auth')
    def test_fail(self,mock_auth):
    mock_auth.return_value = {'status_code':'500'}
    statusmsg = self.pay.pay('jsdn','6222xxx','10000')
    self.assertEqual(statusmsg,'支付失败')

    @patch.object(PayApi,'auth')
    def test_error(self,mock_auth):
    mock_auth.return_value = {'status_code':'300'}
    statusmsg = self.pay.pay('jsdn', '6222xxx', '20000')
    self.assertEqual(statusmsg,'未知错误')

    @patch.object(PayApi, 'auth')
    def test_exception(self, mock_auth):
    mock_auth.return_value = {'status_codeq':'300'}
    statusmsg = self.pay.pay('jsdn', '6222xxx', '20000')
    self.assertEqual(statusmsg, 'Error, 服务器异常!')


    if __name__ == '__main__':
    unittest.main(verbosity=2)

    运行结果如下:







  • 相关阅读:
    814. Binary Tree Pruning
    50. Pow(x, n)
    698. Partition to K Equal Sum Subsets
    416. Partition Equal Subset Sum
    150. Evaluate Reverse Polish Notation
    322. Coin Change
    Vulnerable Kerbals CodeForces
    D. Domino for Young
    C. Long Beautiful Integer
    B. Modulo Equality
  • 原文地址:https://www.cnblogs.com/fppblog/p/11428068.html
Copyright © 2020-2023  润新知