@pytest.mark.skip(reason='misunderstood the API') def test_unique_id_1(): """Calling unique_id() twice should return different numbers.""" id_1 = tasks.unique_id() id_2 = tasks.unique_id() assert id_1 != id_2
內置標記skip跳過某個測試
除了上面的方法,還可以使用pytest.skip(reason)在測試運行過程中,跳過單個測試用例或整個模塊:
跳過整個模塊的例子,直接在文件中設置一個條件,當條件滿足時,使用 pytest.skip('xxx', allow_module_level = True)跳過整個模塊,allow_module_level參數必須為True:
if True: pytest.skip('skip all module', allow_module_level = True)
|
@pytest.mark.skipif(tasks.__version__ < '0.2.0', reason='not supported until version 0.2.0') def test_unique_id_1(): """Calling unique_id() twice should return different numbers.""" id_1 = tasks.unique_id() id_2 = tasks.unique_id() assert id_1 != id_2
內置標記skipif(要給要跳過的測試添加條件)跳過某個測試
注:-rs(reason) 可以查看跳過的原因
使用下面方法可以在多個模塊中共享skipif信息:
你還使用以下方法可以跳過一個類:
pytest還繼承了歷史版本中的pytestmark屬性:使用它在某些條件下跳過一個類或者一個模塊的所有測試用例,pytest.mark.skipif()指定跳過條件。
下面例子中語句pytestmark = pytest.mark,skipif(1 == 1,reason="verigy whether it can skip this module")會起作用,pytest會跳過整個模塊的執行:
執行結果如下,所有用例被跳過:
如果你想跳過多個文件或整個目錄,你可以改變pytest的“用例搜索策略”,在配置文件中設置跳過那些文件或目錄
還可以使用pytest.importorskip來跳過依賴包不能正常import的模塊:
在不同的情況下,如何在模塊內跳過執行該模塊的方法總結:
@pytest.mark.xfail(tasks.__version__ < '0.2.0', reason='not supported until version 0.2.0') def test_unique_id_1(): """Calling unique_id() twice should return different numbers.""" id_1 = tasks.unique_id() id_2 = tasks.unique_id() assert id_1 != id_2 @pytest.mark.xfail() def test_unique_id_is_a_duck(): """Demonstrate xfail.""" uid = tasks.unique_id() assert uid == 'a duck' @pytest.mark.xfail() def test_unique_id_not_a_duck(): """Demonstrate xpass.""" uid = tasks.unique_id() assert uid != 'a duck'
內置標記xfail(expected to fail)預期會失敗