新增于3.2版本
unittest支持簡單的test discovery穿稳,為了適配test discovery护蝶,所有測試文件都必須是可以從項目的頂級目錄導入的模塊或包(包含命名空間包)腮恩,這意味著所有文件名都必須是可以有效識別的占婉。
Test Discovery可以在TestLoader.discover()中使用,也可以在命令行中使用早歇。最基礎的命令行用法:
cd project_directory
python -m unittest discovery
小提示:python -m unittest
相當于python -m unittest discovery
的簡寫,但在需要將參數(shù)傳遞給Test Discovery時,必須顯式使用discovery子命令遥椿。
discovery子命令有下列選項:
-v基矮,--verbose
詳細輸出
-s,--start-directory + directory
開始查找的目錄冠场,默認為.
-p家浇,--pattern + pattern
模式匹配測試文件,默認為test*.py
-t碴裙,--top-level-directory + directory
項目的頂級目錄钢悲,默認為啟動目錄
-s,-p舔株,-t選項可以按順序作為位置參數(shù)傳入莺琳。以下兩個命令行是等效的:
python -m unittest discovery -s project_directory -p "*_test.py"
python -m unittest discovery project_directory "*_test.py"
除了使用路徑作為啟動目錄傳遞,還可以使用包名载慈,如myproject.subpackage.test
惭等。Test Discovery將會導入你提供的包名,并將它在文件系統(tǒng)上的位置用作啟動目錄办铡。
注意:
Test Discovery是通過導入的方式加載測試辞做。一旦Test Discovery找到了指定啟動目錄中的所有測試文件,它就會將路徑轉換為要導入的包名寡具。舉個例子:foo/bar/baz.py會被轉換成foo.bar.baz秤茅。
如果你在全局安裝了包,并在包的副本上嘗試進行Test Discovery童叠,那么導入可能使用了錯誤的位置嫂伞。這種情況發(fā)生的時候,Test Discovery會警告并退出拯钻。
如果你提供的啟動目錄是包名帖努,而不是目錄的路徑,則Test Discovery會假定它從中導入的位置是你想要的位置粪般,你將不會收到警告拼余。
測試模塊和包可以通過load_tests協(xié)議自定義Test Discovery的加載和發(fā)現(xiàn)。
Test Discovery支持命名空間包(更新于3.4)