概述
与其它性能测试工具对比
安装配置
启动方法
# 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等信息需要从这里获取