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 。你提供的包名會被導入,它在文件系統中的位置會被作為起始目錄。