Skip to content

Commit 17731a8

Browse files
authored
add concurrency cases (PaddlePaddle#3689)
1 parent 2a73a6d commit 17731a8

2 files changed

Lines changed: 118 additions & 0 deletions

File tree

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
#!/bin/env python3
2+
# -*- coding: utf-8 -*-
3+
# @author DDDivano
4+
# encoding=utf-8 vi:ts=4:sw=4:expandtab:ft=python
5+
6+
7+
import concurrent.futures
8+
from collections import Counter
9+
10+
from core import TEMPLATE, URL, build_request_payload, send_request
11+
12+
13+
def test_concurrency():
14+
"""
15+
并发测试:
16+
同时发起 10 条请求,校验返回码是否为 5 个 200 和 5 个 429。
17+
--max-num-seqs 128 \
18+
--tensor-parallel-size 1 \
19+
--max-concurrency 5 \
20+
"""
21+
22+
data = {
23+
"stream": False,
24+
"messages": [
25+
{"role": "user", "content": "1+1=? 直接回答"},
26+
],
27+
"max_tokens": 1000,
28+
"temperature": 0.8,
29+
"top_p": 0,
30+
}
31+
32+
def send_one_request(i):
33+
payload = build_request_payload(TEMPLATE, data)
34+
response = send_request(URL, payload)
35+
print(f"请求 {i} 返回码: {response.status_code}")
36+
return response.status_code
37+
38+
# 并发执行 10 个请求
39+
with concurrent.futures.ThreadPoolExecutor(max_workers=10) as executor:
40+
futures = [executor.submit(send_one_request, i) for i in range(10)]
41+
results = [f.result() for f in futures]
42+
43+
# 统计返回码
44+
counter = Counter(results)
45+
count_200 = counter.get(200, 0)
46+
count_429 = counter.get(429, 0)
47+
48+
print(f"统计结果: 200={count_200}, 429={count_429}, 全部结果={results}")
49+
50+
# 校验必须是 5 个 200 和 5 个 429
51+
assert count_200 == 5, f"200 数量错误: {count_200}"
52+
assert count_429 == 5, f"429 数量错误: {count_429}"
53+
54+
print("并发请求校验通过")
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
#!/bin/env python3
2+
# -*- coding: utf-8 -*-
3+
# @author DDDivano
4+
# encoding=utf-8 vi:ts=4:sw=4:expandtab:ft=python
5+
6+
7+
import concurrent.futures
8+
from collections import Counter
9+
10+
from core import TEMPLATE, URL, build_request_payload, send_request
11+
12+
13+
def test_waiting_time():
14+
"""
15+
并发测试:
16+
同时发起 1333 条请求。
17+
校验所有返回码统计,且数量总和必须等于 1333。
18+
额外校验:200 的数量必须小于 1333。
19+
--max-num-seqs 128 \
20+
--tensor-parallel-size 1 \
21+
--max-concurrency 5000 \
22+
--max-waiting-time 1 \
23+
"""
24+
25+
data = {
26+
"stream": False,
27+
"messages": [
28+
{"role": "user", "content": "1+1=? 直接回答"},
29+
],
30+
"max_tokens": 10000,
31+
"metadata": {
32+
"min_tokens": 99,
33+
},
34+
"temperature": 0.8,
35+
"top_p": 0,
36+
}
37+
38+
def send_one_request(i):
39+
payload = build_request_payload(TEMPLATE, data)
40+
response = send_request(URL, payload)
41+
print(f"请求 {i} 返回码: {response.status_code}")
42+
return response.status_code
43+
44+
# 并发执行 1333 个请求
45+
with concurrent.futures.ThreadPoolExecutor(max_workers=1333) as executor:
46+
futures = [executor.submit(send_one_request, i) for i in range(1333)]
47+
results = [f.result() for f in futures]
48+
49+
# 统计所有返回码
50+
counter = Counter(results)
51+
print("返回码统计结果:")
52+
for code, cnt in sorted(counter.items()):
53+
print(f" {code}: {cnt}")
54+
55+
# 校验返回总数
56+
total = sum(counter.values())
57+
assert total == 1333, f"返回数量不一致,总数={total}, 期望=1333"
58+
59+
# 校验 200 数量必须小于 1333
60+
count_200 = counter.get(200, 0)
61+
assert count_200 < 1333, f"200 数量错误,应小于1333,实际={count_200}"
62+
assert count_200 >= 1024, f"200 数量错误,应大于等于1024,实际={count_200}"
63+
64+
print("并发请求校验通过")

0 commit comments

Comments
 (0)