12.fixture帶參數傳遞
場景:測試離不開數據,為了數據靈活,一般數據都是通過參數傳的
解決:fixture通過固定參數request傳遞;
步驟:在fixture中增加@pytest.fixture(params=[1,2,3,'linda'])在方法參數寫request
如下圖,運行結果:
參數傳入的可以是列表是元祖
如下圖,eval將字符串str當成有效的表達式來求值,並返回結果:
當我們測試登錄或者搜索這種同樣的場景需要不同的數據時,就可以使用這種參數組合的方法:
運行結果如下:
方法名作為參數,indrect=True,可以把傳過來的參數當函數執行
運行結果如下圖:
13.mark中的skip與xfail
skip使用場景
調試時不想運行這個用例
標記無法在某些平台上運行的測試功能
在某些版本中執行,其他版本中跳過
當前的外部資源不可用時跳過(如果測試數據是從數據庫中取到的,連接數據庫的功能如果返回結果未成功就跳過,因為執行也都報錯)
解決:
@pytest.mark.xfail跳過這個測試用例,可以加條件skipif,在滿足條件下才希望通過,否則跳過這個測試。
skipif
xfail場景:
功能測試尚未實施或者未修復的錯誤,當測試通過時盡管預計會失敗(標記為@pytest.mark.xfail),它是一個xpass將在測試摘要中報告
你希望測試由於某種情況而就應該失敗
解決:
@pytest.mark.xfail
skip的使用:
@pytest.mark.xfail的使用:
14.使用自定義標記mark只執行某部分用例
場景:
只執行符合要求的某一部分用例,可以把一個web項目划分為多個模塊,然后指定模塊名稱執行
app自動化時,如果想android和ios公用一套代碼,也可以使用標記功能,表明哪些是ios用例,哪些是android的,運行代碼時指定mark名稱運行就可以
解決:
在測試用例方法上加@pytest.mark.webtest
執行:
-s 參數:輸出所有測試用例的print信息
-m:執行自定義標記的相關用例pytest -s test_mark.py
pytest -s test_mark.py -m=webtest
pytest -s test_mark.py -m apptest
pytest -s test_mark.py -m "not ios"
執行pytest -v -s test_case/test_fix.py -m=search命令 ,還可以使用and、or、not 這些邏輯符指定運行哪些標簽,運行結果:
如何去掉warning呢? 可以在conftest.py文件中添加標簽,以上運行的時候就不會提示warning:找不到這些名字了;在conftest.py文件中加入pytest_configure函數,注意⚠️一定要使用這個函數中的markers遍歷,也必須是
pytest_configure文件名的函數
15.多線程並行與分布式執行
場景:
測試用例1000條,一個用例執行1分鍾,一個測試人員執行需要1000分鍾,通常我們會用人力成本換取時間成本
加幾個人一起執行,時間就會縮短,如果10人一起執行只需要100分鍾,這就是一種並行測試,分布式場景
解決:
pytest分布式執行插件:pytest-xdist,多個cpu或主機執行前提:用例之間都是獨立的,沒有先后順序,隨機都能執行,可重復運行不影響其他用例
安裝:
pip3 install pytest-xdist
多個cpu並執行用例,直接加-n 3是執行並行數量:pytest -n 3
在多個終端下一起執行
16.生成html測試報告