如何執行多個測試 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命令的一些行為

pytest 基本上有幾塊 (我有在使用的)

custom command

fixture scope,module,function

parametrize

skip test

html report

results matching ""

    No results matching ""