25.3.2命令行接口
unittest模块可以通过命令行来运行测试 无论是模块还是类或者只是单一的方法:
python -m unittest test_module1 test_module2
python -m unittest test_module.TestClass
python -m unittest test_module.TestClass.test_method
你可以传递进来一个由任意模块名或者类或者方法组成的列表。
命令行测试的时候你可以通过 -v 后缀 显示更多细节:
python -m unittest -v test_module
你可以查看所有后缀选项 :
python -m unittest -h
25.3.2.1命令行选项
-b : –buffer 缓冲
在测试运行期间,标准输出和标准错误流被缓存。通过测试的输出随后被丢弃,输出通常在测试失败或错误后得到响应,并添加到失败信息中。
-c : –catch 捕获
在测试运行期间使用control - c的话,进程会等待当前的测试结束,然后报告所有已执行的结果。第二个control -c 会抛出 keyboardinterrupt 异常。
-f : –failfast
在第一个错误或失败时停止当前正在运行的测试。
25.3.3测试 discovery
unittest 支持简单的 discovery测试。
为了与discovery测试兼容,所有测试文件必须是来自项目顶层目录的模块或包(这意味着这些文件的名字必须是有效的标识符)
discovery测试是在testloader . discover()中实现的,但也可以从命令行中使用。基本使用方式如下:
python -m unittest discover
后缀选项:
-v –verbose 详细内容
详细输出
-s –start-direcctory 目录
开始文件目录(默认 . )
-p –pattern 模式
模式匹配文件(默认 test*.py)
-t –top-level-directory
项目顶层目录(默认 开始文件目录 .)
后边三个后缀选项可以以这个顺序按顺序传入命令。
以下两个命令行等价:
python -m unittest discover -s project_directory -p "*_test.py"
python -m unittest discover project_directory "*_test.py"
作为路径,可以传递包名,例如myproject.subpackage.test
,作为 开始目录。然后导入的包名会被导入,并且它在文件系统上的位置也会被用作开始目录。
注意
discovery测试通过把这些测试文件导入完成。一旦discovery测试从你指定的开始目录中找到所有测试文件,它将会把这些路径办成包名来导入。
例如 /foo/bar/baz.py 会被这样导入 foo.bar.baz
如果你在全局上安装了一个包并且试图在包的一个副本上进行discovery测试,那么导入可能会来自错误的位置。如果这种导入发生,discovery测试就会发出警告并退出。
如果你将开始目录作为包名提供,而不是一个指向文件的目录,则会假设无论它哪个位置导入,都会是你想要的,这样你就不会收到警告。