如何執行多個測試 py 檔? py.test 就夠了
根據 standard test discovery rules, py.test 會很聰明的自動將當符合以下規則的命名規則的程式碼抓出來測試:
- 預設 test path 為當前目錄及其子目錄
- Module 名稱 (module) 符合 test_.py or _test.py
- Class 名稱符合 Test* (內部不要有 init 的 method)
- Function 或 Method 名稱符合 test_*
白話一點就是說當前目錄及子目錄下所有的 test.py 或 _test.py 檔中的所有 test 函數或 Test 類別撈出來測試就對了!
舉個例子
我們檔案結構如下:
|--casino/
|--test_sample.py
所以我們在根目錄執行就會自動找尋 test_sample.py 裡面的test 開頭的method
def func(x):
return x+1
def test_func():
assert func(3) == 5
執行結果
我們也可以舉一個class的例子
# content of test_class.py
class TestClass:
def test_one(self):
x = "this"
assert 'h' in x
def test_two(self):
x = "hello"
assert hasattr(x, 'check')
可以看到他跟著執行了Class底下所有的檔案
在這裡我們有看到-q 這個指令 其實我也看不太懂
後面看到這個比較才知道 加上-q 會把一些其他資訊移除 只列出重要的
pytest 基礎指令
基礎指令如下:
pytest # run all tests below current dir
pytest test_mod.py # run tests in module
pytest somepath # run all tests below somepath
pytest -k stringexpr # only run tests with names that match the
# the "string expression", e.g. "MyClass and not method"
# will select TestMyClass.test_something
# but not TestMyClass.test_method_simple
pytest test_mod.py::test_func # only run tests that match the "node ID",
# e.g "test_mod.py::test_func" will select
# only test_func in test_mod.py
我們也可以透過conftest.py設定客制化的command
conftest.py
pytest在執行任何一個單元測試的時候,最靠近執行目錄下的那個conftest.py將被自動執行。
pytest.ini
pytest在執行時,會讀取命令運行目錄下的pytest.ini文件,通過這個文件可以定制py.test命令的一些行為