本文转自:https://www.cnblogs.com/mikigo/p/13334753.html
unittest 模块可以通过命令行运行模块、类和独立测试方法的测试:
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
这样就可以使用 shell 的文件名补全指定测试模块。所指定的文件仍需要可以被作为模块导入。路径通过去除 '.py' 、把分隔符转换为 '.' 转换为模块名。若你需要执行不能被作为模块导入的测试文件,你需要直接执行该测试文件。
在运行测试时,你可以通过添加 -v 参数获取更详细(更多的冗余)的信息。
python -m unittest -v test_module
当运行时不包含参数,开始 探索性测试
python -m unittest
用于获取命令行选项列表:
python -m unittest -h
在 3.2 版更改: 在早期版本中,只支持运行独立的测试方法,而不支持模块和类。
命令行选项:
-b, --buffer
在测试运行时,标准输出流与标准错误流会被放入缓冲区。成功的测试的运行时输出会被丢弃;测试不通过时,测试运行中的输出会正常显示,错误会被加入到测试失败信息。
-c, --catch
当测试正在运行时, Control-C 会等待当前测试完成,并在完成后报告已执行的测试的结果。当再次按下 Control-C 时,引发平常的 KeyboardInterrupt 异常。
See Signal Handling for the functions that provide this functionality.
-f, --failfast
当出现第一个错误或者失败时,停止运行测试。
-k
只运行匹配模式或子串的测试方法和类。可以多次使用这个选项,以便包含匹配子串的所有测试用例。
包含通配符(*)的模式使用 fnmatch.fnmatchcase() 对测试名称进行匹配。另外,该匹配是大小写敏感的。
模式对测试加载器导入的测试方法全名进行匹配。
例如,-k foo 可以匹配到 foo_tests.SomeTest.test_something 和 bar_tests.SomeTest.test_foo ,但是不能匹配到 bar_tests.FooTest.test_something 。
--locals
在回溯中显示局部变量。
3.2 新版功能: 添加命令行选项 -b, -c 和 -f 。
3.5 新版功能: 命令行选项 --locals 。
3.7 新版功能: 命令行选项 -k 。
命令行亦可用于探索性测试,以运行一个项目的所有测试或其子集。
探索性测试
3.2 新版功能.
Unittest支持简单的测试搜索。若需要使用探索性测试,所有的测试文件必须是 modules 或 packages (包括 namespace packages )并可从项目根目录导入(即它们的文件名必须是有效的 identifiers )。
探索性测试在 TestLoader.discover() 中实现,但也可以通过命令行使用。它在命令行中的基本用法如下:
cd project_directory python -m unittest discover
注解 方便起见, python -m unittest 与 python -m unittest discover 等价。如果你需要向探索性测试传入参数,必须显式地使用 discover 子命令。
discover 有以下选项:
-v, --verbose
更详细地输出结果。
-s, --start-directory directory
开始进行搜索的目录(默认值为当前目录 . )。
-p, --pattern pattern
用于匹配测试文件的模式(默认为 test*.py )。
python3 -m unittest discover -s cases/screen_recorder_test_cases/screen_cases/ -p "*001*.py"
-t, --top-level-directory directory
指定项目的最上层目录(通常为开始时所在目录)。
-s ,-p 和 -t 选项可以按顺序作为位置参数传入。以下两条命令是等价的:
python -m unittest discover -s project_directory -p "*_test.py" python -m unittest discover project_directory "*_test.py"
正如可以传入路径那样,传入一个包名作为起始目录也是可行的,如 myproject.subpackage.test 。你提供的包名会被导入,它在文件系统中的位置会被作为起始目录。