grequests 執行併發測試與 jmeter 併發結果對比
log:
背景
之前一段時間做效能測試的時候,用過 jmeter,使用 python3 寫過多執行緒/多程序指令碼,最後還使用了 locust 工具,但是最終的測試結果讓人有些迷茫,查詢了很多資料都說是 locust 比 jmeter 各種強大,但是在同樣單機的情況下,測試結果卻是 jmeter 給出的結果更直接。
分析
jmeter 是基於執行緒進行併發,就是一個執行緒就是一個使用者
locust 是基於協程,正常來說同樣的單機資源應該比 jmeter 更強,但是測試結果卻讓我有點迷(具體原理 xxx,懵的)
測試
這兩天就抽時間研究了下協程,然後發現有個 grequests 庫可以進行並行執行,平常用的 requests 是序列執行的,如果說在併發的時候有可能出現阻塞情況(畢竟是一個執行完在執行下一個),grequests 就不一樣,可以同時併發執行,上面說到的 locust 也在沒繼續測,深入瞭解過的朋友可以一起討論討論下這塊是為什麼。
1.寫了個測試用的介面,響應基本在十幾毫秒;
2.然後 500 併發,使用下面的指令碼和 jmeter 分別測試結果,發現 grequests 比 jmeter 併發的更優秀,具體結果大家可以自己親自測試體驗一下會更清楚。
絕對併發:在某個時間點同時觸發多個請求(品、細品)
相對併發:在某個時間段內,觸發了多個請求(在品,細品)
環境
python3
pip install grequests 庫
說明:grequests 是非同步非阻塞的非同步請求第三方包,使用了協程 gevent,GRequests 封裝了 gevent 的 requests 模組。
測試併發程式碼如下
# !/usr/bin/env python
# -*- encoding: utf-8 -*-
# @Author : yyq
import time
import grequests
from gevent.pool import Pool
def task():
qw = []
for we in range(500):
qw.append(grequests.get('http://172.19.0.239:5000/test/'))
print(we)
t1 = time.time()
print(t1)
list_req = grequests.map(qw)
print(time.time() - t1)
for i in list_req:
print(i.json(),i.status_code)
task()
測試的介面:
# !/usr/bin/env python
# -*- encoding: utf-8 -*-
# @Author : yyq
import time
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/test/')
def test():
print(time.ctime(), time.time())
time.sleep(1)
return jsonify({"success": "true"})
if __name__ == '__main__':
app.run(host='0.0.0.0')
相關文章
- 使用 jMeter 對 SAP Spartacus 進行併發效能測試JMeter
- 針對使用非塊執行和塊執行併發壓測對比
- python+selenium grid 併發執行測試用例,不能併發Python
- 介面效能測試 —— Jmeter併發與持續性壓測JMeter
- Jmeter模板化引數併發測試JMeter
- Jmeter效能測試:高併發分散式效能測試JMeter分散式
- 聊聊 Jmeter 如何併發執行 Python 指令碼JMeterPython指令碼
- 如何使用jMeter對某個OData服務進行高併發效能測試JMeter
- 使用 jMeter 對需要 User Authentication 的 Restful API 進行併發負載測試JMeterRESTAPI負載
- java多執行緒與併發 - 併發工具類Java執行緒
- jmeter介面效能測試-高併發分散式部署JMeter分散式
- 使用jMeter對基於SAP ID service進行Authentication的Restful API進行併發測試JMeterRESTAPI
- goroutine併發執行多個任務並依次返回結果Go
- Java併發(一)----程式、執行緒、並行、併發Java執行緒並行
- Java併發指南1:併發基礎與Java多執行緒Java執行緒
- 多執行緒與併發----Semaphere同步執行緒
- 併發與多執行緒基礎執行緒
- Java多執行緒與併發基礎面試題Java執行緒面試題
- 66.QT-執行緒併發、QTcpServer併發、QThreadPool執行緒池QT執行緒TCPServerthread
- 使用jMeter構造大量併發HTTP請求進行微服務效能測試JMeterHTTP微服務
- Java面試之多執行緒&併發篇Java面試執行緒
- JMeter 測試元件介紹 - 物聯網大併發測試實戰 02JMeter元件
- 執行緒 並行 與 併發 的區別執行緒並行
- 多執行緒與高併發(二)執行緒安全執行緒
- 併發與多執行緒之執行緒安全篇執行緒
- 多執行緒與併發----讀寫鎖執行緒
- Java多執行緒與併發之ThreadLocalJava執行緒thread
- 併發程式設計與執行緒安全程式設計執行緒
- 併發佇列ConcurrentLinkedQueue與LinkedBlockingQueue原始碼分析與對比佇列BloC原始碼
- Java面試之多執行緒&併發篇(2)Java面試執行緒
- Java面試之多執行緒&併發篇(5)Java面試執行緒
- Java面試之多執行緒&併發篇(3)Java面試執行緒
- Java面試之多執行緒&併發篇(4)Java面試執行緒
- Java面試之多執行緒&併發篇(6)Java面試執行緒
- Java面試之多執行緒&併發篇(8)Java面試執行緒
- Java面試之多執行緒&併發篇(9)Java面試執行緒
- Java面試之多執行緒&併發篇(7)Java面試執行緒
- 程式併發執行的特徵特徵