locust性能测试

 

概述

与其它性能测试工具对比

安装配置

  • pip install locustio

启动方法

# 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

使用方法

实例-轻电商搜索接口

背景

  1. 测试轻电商搜索接口,http://app.qa.zhengshihui.cn:8000/search/query?pageIndex=1&sortType=smart&pageSize=20&keyword=%E7%9F%AD%E8%A2%96
  2. 有一个已知的搜索词列表,每次调用需要随机更改搜索次
  3. 请求有固定的header格式

测试计划

  1. 整理接口,确认要测试的接口和个性化需求,比如是否需要替换指定参数?对结果是否需要进行特定判断?
  2. 与开发确认测试指标
    1. 都要关注那些指标?QPS?平均响应时间?错误率?95% line?
    2. 每一项的标准是什么?达到什么标准算是合格?
  3. 确认测试方法
    1. 起始并发设置为多少?后续逐步增加的间隔、每次增加并发数量?
    2. 测试多长时间?

脚本编写

  1. 导入后续功能需要的包

    # coding:utf-8
    from  locust  import  HttpLocust, TaskSet, task
    import  time
    import  random
    from  urllib  import  parse
  2. 搜索关键词列表保存在一个叫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()

    关注这里不是简单读入,而是对起进行了编码,这是因为这个接口对搜索关键词进行了编码处理

    这种处理每个接口可能都不一致,需要具体分析、处理

  3. 设置请求时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'
    }
  4. 添加一个UserBehavior类,具体执行测试动作

    class  UserBehavior(TaskSet):
         
         #声明这是一个测试方法,里面的1是权重
         @task ( 1 )
         def  test_search( self ):
             # 随机获取一个搜索关键词
             key_word  =  random.choice(key_words)
             
             # 请求的具体路径,使用f-string的方式,将需要改变的参数写成keyword={key_word}的形式,这里的key_word就会直接使用上一步获取到的随机搜索关键词
             path  =  f '/search/query?pageIndex=1&sortType=smart&pageSize=20&keyword={key_word}'
      
             # 使用指定的路径、header发送请求,获取响应
             # name是给这个接口测试起个名字,这个名字后续会体现在测试结果页面中
             resp  =  self .client.post(path, headers = headers, name = '轻电商-搜索接口' )
      
             # 非必须,在控制台中输出一些自己感兴趣的信息,这里输出了返回的状态码和响应时间
             print (f 'status code: {resp.status_code}, elapsed: {resp.elapsed.total_seconds()}' )
  5. 增加一个WebsiteUser类,这个保持原样就好,不用改

    class  WebsiteUser(HttpLocust):
         task_set  =  UserBehavior
  6. 添加一个main方法。最终的代码如附件所示:earnbenefit.zip

    if  __name__  = =  '__main__' :
         import  os
         executable  =  __file__
      
         # 待测试的域名
         host  =  "http://app.qa.zhengshihui.cn:8000"
      
         # 需要执行的命令行
         cmd  =  f 'locust -f {executable} --host={host} --web-host=0.0.0.0 --port=8080'
         os.system(cmd)
  7. 使用python test_perf_earnbenefit_search.py运行起来
  8. 打开http://localhost:8080/,填入运行参数
    这组参数的含义是,目标并发是10,点击开始后每秒钟增加一个,直到10个并发为止,之后一直以10个并发进行请求
  9. 启动,查看测试结果
    运行过程中,可以查看fiddler,确认响应结果正确
  10. 结束的时候,在运行python的窗口中ctrl + c,会输出本次运行的汇总信息,这个也需要保存起来,95% line等信息需要从这里获取


 

猜你喜欢

转载自www.cnblogs.com/QaStudy/p/11791183.html