unittest(一)
unittest
单元测试框架是受到 JUnit 的启发,与其他语言中的主流单元测试框架有着相似的风格。
其支持测试自动化,配置共享和关机代码测试。支持将测试样例聚合到测试集中,并将测试与报告框架独立。
概念 | 描述 |
test Fixture |
测试的装置,测试前和测试后所需要进行的准备工作,以及所有相关的清理操作 |
test Case | 测试用例 unittest 提供一个基类: TestCase ,用于新建测试用例。 |
test Suite | 是一系列的测试用例,或测试套件,或两者皆有。test suite 可以嵌套 test suite,它可以将很多测试用例打包,然后一起执行。 |
test Loader | 加载测试用例 |
test Runner | 用于执行和输出测试结果的组件。这个运行器可能使用图形接口、文本接口,或返回一个特定的值表示运行测试的结果 |
test Fixture 执行顺序
test Case
定义
- 测试用例必须要以 test为开头的,可以是模块(module) 、 类(class) 、 方法(method)
- 以类为主体 需要继承unittest.TestCase类
实例:
import unittest
class TestStringMethods(unittest.TestCase):
def test_upper(self):
self.assertEqual('foo'.upper(), 'FOO')
def test_isupper(self):
self.assertTrue('FOO'.isupper())
self.assertFalse('Foo'.isupper())
def test_split(self):
s = 'hello world'
self.assertEqual(s.split(), ['hello', 'world'])
# check that s.split fails when the separator is not a string
with self.assertRaises(TypeError):
s.split(2)
if __name__ == '__main__':
unittest.main()
执行
1、可以用unittest.main()
函数
2、也可以使用命令行的形式 ,可以传入模块名、类或方法名或他们的任意组合
python -m unittest test_module1 test_module2
python -m unittest test_module.TestClass
python -m unittest test_module.TestClass.test_method
同样的,测试模块可以通过文件路径指定:
python -m unittest tests/test_something.py
# 可以通过添加 -v 参数获取更详细的信息。
python -m unittest -v test_module
3.2 新版功能: 添加命令行选项 -b, -c 和 -f 。
3.5 新版功能: 命令行选项 --locals 。
3.7 新版功能: 命令行选项 -k 。
命令行亦可用于探索性测试,以运行一个项目的所有测试或其子集。
参数说明
参数 | 描述 |
-v | 输出详细信息 |
-b | 当测试在运行时,输出的错误信息被缓存在内存中,如果测试运行通过,则释放缓存,如果测试失败,信息就会被打印出来 |
-c | 在测试执行时按下Control-C将会等待当前测试完成并输入所有测试报告。第二次按下Control-C就会触发KeyboardInterrupt异常。 |
-f | 测试一旦出现错误或失败就停止运行 |
-k | 指定对测试名称进行匹配。该匹配是大小写敏感的。包含通配符(*)的模式使用 ,模式对测试加载器导入的测试方法全名进行匹配。 |
--locals | 在异常回溯中打印本地变量信息。 |
3.2 新版功能: 添加命令行选项 -b, -c 和 -f 。
3.5 新版功能: 命令行选项 --locals 。
3.7 新版功能: 命令行选项 -k 。
命令行亦可用于探索性测试,以运行一个项目的所有测试或其子集。