首页 > 其他 > 详细

locust性能测试

时间:2019-11-04 12:40:57      阅读:126      评论:0      收藏:0      [点我收藏+]

 

 

概述

与其它性能测试工具对比

安装配置

  • 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__
      
        # 待测试的域名
      
        # 需要执行的命令行
        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等信息需要从这里获取
    技术分享图片

 

locust性能测试

原文:https://www.cnblogs.com/QaStudy/p/11791183.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!