python+locust

一、Locust 简介

        Locust又名蝗虫,寓意需要较小的硬件资源,提供大量级的并发访问量,是一个基于事件的负载工具,使用协程的方式,Locust 0.14.6以后的版本必须要使用Python 3.6及以上的版本,Locust 0.* 小于等于0.14.6,Locust 1.* 大于等于1.0,且2个版本类型的用法不兼容,执行命令差异,同一个物理环境不能同时存在Locust 0.和Locust 1.,Locust相关资源的下载地址。

        Python官网:https://www.locust.io
        Microsoft Visual C++ 14.0:https://www.python.org/downloads/release/python-380/

二、Python国内镜像源

        阿里云:https://mirrors.aliyun.com/pypi/simple
        清华大学:https://pypi.tuna.tsinghua.edu.cn/simple
        中国科技大学:<u>https://pypi.mirrors.ustc.edu.cn/simple</u>

[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host=mirrors.aliyun.com

(1) Linux环境

        修改 ~/.pip/pip.conf (没有就创建一个文件夹及文件。文件夹要加“.”,表示是隐藏文件夹),文件内容如上所示。

(2) Windows环境

        直接在 %userprofile% 目录中创建一个 pip目录,再新建文件 pip.ini,文件内容如上所示。

三、Locust 环境

资源简介 安装命令
查询安装的三方库 pip list
安装指定版本locust pip install locustio==0.14.6 这是0.*目前最后一个版本
安装locust 1.* pip install locust
安装VC++依赖包 Locust简介中VC++下载地址安装选择使用的C++桌面开发工具
执行命令 执行locust脚本命令实例 命令介绍
-H 或 --host locust -f locustmode.py --host https://www.python.org:8080 指定被测服务器的IP及端口号,执行类中定义了可以不用写。
-P 或 --port 或 --web-port locust -f locustmode.py --port 8000 指定locust启动的端口,--port在l.*版本不支持
--web-host locust -f locustmode.py --web-host 192.168.1.100 指定locustweb访问ip
--step-load --step-clients --step-time locust -f locustmode.py --step-load 负载测试:对服务器进行阶梯式增加压力测试,仅限0.*版本
--step-load --step-users --step-time locust -f locustmode.py --step-load --step-users 1000 --step-time 10 负载测试:对服务器进行阶梯式增加压力测试,仅限1.*版本
--no-web -c -t locust -f locustmode.py --no-web -c 1000 -t 2 无UI模式必须配合其他参数使用,1.*版本变成了--headless
-c 或 -u locust -f locustmode.py --no-web -c 1000 -t 20s 无UI模式设置总的并发用户数且locust 1.*版本-c要改成-u
-t 或 --run-time locust -f locustmode.py --no-web -c 1000 -t 20s 无UI模式设置运行的时长等于UI页面的step duration输入框
--csv locust -f locustmode.py --no-web -c 1000 -t 2 --csv=report 生成报告并保存到本地
--master locust -f locustmode.py ---master 分布式的主控程序默认端口5557
--slave locust -f locustmode.py --slave --master-host 主控IP --master-port 主控端口 分布式的助攻程序,1.*版本变成了--worker
#!/usr/bin/python3

import os
from locust import HttpLocust,between,seq_task,task
from locust import TaskSequence #locust 1.*没有这个方法。

#性能测试用例管理类,TaskSequence父类的作用是管理执行顺序。
#locust 1.*版本父类就变成了SequentialTaskSet
class TestSuite(TaskSequence):
    #初始化方法,相当于__init__函数,在用例之前执行。
    def on_start(self):
        pass

    #最后执行的方法,相当于teardown,在用例之后执行。
    def on_stop(self):
        pass
    
    #测试用例模版
    @task    #表示这个方法是一个任务,@task(1)表示执行的次数。
    @seq_task(2) #表示执行的顺序,locust 1.*的顺序是按照代码位置排序,不需要这个装饰器。
    def case_demo(self):
        url = "/downloads/release/python-380"
        header = {"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"}
        data = {"user":"muge","pwd":"123456"}

        #self.count相当于requests,catch_response表示允许失败,name设置任务标签。
       #注意json=data与data=json.dumps(data)是表达的意思相同。
        response = self.count.post(url,headers=header,json=data,catch_response=True,name="case_demo")
        if response.status_code == 200:
            response.success()
        else:
            response.failure("request interface failure!")

        """
        #locust 1.*版本的请求尽量按照以下方式写,不然会存在兼容性问题。
        with self.count.post(url,headers=header,json=data,catch_response=True,name="case_demo") as response:
            if response.status_code == 200:
                response.success()
            else:
                response.failure("request interface failure!")
        """


#性能测试用例执行类
class RunCase(HttpLocust):
    #task_set在locust 1.*版本已被移除换成了tasks且不需要导入,必须使用列表或字典。
    task_set = TestSuite #指向测试类,也可以是[TestSuite1,TestSuite2]
    wait_time = between(0.1,3) #定义用例执行过程中的随机等等事件单位是秒。
    host = "https://www.python.org:8080" #定义被测服务器,也可以在执行命令中用-H ip:port表现。




if __name__ == '__main__':
    pass
    # os.system("locust -f locustmode.py")

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容