1. 程式人生 > 其它 >【Python_pytest】pytest-xdist 分散式執行

【Python_pytest】pytest-xdist 分散式執行

pytest-xdist 是屬於程序級別的併發

分散式執行用例的原則:

  • 用例之間是獨立的,沒有依賴關係,完全可以獨立執行
  • 用例執行沒有順序要求,隨機順序都能正常執行,不影響其它用例
  • 每個用例都能重複執行,執行結果不會影響其他用例

安裝

pip install pytest-xdist

不使用pytest-xdist 

python -v

使用pytest-xdist 

pytest -v -n num  # num表示併發的程序數 

  引數 -n auto:可以自動檢測到系統的CPU核數。即利用了所有CPU來跑用例;

  引數 -n num:指定num個程序跑同時執行用例

  執行順序

--dist=loadscope
# 將按照同一個模組 module 下的函式和同一個測試類 class 下的方法來分組,然後將每個測試組發給可以執行的 worker,確保同一個組的測試用例在同一個程序中執行。目前無法自定義分組,按類 class 分組優先於按模組 module 分組。

--dist=loadfile
# 按照同一個檔名來分組,然後將每個測試組發給可以執行的 worker,確保同一個組的測試用例在同一個程序中執行。
# -*- coding: UTF-8 -*-
import sys
import os
import json
import time
from loguru import logger as logs class TestXdist: """測試用例模組""" def setup_class(self): logs.info('>>> 測試環境:sit') logs.info(">>> 自動化資料開關: on.") logs.info('>>> 從execl第1行開始,共執行測試用例共1行 ') def teardown_class(self): logs.info(">>> 當前測試類所有測試用例執行完畢 ~
") @pytest.mark.run(order=0) def test_demo1(self): logs.info(datetime.datetime.now()) time.sleep(5) logs.info(datetime.datetime.now()) @pytest.mark.run(order=1) def test_demo2(self): logs.info(datetime.datetime.now()) time.sleep(5) logs.info(datetime.datetime.now()) @pytest.mark.run(order=2) def test_demo3(self): logs.info(datetime.datetime.now()) time.sleep(5) logs.info(datetime.datetime.now()) if __name__ == "__main__": logs.debug("pytest") pytest.main(["test_xdist.py::TestXdist", # "執行檔名"::"類名"::"方法名" public_tools.get_html('test_debug'), # "生成html報告引數" "--self-contained-html", # 把css樣式合併到html裡 僅生成html檔案 "-v", # 日誌列印 -q僅報告 -s僅控制檯, -v 報告及控制檯 "-n 3 ", # 不使用則註釋掉,多程序併發 -s不使用分散式測試; -n後+num "--color=yes", # pytest 寫入輸出顏色 '-W', 'ignore:Module already imported:pytest.PytestWarning', # 忽略錯誤 ])
示例

執行結果

  

pytest-xdist分散式測試的流程
  第一步:建立worker
  第二步:收集測試項用例
    <Tips:分散式測試(pytest-xdist)方式執行測試時不會輸出測試用例中的print內容>
  第三步:master檢測workers收集到的測試用例集
  第四步:測試用例分發
    --dist-mode選項
      each:master將完整的測試索引列表分發到每個worker。
      load:master將大約25%的測試用例以輪詢的方式分發到各個worker,剩餘的測試用例則會等待workers執行完測試用例以後再分發
    <Tips:自定義分發邏輯可以使用:pytest_xdist_make_scheduler>
  第五步:測試用例的執行
  第六步:測試用例再分發(--dist-mode=load)
  第七步:測試結束

參考地址:https://www.cnblogs.com/hls-code/p/14978726.html