Python 用協程併發執行測試用例

2022-04-02 12:00:36 字數 1488 閱讀 5214

歡迎測試同行加入qq***,群號:70160503

最近在工作中,遇到需要執行大量測試用例的情況。大概2500個測試用例,每個用例有數條http請求以及一些特殊處理,線性執行下來的結果是我花了2個半小時才執行完成!

為了解決這個問題,提高工作效率,實現測試用例併發執行是我所需要的。

多執行緒執行測試用例

協程值得說明的是,多執行緒執行測試用例是有前輩實現過的。具體實現過程沒有看過,依稀記得他的實現過程會生成多份測試報告,然後用beautifulsoup去解析、合併測試報告。

使用協程,可能需要修改pyunit原始碼

使用協程,可能需要修改當前測試用例為協程方法,改動可能很大

由於正在學習python協程,我還是決定先用協程試試能否實現。當然,最終結果證明改動不大,僅修改了原始碼的一小小部分,測試用例部分則只修改了單元測試模組名

首先是獲取python3的原始碼。

git clone -b 3.5

unittest原始碼在lib/unittest中。

給已有的測試用例打斷點,除錯幾波,理清unittest模組對測試用例的呼叫執行順序。

猜測主要過程為:

找到testcase真正執行入口:

unittest/case.py中的testcase類中的run方法的testmethod()。(line 605)

上層呼叫在testsuite類中,修改上層入口,把對testcase的順序執行改為呼叫協程併發執行:

修改後,執行流程如下:

經過上述修改,原來2600多個測試用例需要的執行時間,從兩個半小時壓縮到8分半鐘(如圖),提高效率不贅述。

測試報告的log獲取不準確,應該是io處理速度不足導致,後續需要想辦法解決。(又有事做了:p)

已解決上述問題,原因在於使用htmltestrunner時,輸出流**未生效,導致原先重定向至stderr的結果被寫入測試報告。在新增一秒鐘睡眠時間後解決。(**一行,debug一天,哭)

Python併發執行

使用map簡化併發的複雜度,生產者消費者模型實在看的頭疼 參考這篇帖子說明的很清楚 from multiprocessing.dummy import pool as threadpool import requests import time urls 定義網頁資源集合 for i in rang...

python併發 協程

在作業系統中程序是資源分配的最小單位,執行緒是cpu排程的最小單位。協程 是單執行緒下的併發,又稱微執行緒,纖程。英文名coroutine。一句話說明 協程是一種使用者態的輕量級執行緒,即協程是由使用者程式自己控制排程的。也就是說程式設計師用 來控制切換.參考 程序 啟動多個程序 程序之間是由作業系...

python 併發程式設計 協程 協程介紹

協程 是單執行緒下的併發,又稱微執行緒,纖程。英文名coroutine。一句話說明什麼是執行緒 協程是一種使用者態的輕量級執行緒,即協程是由使用者程式自己控制排程的 需要強調的是 1.python的執行緒屬於核心級別的,即由作業系統控制排程 如單執行緒遇到io或執行時間過長就會被迫交出cpu執行許可...