Python中使用mock.Mock()进行mock测试

先来一个简单的例子:

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"

下面来看测试类:

import unittest
from payment import Payment
from unittest import mock

class PaymentTest(unittest.TestCase):
    """
    测试支付接口
    """
    def setUp(self):
        self.payment = Payment()

    def test_success(self):
        """
        测试支付成功
        :return:
        """
        self.payment.authe = mock.Mock(return_value=200)
        res = self.payment.pay(user_id=10001, card_num="123444", amount=1000)
        self.assertEqual("success", res)

    def test_fail(self):
        """
        测试支付成功
        :return:
        """
        self.payment.authe = mock.Mock(return_value=500)
        res = self.payment.pay(user_id=10002, card_num="1233444", amount=1000)
        self.assertEqual("fail", res)

    def test_retry_success(self):
        """
                测试支付失败重试在成功
                side_effect 可以为序列类型 异常类型,对象
                如果为序列类型 每次调用mock对象,会依次将side effcet中的元素返回
                :return:
                """
        self.payment.authe = mock.Mock(side_effect=[TimeoutError, 200])
        res = self.payment.pay(user_id=10003, card_num="1234444", amount=1000)
        self.assertEqual("success", res)

if __name__ == ‘__main__‘:
    unittest.main()

  

原文地址:https://www.cnblogs.com/nuonuozhou/p/11533526.html

时间: 2024-10-09 16:54:14

Python中使用mock.Mock()进行mock测试的相关文章

【译】Python中如何创建mock?

原文地址:http://engineroom.trackmaven.com/blog/making-a-mockery-of-python/ 今天我们来谈论下mock的使用.当然,请不要误会,这里的mock可不是嘲弄的意思.mock是一门技术,通过伪造部分实际代码,从而让我们能够验证剩余代码的正确性.现在我们将通过几个简单的示例演示mock在Python测试代码中的使用,以及这项极其有用的技术是如何帮助我们改善测试代码的. 为什么我们需要mock? 当我们进行单元测试的时候,我们的目标往往是为了

[翻译]Mock 在 Python 中的使用介绍

Mock 在 Python 中的使用介绍 [TOC] 原文链接与说明 https://www.toptal.com/python/an-introduction-to-mocking-in-python 本翻译文档原文选题自 Linux中国 ,翻译文档版权归属 Linux中国 所有 本文讲述的是 Python 中 Mock 的使用 如何在避免测试你的耐心的情况下执行单元测试 很多时候,我们编写的软件会直接与那些被标记为肮脏无比的服务交互.用外行人的话说:交互已设计好的服务对我们的应用程序很重要,

python中关于不执行if __name__ == '__main__':测试模块的解决

1.新建测试脚本文件: 2.编辑测试脚本 import unittest import requests import json import HTMLTestRunner ur1 = 'http://118.178.247.67:8081/systLogonUser/adminLogon.do' headers = {'Content-Type':'application/x-www-form-urlencoded','Referer':'118.178.247.67'} data = { '

Python中的测试工具

??当我们在写程序的时候,我们需要通过测试来验证程序是否出错或者存在问题,但是,编写大量的测试来确保程序的每个细节都没问题会显得很繁琐.在Python中,我们可以借助一些标准模块来帮助我们自动完成测试过程,比如: unittest: 一个通用的测试框架: doctest: 一个更简单的模块,是为检查文档而设计的,但也非常适合用来编写单元测试. ??下面,笔者将会简单介绍这两个模块在测试中的应用. doctest ??doctest模块会搜索那些看起来像是python交互式会话中的代码片段,然后尝

【译】Android中构建快速可靠的UI测试

博客原地址:Android中构建快速可靠的UI测试 译文原链接:Fast and reliable UI tests on Android 翻译:Anthony 译者注:如果你关注android架构,那么你肯定之前看过小鄧子翻译的这篇文章Android应用架构.本篇文章的正是其原作者Iván Carballo的又一篇经典之作.也推荐你关注github项目Android架构合集以及我的从零开始搭建android框架系列文章 前言 让我一起来看看 Iván Carballo和他的团队是如何使用Esp

关于Python中的lambda

lambda是Python编程语言中使用频率较高的一个关键字.那么,什么是lambda?它有哪些用法? 这里,我们通过阅读各方资料,总结了关于Python中的lambda的“一个语法,三个特性,四个用法,一个争论”. 一个语法 在Python中,lambda的语法是唯一的.其形式如下: lambda argument_list: expression 其中,lambda是Python预留的关键字,argument_list和expression由用户自定义.具体介绍如下. 这里的argument

python中的那些“神器”

"武林至尊,宝刀屠龙,号令天下,莫敢不从,倚天不出,谁与争锋",这是神器.不过今天要说的python中的"神器"就没有这么厉害了,这里要说的"神器"其实就是名称里面带了个"器"的,如下: 列表解析器 迭代器 生成器 装饰器 列表解析器 现在遇到了这样一个问题需要解决:"有一个数字的列表,要求对该列表中的奇数乘以2,返回处理完成后的列表(不改变原来列表的顺序,仅对列表中的奇数乘以2)",比较传统的方法可能会是

python 中*args 和 **kwargs

简单的可以理解为python 中给函数传递的可变参数,args 是 列表的形式.kwargs 是 key,value的形式,也就是python 中的字典. *args 必须出现在**kwargs 的前边,否则会抛异常. 1 def test(*args, **kwargs): 2 print args 3 print kwargs 1 if __name__ == '__main__': 2 print '---test 1---' 3 test(1, 2, 3) 4 print '---tes

Python 中的进程、线程、协程、同步、异步、回调(一)

一.上下文切换技术 简述 在进一步之前,让我们先回顾一下各种上下文切换技术. 不过首先说明一点术语.当我们说"上下文"的时候,指的是程序在执行中的一个状态.通常我们会用调用栈来表示这个状态--栈记载了每个调用层级执行到哪里,还有执行时的环境情况等所有有关的信息. 当我们说"上下文切换"的时候,表达的是一种从一个上下文切换到另一个上下文执行的技术.而"调度"指的是决定哪个上下文可以获得接下去的CPU时间的方法. 进程 进程是一种古老而典型的上下文系

【Python中if __name__ == '__main__': 的解析】

在很多Python代码中,在代码的最下方会看到  if __name__ == '__main__':,这段代码到底有什么用呢? 在理解这个语句的作用前,需要知道的是,一般的Python文件后缀为.py,其可以拿来执行,也可以用来作为模块使用import导入.当Python解析器读取一个源文件时它会执行所有的代码.在执行代码前会定义一些特殊的变量.如果解析器运行的模块(源文件)作为主程序,它将会把__name__变量设置成"__main__".如果只是引入其他的模块,__name__变