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併發與持續性壓測JMeter
- Jmeter效能測試:高併發分散式效能測試JMeter分散式
- 使用 jMeter 對需要 User Authentication 的 Restful API 進行併發負載測試JMeterRESTAPI負載
- java多執行緒與併發 - 併發工具類Java執行緒
- jmeter介面效能測試-高併發分散式部署JMeter分散式
- python+selenium grid 併發執行測試用例,不能併發Python
- 執行緒併發總結執行緒
- java併發與執行緒Java執行緒
- 使用jMeter對基於SAP ID service進行Authentication的Restful API進行併發測試JMeterRESTAPI
- 聊聊 Jmeter 如何併發執行 Python 指令碼JMeterPython指令碼
- goroutine併發執行多個任務並依次返回結果Go
- Java併發(一)----程式、執行緒、並行、併發Java執行緒並行
- Python多執行緒併發的簡單測試Python執行緒
- 我編的併發執行緒壓力測試工具執行緒
- Java併發指南1:併發基礎與Java多執行緒Java執行緒
- JMeter 測試元件介紹 - 物聯網大併發測試實戰 02JMeter元件
- 使用jMeter構造大量併發HTTP請求進行微服務效能測試JMeterHTTP微服務
- 併發與多執行緒基礎執行緒
- 多執行緒與併發----Semaphere同步執行緒
- [測試分析] for與foreach 執行效率測試結果 (轉)
- apache ap 併發測試工具Apache
- 執行緒 並行 與 併發 的區別執行緒並行
- netty建立聊天室服務端及單機併發測試結果Netty服務端
- 併發程式設計與執行緒安全程式設計執行緒
- 多執行緒與併發----讀寫鎖執行緒
- 多執行緒與高併發(二)執行緒安全執行緒
- 併發與多執行緒之執行緒安全篇執行緒
- 開源測試工具 JMeter 介紹 - 物聯網大併發測試實戰 01JMeter
- Java多執行緒與併發程式設計總結(一)Java執行緒程式設計
- 求教:jboss對多執行緒併發的支援執行緒
- 66.QT-執行緒併發、QTcpServer併發、QThreadPool執行緒池QT執行緒TCPServerthread
- JAVA多執行緒併發Java執行緒
- 程式併發執行的特徵特徵
- 併發執行hang問題
- Java併發和多執行緒1:併發框架基本示例Java執行緒框架
- Java併發(四)----執行緒執行原理Java執行緒
- Java併發實戰一:執行緒與執行緒安全Java執行緒