概述
与其它性能测试工具对比
安装配置
启动方法
# master
locust -f reward_locust.py --master --host=http://jf.baice100.com --web-host=172.31.1.3
# slave
locust -f reward_locust.py --slave --master-host=172.31.1.3
使用方法
实例-轻电商搜索接口
背景
- 测试轻电商搜索接口,http://app.qa.zhengshihui.cn:8000/search/query?pageIndex=1&sortType=smart&pageSize=20&keyword=%E7%9F%AD%E8%A2%96
- 有一个已知的搜索词列表,每次调用需要随机更改搜索次
- 请求有固定的header格式
测试计划
- 整理接口,确认要测试的接口和个性化需求,比如是否需要替换指定参数?对结果是否需要进行特定判断?
- 与开发确认测试指标
- 都要关注那些指标?QPS?平均响应时间?错误率?95% line?
- 每一项的标准是什么?达到什么标准算是合格?
- 确认测试方法
- 起始并发设置为多少?后续逐步增加的间隔、每次增加并发数量?
- 测试多长时间?
脚本编写
-
导入后续功能需要的包
from locust import HttpLocust, TaskSet, task
import time
import random
from urllib import parse
|
-
搜索关键词列表保存在一个叫ruchan.txt的文件文件中,依次读入
def get_key_word():
words = []
with open('ruchan.txt', 'r', encoding='UTF-8') as fp:
for line in fp:
words.append(parse.quote(line.encode('utf-8')))
return words
key_words = get_key_word()
|
关注这里不是简单读入,而是对起进行了编码,这是因为这个接口对搜索关键词进行了编码处理
这种处理每个接口可能都不一致,需要具体分析、处理

-
设置请求时headers
headers = {
'api-version': '1.0',
'device-type': 'android',
'version': '0.9.0',
'device-id': '00000000-4767-079f-0000-000011390a37',
'session-id': 'app_8fu6m19ntnmppct855daqf3s55',
'Host': 'app.qa.zhengshihui.cn:8000',
'Connection': 'Keep-Alive',
'Accept-Encoding': 'gzip',
'User-Agent': 'okhttp/3.6.0'
}
|
-
添加一个UserBehavior类,具体执行测试动作
class UserBehavior(TaskSet):
@task(1)
def test_search(self):
key_word = random.choice(key_words)
path = f'/search/query?pageIndex=1&sortType=smart&pageSize=20&keyword={key_word}'
resp = self.client.post(path, headers=headers, name='轻电商-搜索接口')
print(f'status code: {resp.status_code}, elapsed: {resp.elapsed.total_seconds()}')
|
-
增加一个WebsiteUser类,这个保持原样就好,不用改
class WebsiteUser(HttpLocust):
task_set = UserBehavior
|
-
添加一个main方法。最终的代码如附件所示:earnbenefit.zip
if __name__ == '__main__':
import os
executable = __file__
cmd = f'locust -f {executable} --host={host} --web-host=0.0.0.0 --port=8080'
os.system(cmd)
|
- 使用python test_perf_earnbenefit_search.py运行起来

- 打开http://localhost:8080/,填入运行参数
这组参数的含义是,目标并发是10,点击开始后每秒钟增加一个,直到10个并发为止,之后一直以10个并发进行请求

- 启动,查看测试结果
运行过程中,可以查看fiddler,确认响应结果正确

- 结束的时候,在运行python的窗口中ctrl + c,会输出本次运行的汇总信息,这个也需要保存起来,95% line等信息需要从这里获取
