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