db-lab1/test/scripts/ws_test.py

64 lines
1.7 KiB
Python

import asyncio
from multiprocessing import Process
import requests
import websockets
import random
import uuid
from time import time
from pprint import pprint
P = 100
def test():
async def fun(uri):
session = requests.session()
n = random.randint(1, 5)
# print(n)
for i in range(1, n + 1):
session_id = str(uuid.uuid4())
ret = session.post("http://localhost:8080/send", json={"id": session_id}).json()
# print(ret)
# print({'cnt': i, 'response': {'echo': {'request': {'id': session_id}}}})
if {'cnt': i, 'response': {'echo': {'request': {'id': session_id}}}} != ret:
print('post test failed!')
sess_id = session.cookies['bsessionid']
# print("session id:", sess_id)
async with websockets.connect(uri, extra_headers={'Cookie': f"bsessionid={sess_id}"}) as websocket:
cnt = int(await websocket.recv())
# print(cnt)
if cnt != n:
print('incorrect cnt')
m = random.randint(5, 10)
for _ in range(m):
session_id = str(uuid.uuid4())
await websocket.send(session_id)
ret = await websocket.recv()
if session_id != ret:
print('ws test failed')
asyncio.get_event_loop().run_until_complete(
fun("ws://localhost:8080/echo")
)
if __name__ == '__main__':
processes = [Process(target=test) for _ in range(P)]
print('starting')
start = time()
for p in processes:
p.start()
for p in processes:
p.join()
end = time()
print('test ended')
print('elapsed: ', end - start)