单元测试框架之unittest(七)

一、摘要

前篇文章已经详细介绍了unittest框架的特性,足以满足我们日常的测试工作,但那并不是unittest的全部,本片博文将介绍一些应该知道但未必能经常用到的内容

然而,想全部掌握unittest还远远不够

二、命令行模式执行用例

unittest框架支持命令行执行测试模块、测试类甚至单独的测试方法

执行测试模块:python -m unittest test_module1 test_module2 ...... 也可以采用路径的方式 python -m unittest tests/test_something.py,如果想用一个高级的verbosity的方式执行加上参数-v即可,例如 python -m unittest -v test_module

执行测试类:python -m unittest test_module1.Test_Class

执行测试方法:python -m unittest test_module1.Test_Class.test_method

如果想获取这种命令组合的help,则执行命令 python -m unittest -h 将得到如下帮助信息

D:\Programs\Python\Demo\unittest1>python -m unittest -h
usage: python.exe -m unittest [-h] [-v] [-q] [--locals] [-f] [-c] [-b]
                              [-k TESTNAMEPATTERNS]
                              [tests [tests ...]]

positional arguments:
  tests                a list of any number of test modules, classes and test
                       methods.

optional arguments:
  -h, --help           show this help message and exit
  -v, --verbose        Verbose output
  -q, --quiet          Quiet output
  --locals             Show local variables in tracebacks
  -f, --failfast       Stop on first fail or error
  -c, --catch          Catch Ctrl-C and display results so far
  -b, --buffer         Buffer stdout and stderr during tests
  -k TESTNAMEPATTERNS  Only run tests which match the given substring 例如 -k foo 则会去匹配 foo_tests.SomeTest.test_something, bar_tests.SomeTest.test_foo去执行,但是不会匹配 bar_tests.FooTest.test_something.

Examples:
  python.exe -m unittest test_module               - run tests from test_module
  python.exe -m unittest module.TestClass          - run tests from module.TestClass
  python.exe -m unittest module.Class.test_method  - run specified test method
  python.exe -m unittest path/to/test_file.py      - run tests from test_file.py

usage: python.exe -m unittest discover [-h] [-v] [-q] [--locals] [-f] [-c]
                                       [-b] [-k TESTNAMEPATTERNS] [-s START]
                                       [-p PATTERN] [-t TOP]

optional arguments:
  -h, --help            show this help message and exit
  -v, --verbose         Verbose output
  -q, --quiet           Quiet output
  --locals              Show local variables in tracebacks
  -f, --failfast        Stop on first fail or error
  -c, --catch           Catch Ctrl-C and display results so far
  -b, --buffer          Buffer stdout and stderr during tests
  -k TESTNAMEPATTERNS   Only run tests which match the given substring
  -s START, --start-directory START
                        Directory to start discovery (‘.‘ default)
  -p PATTERN, --pattern PATTERN
                        Pattern to match tests (‘test*.py‘ default)
  -t TOP, --top-level-directory TOP
                        Top level directory of project (defaults to start
                        directory)

For test discovery all test modules must be importable from the top level
directory of the project.

如果没有传参数,那么将执行Test Discovery, 例如输入命令python -m unittest(它也等价于 python -m unittest discover)并未给他任何模块、类或者方法,那么他将做的事情便是Test Discovery

例如命令:python -m unittest discover -s project_directory -p "*_test.py"  本条命令中使用了参数 -s 和 -p ,-s表示从那个目录开始,默认为 (.), -p则表示匹配哪样的文件名,这条命令也等价于python -m unittest discover project_directory "*_test.py"

输入python -m unittest discover -h 将的到如何帮助,很清楚的写明了各参数说明

D:\Programs\Python\Demo\unittest1>python -m unittest discover -h
usage: python.exe -m unittest discover [-h] [-v] [-q] [--locals] [-f] [-c]
                                       [-b] [-k TESTNAMEPATTERNS] [-s START]
                                       [-p PATTERN] [-t TOP]

optional arguments:
  -h, --help            show this help message and exit
  -v, --verbose         Verbose output
  -q, --quiet           Quiet output
  --locals              Show local variables in tracebacks
  -f, --failfast        Stop on first fail or error
  -c, --catch           Catch Ctrl-C and display results so far
  -b, --buffer          Buffer stdout and stderr during tests
  -k TESTNAMEPATTERNS   Only run tests which match the given substring
  -s START, --start-directory START
                        Directory to start discovery (‘.‘ default)
  -p PATTERN, --pattern PATTERN
                        Pattern to match tests (‘test*.py‘ default)
  -t TOP, --top-level-directory TOP
                        Top level directory of project (defaults to start
                        directory)

For test discovery all test modules must be importable from the top level
directory of the project.

三、TestLoader

在前边的文章中,我们说到了测试集合,其中有一种方法是使用到了unittest.TestLoader().loadTestsFromTestCase(TestClass),这种方式是直接loader()了测试类

实际上TestLoader还有其他的方法

  • loadTestsFromModule(module, pattern=None)
  • loadTestsFromName(name, module=None) 和 loadTestsFromNames(names, module=None)
  • getTestCaseNames(testCaseClass) 返回一个存出测试方法名称的序列
  • discover(start_dir, pattern=‘test*.py‘, top_level_dir=None):这个方法我们已经用到好多次了
  • defaultTestLoader:他是一个TestLoader的实例,如果我们不需要定制化的TestLoader,直接使用这个即可还能必变重复创建TestLoader实例

四、总结

unittest单元测试框架介绍到这里基本上满足了日常的工作需要,然而这并不是unittest的全部,它还有很多的特性,读者可以直接访问Python官网查看unittest的API文档,对于学习来说,官方文档是最好的书籍

原文地址:https://www.cnblogs.com/davieyang/p/10162478.html

时间: 2024-07-29 16:22:17

单元测试框架之unittest(七)的相关文章

unittest单元测试框架之unittest 框架的总结(七)

1. Unittest 是 python 自带的单元测试框架,可以用其作为自动化框架来组织测试用例(测 试用例的执行顺序)的执行. 2. Unittest 框架的流程: 写好 TestCase 通过 TestLoader 加载 TestCase 到 TestSuite 中 通过 TextTestRunner 来原型 TestSuite,结果保存在 TextTestResult 中,我们通过命 令行或者 unittest.main()来执行 3.通过 TextTestRunner 来原型 Test

Python单元测试框架 :unittest

unittest是xUnit系列框架中的一员,如果你了解xUnit的其他成员,那你用unittest来应该是很轻松的,它们的工作方式都差不多. unittest核心工作原理 unittest中最核心的四个概念是:test case, test suite, test runner, test fixture. 下面我们分别来解释这四个概念的意思,先来看一张unittest的静态类图(下面的类图以及解释均来源于网络,原文链接): 一个TestCase的实例就是一个测试用例.什么是测试用例呢?就是一

单元测试框架之unittest(一)

一.单元测试的含义 unittest单元测试框架的设计灵感来源于Junit(Java语言的单元测试框架),它与其他语言的单元测试框架风格相类似,支持自动化测试.为测试共享setUp和shutDown.它可以在将测试用例聚合到一起形成一个集合一起执行的同时在测试报告中展示独立的测试结果. 为了达到此目的,unittest支持几个重要的面向对象式的概念: 1.test fixture 一个test fixture所做的事情是执行单个或多个测试用例时的准备工作和执行结束后的一些相关清理工作,这包括:创

Python单元测试框架:unittest(一)

主要介绍了Python单元测试框架unittest使用方法讲解,本文讲解了unittest概述.命令行接口.测试案例自动搜索.创建测试代码.构建测试套件方法等内容 概述 1.测试脚手架(test fixture) 测试准备前要做的工作和测试执行完后要做的工作.包括setUp()和tearDown(). 2.测试案例(test case) 最小的测试单元. 3.测试套件(test suite) 测试案例的集合. 4.测试运行器(test runner) 测试执行的组件. 命令行接口 可以用命令行运

unittest单元测试框架之unittest 框架的总结2(八)

unittest 下的属性 1.Unittest.TestCase:所有测试用例类继承的基本类 2.Unittest.main():将一个单元测试模块变为可直接运行的测试脚本 If __name__ == "__main__": Unittest.main() 3.Unittest.TestSuite:创建测试套件 4.unittest.TextTestRunner():unittest 框架的 TextTestRunner()类,通过该类下面的 run()方 法来运行 suite 所

单元测试框架之unittest(二)

一.摘要 本章笔者将详细介绍组织测试代码的相关内容,所用的测试例子会是冒泡排序,笔者在从业这么久之后回想很多面试都要问冒泡排序,虽然不知道为什么要问这个,但还是希望大家掌握,它与自动化测试关系不大属于python的基础范畴 在上一篇内容中我们展示了一个小例子,在代码的前两行是如下内容 import unittest class TestStringMethods(unittest.TestCase): 它的意义何在呢? import unittest 导入unittest模块,使得我们可以使用它

单元测试框架之unittest(四)

一.摘要 假设我们有一组测试方法差别非常小,比如仅仅是所需要的参数有少许变化时,我们的自动化测试如何进行?unittest框架为这种场景提供了一种方式,它允许我们用subTest()上下文管理器在一个测试方法内识别这种细小的不同,这么说可能有点晕 实际上我觉得还不如直接看代码更能清晰的表达它为我们的测试带来了什么 二.代码实例 # coding:utf-8 import unittest class NumbersTest(unittest.TestCase): def test_even(se

unittest单元测试框架之unittest工作原理(一)

1.Unittest 核心组件 test case.test suite.test runner.test fixture 2.unittest 静态图 Testcase:一个 testcase 就是一个测试用例.Setup(测试环境的准备).run(测试 执行).teardown(测试环境的还原). Testsuite(集合或套件):多个测试用例的集合就是 suite,一个 suite 可以包含多个 测试用例,也可以嵌套 suite. testLoader:用来加载 testcase 到 te

unittest单元测试框架之unittest案例(二)

1.待测方法: 1 # 加法,返回 a+b 的值 2 def add(a,b): 3 return a+b 4 # 减法,返回 a-b 的值 5 def minus(a,b): 6 return a-b 7 # 乘法,返回 a*b 的值 8 def multi(a,b): 9 return a*b 10 # 除法,返回 a/b 的值 11 def divide(a,b): 12 return a/b 2.测试用例 import unittest from UnittestDemo.mathfun