locust 新手問下 locust 自定義一個 socket 客戶端該如何實現
最近想學習一下 locust 跑一下壓測,locust 本身不支援 socket,所以打算按照文件裡自定義 xml-rpc 的方法自己先寫一個簡單的試試手。發現客戶端在 getattr 里加入 wrapper 後執行會丟擲一個 Nonetype 的錯誤,找了很久資料不知道如何解決,希望 testhome 的各位大佬能給點意見,如果有簡易版的實現方法能讓我參考一下就更好了。谷歌到的要麼是 websocket 的要麼是完全不能用的程式碼。
服務端程式碼
#-*- coding:utf-8 -*-
import time
import socket
import threading
def tcplink(sock, addr):
msg = 'welcome'
sock.send(msg.encode())
while True:
try:
data = sock.recv(1024).decode()
time.sleep(1)
if data == 'exit' or not data:
break
sock.send('hello {}'.format(data).encode())
except Exception as e:
print(e)
break
sock.close()
print('connect close from {}'.format(addr))
def main():
addr = ('127.0.0.1', 9999)
tctime = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tctime.bind(addr)
tctime.listen(3)
print('waiting for connection')
while True:
sock, addr = tctime.accept()
print('new connect from {}'.format(addr))
t = threading.Thread(target=tcplink, args=(sock, addr))
t.start()
main()
客戶端程式碼
import time
import random
import socket
from locust import User, TaskSet, events, task, event, HttpUser
from locust_plugins import run_single_user
class TcpSocketClient(socket.socket):
_locust_environment = None
def __init__(self, af_inet, socket_type):
print('start init tcp socekt')
super().__init__(af_inet, socket_type)
def __getattr__(self, item):
func = socket.socket.__getattr__(self, item)
print('is it tcp wrapper')
def wrapper(*args, **kwargs):
start_time = time.time()
try:
result = func(*args, **kwargs)
except Exception as e:
total_time = int((time.time() - start_time) * 1000)
self._locust_environment.events.request_failure.fire(request_type="tcpsocket", name=item,
response_time=total_time, exception=e)
else:
total_time = int((time.time() - start_time) * 1000)
print(total_time, 'total time is ')
self._locust_environment.events.request_success.fire(request_type="tcpsocket", name=item,
response_time=total_time, response_length=0)
return result
return wrapper
class TcpSocketLocust(User):
abstract = True
def __init__(self, *args, **kwargs):
print('it is tcpsocket locust')
super().__init__(*args, **kwargs)
self.client = TcpSocketClient(socket.AF_INET, socket.SOCK_STREAM)
self.client._locust_environment = self.environment
ADDR = ('127.0.0.1', 9999)
self.client.connect(ADDR)
class TcpTestUser(TcpSocketLocust):
min_wait = 10
max_wait = 20
@task
def send_data(self):
msg = "User"
self.client.send(msg.encode())
data = self.client.recv(1024).decode()
print(data)
if __name__ == '__main__':
run_single_user(TcpTestUser)
丟擲的 error
Traceback (most recent call last):
File "D:/test-project/locustTcp.py", line 64, in <module>
run_single_user(TcpTestUser)
File "D:\test-project\venv\lib\site-packages\locust_plugins\debug.py", line 61, in run_single_user
locust_class(env).run()
File "D:/test-project/locustTcp.py", line 46, in __init__
self.client.connect(ADDR)
File "D:\test-project\venv\lib\site-packages\gevent\_socket3.py", line 405, in connect
err = self.getsockopt(SOL_SOCKET, SO_ERROR)
TypeError: 'NoneType' object is not callable
相關文章
- locust+influxdb+grafana 實現自定義測試報告UXGrafana測試報告
- 如何用Java Socket實現一個簡單的Redis客戶端JavaRedis客戶端
- Locust如何實現逐步負載?負載
- Locust 斷言的實現?
- 深入淺出 Locust 實現
- Locust 程式碼指令碼實現指令碼
- locust 使用的疑問
- locust 如何引數化?
- C語言透過socket實現TCP客戶端C語言TCP客戶端
- 2020-09-30Socket 一個伺服器監聽多個客戶端 功能實現伺服器客戶端
- locust多程序實現分散式壓測遇到的問題分散式
- Spring Cloud Netflix—自定義Ribbon客戶端SpringCloud客戶端
- Python socket的客戶端Python客戶端
- Locust效能測試實踐
- 【SpringCloud】Ribbon如何自定義客戶端配置和全域性配置SpringGCCloud客戶端
- locust壓測
- php原生socket實現客戶端與服務端資料傳輸PHP客戶端服務端
- 如何提高 Locust 的壓測效能
- Locust 從入門到實戰
- C/S(socket、執行緒 實現多個客戶端、伺服器端簡易通訊)執行緒客戶端伺服器
- socket實現服務端多執行緒,客戶端重複輸入服務端執行緒客戶端
- 魔改 locust:基於 locust 和 boomer 核心,構建一個簡單 http 介面壓測共享平臺OOMHTTP
- 實現一個clickhouse tcp協議客戶端驅動TCP協議客戶端
- Linux下簡單的ACE socket客戶端和伺服器端Linux客戶端伺服器
- 如何建立一個Java遊戲客戶端Java遊戲客戶端
- Laravel後臺作為客戶端,socket.io作為服務端,App或其他作為另一個客戶端Laravel客戶端服務端APP
- Locust 執行原理分析
- Locust 任務巢狀巢狀
- Easy-locust Web 版本Web
- 客戶端骨架屏實現客戶端
- 實現伺服器和客戶端資料互動,Java Socket有妙招伺服器客戶端Java
- .net socket.io客戶端使用過程客戶端
- Locust 壓測websocket協議Web協議
- Locust 多種執行方式
- Locust 任務指令碼初探指令碼
- jQuery實現客戶端CheckAll功能jQuery客戶端
- 聊聊springboot專案如何實現自定義actuator端點Spring Boot
- python實現兩臺不同主機之間進行通訊(客戶端和服務端)——SocketPython客戶端服務端