測試平臺系列(46) 用例併發之我全都要
大家好,我是米洛,求三連!求關注
測試開發坑貨
!
如果閱讀完畢後想和作者有更多交流,可以點選閱讀原文
找到底部評論區,給作者留言啦!
回顧
前一章我們把http換成了aiohttp,完成了資料構造器
功能。今天就輕鬆點吧~
用例執行
目前我們開放了api,/request/run
這個介面去執行單個用例
。但是我們的目標並不是做一個玩具
,所以我們需要想一下怎麼去支援多條用例一起執行。
至於測試集,測試計劃,定時任務這種也會陸續展開,先把眼前的困難
給解決。
所以我們需要在頁面上可以多選
用例來執行,並能看到一個具體的報告,有了這一步,後續整合測試集和測試計劃就易如反掌了。
MQ/celery?
其實是可以用mq的方式去執行用例,使用者選定了一批用例,直接往mq裡面塞就完事
這樣的好處就是耦合度大大降低,我們的後端服務和消費者是完全分開的,就算要這麼玩,消費者也不會用Python
來做。這樣我們在後端服務上線的時候不會影響到執行結果
。
不過這麼做其實增加了我們系統的複雜度,這是我不想要的。
我們還是先觀察下Python批量執行case的效率吧!
普通方式
先編寫一個同步版本
的批量執行方法。
由於我的run
方法已經被改造為非同步方法了,所以這邊寫法是這麼寫,但其實還是同步
的執行過程。
程式碼很簡單,我們通過迴圈
執行每個case,然後把結果寫到data字典裡面,最後輸出具體的耗時
(只是測試用)。
可以看到,在本地資料庫+我的高配置機器加持下還是需要30多秒執行100來個用例。其實已經能夠接受
不只是http有非同步庫
其實mysql也有個非同步庫: aiomysql,所以我們需要先安裝依賴:
pip3 install aiomysql
這個庫可以嵌入到sqlalchemy,因為sqlalchemy1.4以上已經支援了asyncio(我個人認為這是一個大的趨勢,能快為啥要慢
呢?如果Python有很快的速度+極高的開發效率,不說大型業務服務,起碼測試平臺的市場是可以拿捏的四死的!)
可能因為我最近Java寫的比較多,處理巢狀很深的JSON,需要定義各種class,要不就是各種轉換型別,難受啊。
- config.py新增非同步SQLALCHEMY_URI
ASYNC_SQLALCHEMY_URI = f'mysql+aiomysql://{MYSQL_USER}:{MYSQL_PWD}@{MYSQL_HOST}:{MYSQL_PORT}/{DBNAME}'
- 改造同步方法為非同步,以獲取測試用例方法為例
- 需要改為async方法
- with語句要改為async with
- select(表).where(條件),需要用async_session.execute呼叫
- 拿資料用result.scalars.first()或者all()都可以,和以前幾乎一樣
改造之後
雖然沒快太多,但是也是有明顯進步的,我已經把case執行的方法
裡面的db操作全部改為了非同步。
不得不感嘆,fastapi還是快的呀!
具體的細節可以參看我的專案: https://github.com/wuranxu/pity。點選閱讀原文
可以看到整個文章哦!