locust+python高并发压测总结
locust+python全链路压测总结
1. 什么是接口?
为系统提供数据服务的叫做接口(Interface)
locust安装
pip install locust
安装完成后:locust -h查看是否安装成功
2. 如何编写locust脚本?
编写locust脚本主要分为以下几个步骤:
- 导入Locust类
- 定义用户行为
- 定义任务
- 运行脚本
2.1 导入Locust类
from locust import HttpUser, task, between
2.2 定义用户行为
class MyUser(HttpUser):
wait_time = between(1, 2)
@task
def my_task(self):
self.client.get("/api/users")
2.3 定义任务
class MyUser(HttpUser):
wait_time = between(1, 2)
@task
def my_task(self):
self.client.get("/api/users")
2.4 运行脚本
from locust import HttpUser, task, between
class MyUser(HttpUser):
wait_time = between(1, 2)
@task
def my_task(self):
self.client.get("/api/users")
# 运行脚本:locust -f my_locust_script.py --host=http://example.com
3. 如何运行locust脚本?
运行locust脚本有两种方式:
- 命令行运行:locust -f my_locust_script.py --host=http://example.com
- 代码运行:
from locust import runners
def main():
# 运行脚本
runners.locust_runner.run_locust_file("my_locust_script.py", host="http://example.com")
if __name__ == "__main__":
main()
4. 如何分析locust脚本的性能?
locust提供了一些性能分析工具,包括:
- 统计信息:locust -f my_locust_script.py --host=http://example.com --stats-csv=stats.csv
- 分析统计信息:locust -f my_locust_script.py --host=http://example.com --csv=stats.csv --no-web --only-summary
- 分析统计信息:locust -f my_locust_script.py --host=http://example.com --csv=stats.csv --no-web --only-summary --show-task-ratio
- 分析统计信息:locust -f my_locust_script.py --host=http://example.com --csv=stats.csv --no-web --only-summary --show-task-ratio --show-percentile-stats
5. 如何优化locust脚本?
- 优化用户行为:
- 减少并发用户数:通过设置并发用户数,可以控制脚本的并发用户数,减少脚本的压力。
- 优化请求:优化请求,可以提升脚本的吞吐量。
- 优化请求参数:优化请求参数,可以提升脚本的响应速度。
- 优化请求方式:优化请求方式,可以提升脚本的响应速度。
- 优化请求头:优化请求头,可以提升脚本的响应速度。
- 优化断言:优化断言,可以提升脚本的响应速度。
- 优化代码:优化代码,可以提升脚本的响应速度。
- 优化脚本:
- 优化代码结构:优化代码结构,可以提升脚本的响应速度。
- 优化代码逻辑:优化代码逻辑,可以提升脚本的响应速度。
- 优化代码性能:优化代码性能,可以提升脚本的响应速度。
- 优化代码配置:优化代码配置,可以提升脚本的响应速度。
- 优化代码环境:优化代码环境,可以提升脚本的响应速度。
- 优化代码部署:优化代码部署,可以提升脚本的响应速度。
- 优化服务器:
- 优化服务器硬件:优化服务器硬件,可以提升脚本的响应速度。
- 优化服务器软件:优化服务器软件,可以提升脚本的响应速度。
- 优化服务器网络:优化服务器网络,可以提升脚本的响应速度。
- 优化服务器负载:优化服务器负载,可以提升脚本的响应速度。
- 优化服务器配置:优化服务器配置,可以提升脚本的响应速度。
下面是部分优化代码:
@task(weight_t1)
def test_register_login(self):
# 注册用户(web)
uri = "/usercenter/v1/web/register/account"
username = "web" + random_data_time_string(rule="time_ms", return_str=True)
req_body = {
"user_name": username,
"coin_code": coin_code,
"password": default_pwd,
"application_id": application_id,
"use_type": 1,
"app": "web",
"invite_code": invite_code
}
with self.client.post(path=uri, headers=default_headers, json=req_body, catch_response=True) as responses:
if responses.status_code == 200 and responses.json().get("code") == 0:
responses.success()
else:
responses.failure("注册失败")