• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Python locust工具使用详解

    今年负责部门的人员培养工作,最近在部门内部分享和讲解了locust这个工具,今天再博客园记录下培训细节。相信你看完博客,一定可以上手locust这个性能测试框架了。

    一、简介

    1、优势

    locust是python语言开发的一款的开源的的性能测试框架,他比jmeter更加的轻量级,主要是通过协程(gevent)的方式去实现并发,通过协程的方式可以大幅提高单机的并发能力,同时避免系统级的资源调度。locust具有开源性、分布式、支持高并发,支持webUI的操作方式。

    2、劣势

    locust的图表功能较弱,只展示了很少的数据

    locust不支持监控服务端的状态,需要借助第三方工具,或者自己写代码去实现

    二、安装

    locust的安装非常简单,直接通过pip的方式就可以安装

    	
    pip install locust

    三、locust的库和方法介绍

    1、from locust import task

    通过task可以把某个函数指定为任务,直接@task装饰对应的函数即可,在@tast(n)中可以有一个参数n,意思是这个任务的占比是多少

    2、from locust import TaskSet

    需要定义一个类,继承TaskSet这个类,这个是是一个任务集的概念,这个类中可以包括多个task

    3、from locust import HttpUser

    需要定义一个类,这个类要继承HttpUser,通过这个定义的类我们可以执行具体的任务集

    看了上面的介绍,可能大家有点云里雾里的,下面我们由浅入深看代码

    四、实战代码V1.0(入门代码)

    1、代码如下

    from locust import HttpLocust
    from locust import HttpUser
    from locust import task
    from locust import TaskSet
    #指定一个任务集
    class My_task_set(TaskSet):
     
     
        #这是某个任务,30是比例,比如这里是30/50
        @task(30)
        def getindex1(self):
            # client就是个requests对象
            # catch_response,告诉locust如何判断请求失败还是成功
            res  = self.client.get("/bainianminguo/p/10952586.html")
     
        @task(20)
        def getindex2(self):
            # client就是个requests对象
            res = self.client.get("/bainianminguo/p/7253930.html")
     
     
    class WebSite(HttpUser):
        # 指定要执行哪个任务集
        tasks = [My_task_set,]
        # 请求和请求之间最小的间隔时间
        min_wait = 1000
        # 请求和请求之间最大的间隔时间
        max_waif = 2000

    2、进入代码的目录,执行如下命令

    3、打开浏览器,输入http://localhost:8089/

    4、参数讲解

    Number of total users to simulate 模拟的总的用户数

    Spawn rate 每秒钟新增的用户数

    五、实战代码V1.1(入门代码)

    1、任务集类中的on_start方法

    class My_task_set(TaskSet):
     
        #添加初始化方法
        def on_start(self):
            print("类似类中的构造方法,每个用户在任务开始前,只执行一次,在这里可以定义一个对象的属性,这样其它测试集就可以使用这个属性")

    这个方法类似pytest框架中的前置条件或者说是面向对象中的构造方法

    2、任务集类中的on_start方法

    def on_stop(self):
        print("类似类中的后置方法,每个用户在任务开始后,只执行一次,在这里可以定义一个对象的属性,这样其它测试集就可以使用这个属性")

    六、实战代码V1.2(入门代码)

    1、如何判断请求是失败还是成功

    2、然后再响应的消息中指定判断逻辑即可,success即为成功,failure即为失败

    七、实战代码V1.3(全量代码)

    from locust import HttpLocust
    from locust import HttpUser
    from locust import task
    from locust import TaskSet
     
    # locust中的client会自动帮我们处理cookies。类似request.session(),所以如果我们登陆的时候,只需要在on_start中登陆一次就可以了
     
    # 如果在locust中,如果url是不需要统计,则我们不要用clent去访问api,应该用request去访问,这样就locust就不会统计request库发起的请请求
    #指定一个任务集
    class My_task_set(TaskSet):
     
        #添加初始化方法
        def on_start(self):
            print("类似类中的构造方法,每个用户在任务开始前,只执行一次,在这里可以定义一个对象的属性,这样其它测试集就可以使用这个属性")
     
        def on_stop(self):
            print("类似类中的后置方法,每个用户在任务开始后,只执行一次,在这里可以定义一个对象的属性,这样其它测试集就可以使用这个属性")
     
        #这是某个任务,30是比例,比如这里是30/50
        @task(30)
        def getindex1(self):
            # client就是个requests对象
            # catch_response,告诉locust如何判断请求失败还是成功
            res  = self.client.get("/bainianminguo/p/10952586.html",catch_response=True)
            if res.code == 200:
                res.success()
            else:
                res.failure("ff")
            print(res)
        @task(20)
        def getindex2(self):
            # client就是个requests对象
            res = self.client.get("/bainianminguo/p/7253930.html")
            print(res)
     
    class WebSite(HttpUser):
        # 指定要执行哪个任务集
        # task_set = My_task_set
     
        tasks = [My_task_set,]
        # 请求和请求之间最小的间隔时间
        min_wait = 1000
        # 请求和请求之间最大的间隔时间
        max_waif = 2000
     
     
    # Number of total users to simulate   模拟的用户数
    # Spawn rate                          每秒钟产生的用户数

    八、常见问题

    1、cookies

    locust中的client会自动帮我们处理cookies。类似request.session(),所以如果我们登陆的时候,只需要在on_start中登陆一次就可以了

    2、多统计api的问题

    如果在locust中,如果url是不需要统计,则我们不要用clent去访问api,应该用request去访问,这样就locust就不会统计request库发起的请请求

    九、分布式调用的问题

    一旦单台机器不够模拟足够多的用户时,Locust支持运行在多台机器中进行压力测试。
     
    为了实现这个,你应该在 master 模式中使用--master标记来启用一个 Locust 实例。这个实例将会运行你启动测试的 Locust 交互网站并查看实时统计数据。br>master 节点的机器自身不会模拟任何用户。相反,你必须使用 --slave 标记启动一台到多台 Locustslave 机器节点,与标记 --master-host 一起使用(指出master机器的IP/hostname)。
     
    常用的做法是在一台独立的机器中运行master,在slave机器中每个处理器内核运行一个slave实例。
     
    注意:master 和每一台 slave 机器,在运行分布式测试时都必须要有 locust 的测试文件。
    在 master 模式下启动 Locust:
     
    locust -f my_loucstfile.py --master
     
    在每个 slave 中执行(192.168.0.14 替换为你 msater 的IP):
     
    locust -f my_locustfile.py --slave --master-host=192.168.0.14

    以上就是Python locust工具使用详解的详细内容,更多关于Python locust工具的资料请关注脚本之家其它相关文章!

    您可能感兴趣的文章:
    • python性能测试工具locust的使用
    • Python性能测试工具Locust安装及使用
    • 基于python locust库实现性能测试
    • Python 3.6 性能测试框架Locust安装及使用方法(详解)
    上一篇:PyQt 5 设置Logo图标和Title标题的操作
    下一篇:Python 关于模块和加载模块的实现
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Python locust工具使用详解 Python,locust,工具,使用,详解,