python 寫一個性能測試工具(一)
國慶重新學習了一下go的gin高性能測試框架。
用JMeter來測試gin與flask接口的性能,差別很大。
為什么我自己不嘗試寫一個性能工具,性能工具的核心就是 并發(fā) 和 請求。
請求可以選擇Python的requests庫。
并發(fā)可以通過python的 進程、線程、協(xié)程模擬。
這么一想,也不是很難了,上手擼一個。
依賴庫
requests==2.22.0gevent==20.9.0numpy==1.19.2
requests 大家并不陌生,HTTP請求庫。
gevent是python協(xié)程庫,通過協(xié)程模擬并發(fā)更節(jié)省資源,在同樣配置下能模擬更多的并發(fā)。
numpy 是python的數(shù)據(jù)計算庫,提供大量組數(shù)和矩陣運算,這里用它求列表的平均值。
實現(xiàn)腳本
好了,接下來開始上手寫代碼了。
from __future__ import print_functionimport timeimport geventfrom gevent import monkeymonkey.patch_all()import requestsfrom numpy import meanusers = 10 # 用戶數(shù)numbers = 100 # 請求次數(shù)req_url = 'http://127.0.0.1:8080/user/tom' # 請求URLprint('請求URL: {url}'.format(url=req_url))print('用戶數(shù):{},循環(huán)次數(shù): {}'.format(users, numbers))print('============== Running ===================')pass_number = 0fail_number = 0run_time_list = []def running(url): global fail_number global pass_number for _ in range(numbers): start_time = time.time() r = requests.get(url) if r.status_code == 200: pass_number = pass_number + 1 print('.', end='') else: fail_number = fail_number + 1 print('F', end='') end_time = time.time() run_time = round(end_time - start_time, 4) run_time_list.append(run_time)jobs = [gevent.spawn(running, req_url) for _url in range(users)]gevent.wait(jobs)print('n============== Results ===================')print('最大: {} s'.format(str(max(run_time_list))))print('最小: {} s'.format(str(min(run_time_list))))print('平均: {} s'.format(str(round(mean(run_time_list), 4))))print('請求成功', pass_number)print('請求失敗', fail_number)print('============== end ===================')
設計思路
在JMeter中創(chuàng)建線程組有兩個參數(shù) 線程數(shù)和 循環(huán)數(shù),即 用戶數(shù) 和請求數(shù),設置多少個用戶,每個用戶用戶跑多少次,用戶數(shù)通過協(xié)程模擬,每次用戶運行次數(shù)通過for循環(huán)實現(xiàn)。
至于請求就比較簡單了,直接通過requests發(fā)送請求。通過判斷影響的狀態(tài)碼是否為200來判斷是否成功,通過分別計算成功和失敗的請求個數(shù)。
關于請求時間統(tǒng)計,在每次請求前后獲得當前時間戳,然后計算時間差就是單個接口的調(diào)用時間。最大,最小,平均通過計算就可輕松的得到。
> python3 ab.py請求URL: http://127.0.0.1:8080/user/tom用戶數(shù):10,循環(huán)次數(shù): 100============== Running ===================........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................============== Results ===================最大: 0.0352 s最小: 0.0036 s平均: 0.0204 s請求成功 1000請求失敗 0============== end ===================
后續(xù)
把ab.py腳本做成 ab 命令行工具。
支持更多的請求類型(get/post/put/delete)和參數(shù)。
更多統(tǒng)計維度,吞吐量、吞吐率
增加啟動時間,思考時間等
...
以上就是python 寫一個性能測試工具(一)的詳細內(nèi)容,更多關于python 性能測試工具的資料請關注好吧啦網(wǎng)其它相關文章!
相關文章:
1. Android table布局開發(fā)實現(xiàn)簡單計算器2. IntelliJ IDEA安裝插件的方法步驟3. 理解PHP5中static和const關鍵字4. php模擬實現(xiàn)斗地主發(fā)牌5. spring acegi security 1.0.0 發(fā)布6. MyBatis中的JdbcType映射使用詳解7. vue 使用localstorage實現(xiàn)面包屑的操作8. Python random庫使用方法及異常處理方案9. .Net Core使用Coravel實現(xiàn)任務調(diào)度的完整步驟10. Vuex localStorage的具體使用

網(wǎng)公網(wǎng)安備