• Python locust模块


    locust模块做压力测试

    使用flask框架搭建的系统作为压测系统,压测前记得启动flask服务,参考上一个博客Flask框架

    上代码。这里以访问博客首页、创建博客和更新博客三个接口做压测

     1 from locust import HttpUser, TaskSet, task
     2 
     3 class WebsiteTasks(TaskSet):
     4 
     5     def on_start(self):
     6         """
     7         启动时调用执行一次
     8         :return:
     9         """
    10         self.client.post('/auth/login', {'username': 'admin', 'password': '123456'})
    11 
    12     @task      # @task(2) 在task后加上括号和数字是请求比例
    13     def index(self):
    14         self.client.get('/')
    15 
    16     @task
    17     def create(self):
    18         """
    19         新建博客
    20         :return:
    21         """
    22         payload = {'title': 'Third Blog','body': 'Hi this is my third blog'}
    23         self.client.post('/create', payload)
    24 
    25     @task     # 不指定比例,则为1:1
    26     def update(self):
    27         """
    28         更新第一个博客
    29         :return:
    30         """
    31         payload = {'title': 'update first test', 'body': 'the first blog has been updated.'}
    32         self.client.post('/1/update', payload)
    33 
    34 
    35 class WebsiteUser(HttpUser):
    36     tasks = [WebsiteTasks]    # 执行此类里的所有测试行为
    37     host = 'http://127.0.0.1:5000/'
    38     min_wait = 1000
    39     max_wait = 5000

    min_wait和max_wait为两次请求之间的间隔:1~5秒内的随机值

    写好代码后,通过命令行启动locust

    单进程运行模式

    在locust脚本所在的目录打开命令窗口,输入 locust -f locust_first.py -P 8889

    locust_first.py是脚本名,8889是打开locust图形界面的端口

    启动好locus后,在浏览器输入http://localhost:8889/ 

    三个参数,host为压测的host

     压测结果示例

    如果是分布式模式,在管理界面上会多一个worker的页面

     多进程分布式运行模式

    先启动master:

    locust -H http://xxx.com -f filename.py --master -P 8088

    再启动worker(原叫slave)

    locust -H http://xxx.com -f filename.py --worker     # master和worker在同一台机运行
    locust -H http://xxx.com -f filename.py --worker --master-host=启动master的机器IP    # master和worker不在同一台机运行

    有几个worker启动,master命令窗口就会显示Currently x clients ready to swarm

     

     把master和worker都启动后,再打开界面管理器,比单进程多了workers信息

    笔记

    """
    1 数据集
    在WebsiteUser定义一个数据集,所有虚拟用户在WebsiteTasks中都可以共享该数据集
    如果不要求数据唯一性,数据集选择list数据结构,从头到尾循环遍历即可;
    如果要求数据唯一性,数据集选择queue数据结构,取数据时进行queue.get()操作即可。
    queue也可做数据循环,每次取完后用queue.put_nowait(data)放回队尾

    2 检查点
    对响应的内容关键字进行assert xxx in response操作即可

    3 运行模式:单进程运行和多进程分布式运行

    3.1 单进程运行模式又分:无界面运行和有界面运行,用于调试脚本和小并发压测的情况
    3.1.1 无界面执行脚本命令: locust -f filename.py --headless -u 1 -r 1
    -f filename.py 指定执行locust脚本文件
    --headless 无界面模式,以前叫no_web,我用的是locust v2.8.5,已经改成headless了
    -u 1 指定并发数 1个
    -r 1 指定并发加压速率,默认值为1
    3.1.2 有界面执行脚本命令:locust -f filename.py -P 8089
    -f filename.py 指定执行locust脚本文件
    -H 127.0.0.1 被测系统的host,若在terminal执行,则不指定
    -P 8089 指定端口号

    3.2 多进程分布式运行
    3.2.1 高并发使用多进程分布式运行模式
    3.2.2 同一台压力机上开启多个worker情况。如果一台压力机有N个处理器内核,那么就在这台压力机上启动一个master,N个worker
    先启动master 命令:locust -H http://xxx.com -f filename.py --master -P 8088
    再启动worker(master和worker在同一台机) 命令:locust -H http://xxx.com -f filename.py --worker
    启动worker(master和worker不在同一台机):locust -H http://xxx.com -f filename.py --worker --master-host=启动master的机器IP
    3.2.3 master和slave启动完毕后,可以在浏览器中通过http://master机器ip:8089进入locust的web管理页面了
    """
  • 相关阅读:
    2015年10月28日 json深切感受
    2015年10月27日 json数据小谈
    2015年10月26日 插件的使用
    2015/10/25 用bootstrap selectpicker实现带模糊查询的下拉列表
    2015年10月24号 哇,原来这JSP页面还可以用这东西!
    2015年10月23日 关于spring mvc的初认识
    2015年10月22日 杂感
    2015/10/21 http请求数据处理后显示
    2015/10/19总结:ajax传参、jquery.validate自定义日期校验
    记录一下----关于设计模式和面向对象设计原则
  • 原文地址:https://www.cnblogs.com/sue2015/p/16111274.html
Copyright © 2020-2023  润新知