Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
T
tool_stress_test_chatbot_canifa
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Vũ Hoàng Anh
tool_stress_test_chatbot_canifa
Commits
b1cde70d
Commit
b1cde70d
authored
Jan 27, 2026
by
root
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix: use correct mock API paths in locust
parent
f8dec13f
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
129 additions
and
0 deletions
+129
-0
locustfile.py
locustfile.py
+129
-0
No files found.
locustfile.py
0 → 100644
View file @
b1cde70d
"""
Locust Load Test - Canifa Chatbot API
Run: locust -f locustfile.py --host=http://localhost:5000
"""
import
random
from
locust
import
between
,
events
,
task
from
locust.contrib.fasthttp
import
FastHttpUser
# ============ CUSTOM UI PARAMETER ============
@
events
.
init_command_line_parser
.
add_listener
def
_
(
parser
):
parser
.
add_argument
(
"--api-target"
,
choices
=
[
"All"
,
"MockAgentChat"
,
"RealDBSearch"
,
"RealRetrieverDB"
],
default
=
"All"
,
help
=
"Chọn API cụ thể để stress test"
,
)
# ============ SAMPLE TEST DATA ============
SAMPLE_QUERIES
=
[
"Tìm áo sơ mi nam công sở"
,
"Quần jeans nữ skinny"
,
"Áo khoác da nam cao cấp"
,
"Đầm dự tiệc sang trọng"
,
"Giày thể thao chạy bộ"
,
"Túi xách nữ da thật"
,
"Áo thun nam basic"
,
"Váy công sở nữ"
,
"Áo len nữ mùa đông"
,
"Giày cao gót nữ 7cm"
,
"Quần short nam mùa hè"
,
"Balo laptop chống nước"
,
"Áo polo nam trơn"
,
"Chân váy bút chì"
,
"Áo hoodie unisex"
,
]
SAMPLE_MAGENTO_CODES
=
[
"10001001"
,
"10001002"
,
"10001003"
,
"10002001"
,
"10002002"
,
]
PRICE_RANGES
=
[
{
"min"
:
None
,
"max"
:
None
},
{
"min"
:
100000
,
"max"
:
500000
},
{
"min"
:
500000
,
"max"
:
1000000
},
{
"min"
:
1000000
,
"max"
:
2000000
},
]
# ============ MAIN LOAD TEST CLASS ============
class
CanifaStressTestUser
(
FastHttpUser
):
"""Single User Class with API Selection"""
# Người dùng đọc + gõ mất khoảng 15 đến 25 giây rồi mới gửi câu tiếp theo
wait_time
=
between
(
15
,
25
)
def
on_start
(
self
):
self
.
user_id
=
f
"locust_user_{random.randint(1000, 9999)}"
self
.
session_id
=
f
"session_{random.randint(10000, 99999)}"
# Lấy giá trị từ giao diện Web
self
.
api_target
=
self
.
environment
.
parsed_options
.
api_target
# --- LOGIC CÁC API ---
def
run_mock_chat
(
self
):
query
=
random
.
choice
(
SAMPLE_QUERIES
)
payload
=
{
"user_query"
:
query
,
"user_id"
:
self
.
user_id
,
"session_id"
:
self
.
session_id
,
}
self
.
client
.
post
(
"/api/mock/agent/chat"
,
json
=
payload
,
name
=
"[API] Mock Agent Chat"
)
def
run_db_search
(
self
):
query
=
random
.
choice
(
SAMPLE_QUERIES
)
price_range
=
random
.
choice
(
PRICE_RANGES
)
payload
=
{
"query"
:
query
,
"price_min"
:
price_range
[
"min"
],
"price_max"
:
price_range
[
"max"
],
"top_k"
:
10
,
}
self
.
client
.
post
(
"/api/mock/db/search"
,
json
=
payload
,
name
=
"[API] Real DB Search"
)
def
run_retriever
(
self
):
query
=
random
.
choice
(
SAMPLE_QUERIES
)
payload
=
{
"user_query"
:
query
,
"user_id"
:
self
.
user_id
,
"session_id"
:
self
.
session_id
,
}
self
.
client
.
post
(
"/api/mock/retrieverdb"
,
json
=
payload
,
name
=
"[API] Real Retriever"
)
# --- TASK DISPATCHER ---
@
task
def
dispatcher
(
self
):
target
=
self
.
api_target
if
target
==
"MockAgentChat"
:
self
.
run_mock_chat
()
elif
target
==
"RealDBSearch"
:
self
.
run_db_search
()
elif
target
==
"RealRetrieverDB"
:
self
.
run_retriever
()
else
:
# "All"
# Random chọn 1 trong 3 theo tỷ lệ (3:2:1)
choice
=
random
.
choices
([
"chat"
,
"search"
,
"retriever"
],
weights
=
[
3
,
2
,
1
])[
0
]
if
choice
==
"chat"
:
self
.
run_mock_chat
()
elif
choice
==
"search"
:
self
.
run_db_search
()
else
:
self
.
run_retriever
()
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment