对python_discover方法遍历所有执行的用例详解

yizhihongxing

题目中提到的 python_discover 方法是 unittest 测试框架中的一个方法,其主要功能是遍历指定路径下的所有测试用例文件,自动组装这些文件中的测试用例,方便进行统一测试。

本文将详细讲解如何使用 python_discover 方法来遍历所有执行的用例:

第一步:创建测试用例文件

为了能够使用 python_discover 方法,我们需要先创建测试用例文件。这里我们以一个简单的加法函数为例,创建一个测试用例文件 test_add.py,代码如下:

import unittest
from add import add

class TestAdd(unittest.TestCase):

    def test_add(self):
        self.assertEqual(add(1, 2), 3)

    def test_add_float(self):
        self.assertEqual(add(1.3, 2.7), 4.0)

    def test_add_string(self):
        with self.assertRaises(TypeError):
            add('Hello', 'World')

测试用例文件中包含了三个测试用例,分别测试了加法函数的三种用法:

  • 两个整数相加
  • 两个浮点数相加
  • 两个字符串相加(期望抛出 TypeError 异常)

第二步:使用 python_discover 方法自动组装测试用例

有了测试用例文件之后,我们下一步要做的就是遍历指定路径下的所有测试用例文件,自动组装这些文件中的测试用例。

unittest 测试框架中,我们可以使用 TestLoader() 类的 discover 方法来实现这个功能。具体代码如下:

import unittest

if __name__ == '__main__':
    tests = unittest.defaultTestLoader.discover('.', pattern='test_*.py')
    unittest.TextTestRunner().run(tests)

这里我们调用了 unittest.defaultTestLoader.discover() 方法,指定了要遍历的路径为当前路径(即 '.'),并且指定了测试用例文件的匹配模式为以 'test_' 开头,并以 .py 结尾的文件。这样就能够自动找到我们刚才创建的 test_add.py 文件了。

第三步:运行测试用例

最后一步就是运行测试用例了。我们可以使用 unittest.TextTestRunner().run() 方法来执行测试用例,并且将执行结果以文本形式输出到控制台。具体代码如下:

import unittest

if __name__ == '__main__':
    tests = unittest.defaultTestLoader.discover('.', pattern='test_*.py')
    unittest.TextTestRunner().run(tests)

执行结果如下:

...
----------------------------------------------------------------------
Ran 3 tests in 0.000s

OK

这里我们有三个测试用例,全部都通过了。

示例2:

下面我们再演示一个示例,来遍历一个包含多个测试用例文件的文件夹,并执行其中的所有测试用例。

首先,我们需要创建两个测试用例文件 test_add.pytest_sub.py,代码如下:

test_add.py:

import unittest
from add import add

class TestAdd(unittest.TestCase):

    def test_add(self):
        self.assertEqual(add(1, 2), 3)

    def test_add_float(self):
        self.assertEqual(add(1.3, 2.7), 4.0)

    def test_add_string(self):
        with self.assertRaises(TypeError):
            add('Hello', 'World')

test_sub.py:

import unittest
from sub import sub

class TestSub(unittest.TestCase):

    def test_sub(self):
        self.assertEqual(sub(1, 2), -1)

    def test_sub_float(self):
        self.assertEqual(sub(1.3, 0.7), 0.6)

    def test_sub_string(self):
        with self.assertRaises(TypeError):
            sub('Hello', 'World')

这两个文件中分别包含了一个加法函数和一个减法函数的测试用例。

接下来我们需要修改之前的代码,并把 discover() 方法的第一个参数修改为要遍历的文件夹名(例如我这里创建了一个名为 tests 的文件夹)。具体代码如下:

import unittest

if __name__ == '__main__':
    tests = unittest.defaultTestLoader.discover('tests', pattern='test_*.py')
    unittest.TextTestRunner().run(tests)

这里我把要遍历的文件夹名修改为 'tests',并且指定测试用例文件的匹配模式为依然是以 'test_' 开头,并以 .py 结尾。

执行结果如下:

....
----------------------------------------------------------------------
Ran 6 tests in 0.000s

OK

这里我们有六个测试用例,全部都通过了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:对python_discover方法遍历所有执行的用例详解 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • Python:使用由类组成的列表时,for循环和输入失败

    【问题标题】:Python: for loops and inputs fail when using a list made of classesPython:使用由类组成的列表时,for循环和输入失败 【发布时间】:2023-04-04 01:06:02 【问题描述】: class products: def __init__(self, id, siz…

    Python开发 2023年4月6日
    00
  • PyCharm常用配置和常用插件(小结)

    PyCharm常用配置和常用插件(小结) PyCharm是一款非常受欢迎的Python集成开发环境(IDE),支持多种操作系统,并拥有丰富的功能和插件。 常用配置 1. 解释器配置 在PyCharm中使用Python需要配置解释器,可以使用系统自带的Python解释器,也可以使用虚拟环境。 在PyCharm的Settings/Preferences中,选择P…

    python 2023年5月20日
    00
  • go语言通过结构体生成json示例解析

    我们可以使用Go语言的内置包 encoding/json 来将结构体转化为 JSON 格式的数据。在生成 JSON 数据时,我们需要对每个字段设置一个 tag 标签,以便能够正常地将 JSON 数据反序列化为结构体。接下来,我们以一个例子进行说明。 下面是一个例子,假设我们有一个结构体定义如下: type User struct { Name string …

    python 2023年6月3日
    00
  • Python常遇到的错误和异常

    Python常遇到的错误和异常攻略 在Python编程中,我们经常会遇到各种错误和异常。这些错误和异常可能导致程序崩溃或产生不正确的结果。本攻略将介绍Python常遇到的错误异常,并提供两个示例说明。 解决方法 在Python中解决常见的错误异常,我们可以尝试以下方法: 使用trycept语句捕获异常 使用assert语句查条件是否为真 使用模块记录错误信息…

    python 2023年5月13日
    00
  • python scrapy框架中Request对象和Response对象的介绍

    以下是关于“Python Scrapy 框架中 Request 对象和 Response 对象的介绍”的完整攻略: Python Scrapy 框架中 Request 对象和 Response 对象的介绍 在 Scrapy 框架中,Request 对象和 Response 对象是非常重要的概念。Request 对象用于发送 HTTP 请求,而 Respons…

    python 2023年5月15日
    00
  • Python函数式编程指南(二):从函数开始

    关于《Python函数式编程指南(二):从函数开始》的完整攻略,我这里来作一下详细的讲解。 一、前言 本篇攻略是该系列文章的第二篇,主要介绍如何使用 Python 实现函数式编程。本篇攻略需要大家对 Python 语言和基本的编程语言思维有一定的了解和掌握。 二、函数式编程 函数式编程(Functional Programming,简称 FP)是一种编程范式…

    python 2023年5月18日
    00
  • Python用20行代码实现完整邮件功能

    下面我将为你详细讲解“Python用20行代码实现完整邮件功能”的完整攻略。 首先,我们需要明确一下,要实现完整邮件功能所需要用到的模块是smtplib和email。smtplib模块是发送邮件的核心,而email模块则是生成邮件内容的核心。 接下来,我们先来看一下如何使用smtplib模块来发送邮件。以下是一个常规的邮件发送代码段: import smtp…

    python 2023年6月3日
    00
  • numpy中的随机打乱数据方法np.random.shuffle解读

    numpy中的随机打乱数据方法——np.random.shuffle解读 在机器学习和深度学习中,往往需要对数据集进行随机打乱操作,以提高模型的泛化能力。而在numpy库中,可以使用np.random.shuffle()方法来进行数据的随机打乱。下面我们就来详细讲解如何使用np.random.shuffle()方法进行数据的随机打乱操作。 1. shuffl…

    python 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部