1. 程式人生 > 其它 >009、pytest 基礎彙總

009、pytest 基礎彙總

一、編寫測試用例:
  用例名稱——>用例步驟——>預期結果——>實際結果——>前置、後置

  1、用例名稱:要以 test_開頭 ;

  2、用例步驟:即用例業務邏輯 ;

  3、斷言:(實際和預期結果比對) assert 表示式( True/ False ) AssertError ;

    當出現用例 AssertError 或者 測試用例其他原因 raise 異常時,測試用例執行Fail ;

  4、用例呈現的2種形式:

    a、.py 下的函式,函式名以 test_ 開頭 ;

    b、.py 下類裡面的方法,方法名以 test_ 開頭 ;

  5、自動蒐集測試用例:

    a、蒐集目錄 :在哪個檔案目錄下執行 pytest 命令,就在 哪個目錄開始蒐集測試用例 ;

    b、目錄下的檔案過濾: 檔名以 test_ 開頭的 py檔案,或者 檔名 以 _test 結尾的py 檔案 ;

      目錄下所有 .py 檔案 的執行順序是 按照 ASCII 碼 順序 ;

    c、.py 檔案下的用例過濾:.py 檔案下的函式, 函式名以 test_ 開頭,

      所有測試用例 test_xx 是按照程式碼 自上而下的 順序執行 ;

  6、pytest.main(['-s', '-v', 'test_dd.py']) 在 _.py 檔案中新增pytest.main() 的效果 和 在cmd 命令列執行效果一樣 ;

a、當出現用例 AssertError 或者 測試用例其他原因 raise 異常時,測試用例執行Fail

示例程式碼如下:

def test_3():
    login = 'success'
    assert login == 'success'


# 除數不能為0 ,異常,測試用例執行Fail
def test_1():
    a = 10
    b = 0
    c = a / b
    login = 'success'
    assert login == 'success'

執行結果如下:

D:\SkyWorkSpace\WorkSpace\Pytest\Temp\day15\dd>pytest -sv
================================================= test session starts ================================================= platform win32 -- Python 3.8.6, pytest-5.4.3, py-1.10.0, pluggy-0.13.1 -- c:\skyworkspace\worktools\python\python38\python.exe cachedir: .pytest_cache metadata: {'Python': '3.8.6', 'Platform': 'Windows-10-10.0.19041-SP0', 'Packages': {'pytest': '5.4.3', 'py': '1.10.0', 'pluggy': '0.13.1'}, 'Plugins': {'allure-pytest': '2.9.43', 'html': '2.1.1', 'metadata': '1.11.0'}, 'JAVA_HOME': 'C:\\SkyWorkSpace\\WorkTools\\Java\\jdk1.8\\jdk1.8.0_271'} rootdir: D:\SkyWorkSpace\WorkSpace\Pytest\Temp\day15\dd plugins: allure-pytest-2.9.43, html-2.1.1, metadata-1.11.0 collected 2 items test_dd.py::test_3 PASSED test_dd.py::test_1 FAILED ====================================================== FAILURES ======================================================= _______________________________________________________ test_1 ________________________________________________________ def test_1(): a = 10 b = 0 > c = a / b E ZeroDivisionError: division by zero test_dd.py:11: ZeroDivisionError =============================================== short test summary info =============================================== FAILED test_dd.py::test_1 - ZeroDivisionError: division by zero ============================================= 1 failed, 1 passed in 0.16s ============================================= D:\SkyWorkSpace\WorkSpace\Pytest\Temp\day15\dd>

b、pytest.main(['-sv', 'test_dd.py']) : 在 _.py 檔案中新增pytest.main() 的效果 和 在cmd 命令列執行效果一樣 ;

  或者pytest.main(['-s', '-v', 'test_dd.py']) ,引數以列表的形式 ;

程式碼如下:

import pytest

class TestDemo():

    def test_3(self):
        login = 'success'
        assert login == 'success'

    def test_2(self):

        login = 'success'
        assert login == 'success'

    def func_1(self):
        login = 'success'
        assert login == 'success'


class TestDemoAA():

    def test_3(self):
        login = 'success'
        assert login == 'success'

    def test_2(self):

        login = 'success'
        assert login == 'success'

    def func_1(self):
        login = 'success'
        assert login == 'success'


if __name__ == '__main__':
    pytest.main(['-sv', 'test_dd.py'])

執行結果如下:

D:\SkyWorkSpace\WorkSpace\Pytest\Temp\day15\venv\Scripts\python.exe D:/SkyWorkSpace/WorkSpace/Pytest/Temp/day15/dd/test_dd.py
============================= test session starts =============================
platform win32 -- Python 3.8.6, pytest-6.2.4, py-1.10.0, pluggy-0.13.1 -- D:\SkyWorkSpace\WorkSpace\Pytest\Temp\day15\venv\Scripts\python.exe
cachedir: .pytest_cache
rootdir: D:\SkyWorkSpace\WorkSpace\Pytest\Temp\day15\dd
collecting ... collected 4 items

test_dd.py::TestDemo::test_3 PASSED
test_dd.py::TestDemo::test_2 PASSED
test_dd.py::TestDemoAA::test_3 PASSED
test_dd.py::TestDemoAA::test_2 PASSED

============================== 4 passed in 0.01s ==============================

Process finished with exit code 0