漫游测试之性能测试(3.3、Locust的介绍)

 Locust是一个基于Python可扩展的、分布式的、开源的的性能测试工具,Locust采用Python的requests库使得脚本编写大大简化。而对于其它协议Locust提供了接口,只要我们采用相对应的Python编写模式,就能方便地采用Locust实现压力测试。

 在模拟并发方面,Locust的优势在于其摒弃了进程和线程,完全基于事件驱动,使用gevent提供的非阻塞IO和coroutine来实现网络层的并发请求,因此即使是单台压力机也能产生很大的并发请求,再加上对分布式运行的支持,理论上来说,Locust能在使用较少压力机的前提下支持极高并发数的测试。

另一方面,其基于Flask开发的网页交互工具,可以方便的提供给开发人员进行远程自测。但是,Locust不支持场景设置、不支持将监控与其结合、不支持录制(可以用其它方式自动产生)、不支持集合点、并且也没有趋势图,这一特性决定了Locust更适合用来测试接口,尤其适合用来测试获取最大TPS,以及模拟大量用户同时在线的测试要求。

3.3.1.Locust安装方法

使用Pip进行安装  

pip install -U locustio

pip install -U pyzmq

遇到的问题一:

markupsafe/_speedups.c:12:20: fatal error: Python.h

需要安装python-dev

sudo apt-get install python2.7-dev --fix-missing

解释:

http://stackoverflow.com/questions/24097129/the-c-extension-could-not-be-compiled-error-while-installing-flask

检测安装是否可用:

https://github.com/asciinema/asciinema/issues/71

sudo easy_install --upgrade requests 解决,但是又出现以下错误

执行sudo easy_install --upgrade Werkzeug解决。

3.3.2.Locust常用调用类

HttpLocust继承自Locust,添加了client属性。client属性是HttpSession实例,可以用于生成HTTP请求。HttpSession调用requests包。

task_set指定client执行的类。min_wait和max_wait为两次执行之间的最小和最长等待时间,两次执行之间的最小和最长等待时间,单位:毫秒,即执行各任务之间等待时间。默认为1000。

3.3.3.Locust的简单示例

编写代码:

脚本示例:调用登录方法,并且将返回值打印出来。

  1. 注意相关的日志信息需要自己输出,比如请示的参数,以及返回值等信息。
  2. 日志信息与Loadrunner一样,需要执行后才会在指定的位置区域进行显示

from locust import HttpLocust, TaskSet, task

def md5(str):

    import hashlib

    m = hashlib.md5()

    m.update(str)

    return m.hexdigest()

class UserBehavior(TaskSet):

    def on_start(self):

        """ on_start is called when a locust start before any task is scheduled"""

        pass

    @task(1)

    def login(self):

        """ post login ,always the first step. """

        postLoginBody = {"clientId":"xxxxx",\

                                         "consideringTheReusability":"true",

                                         "password":md5('q123456'),\

                                         "grantType":"password",\

                                         "service":"authorize",\

                                         "version":"1.0.0.150109-PRD",\

                                         "clientSecret":"x82A99D24A874B",\

                                         "username":'qwen126_1@126.com'}

        response = self.client.post('/oauth?service=authorize&version=', postLoginBody)

        print response.content

    def index(self):

        pass

    def searchDevice(self):

        pass

class ApiFosUser(HttpLocust):

    task_set = UserBehavior

    host = 'http://10.16.40.11:5902'

    min_wait = 100

    max_wait = 200

启动locust后台

locust -f test1.py --logfile=/srv/7-31.log

将日志输出到其它目录保存,以便查询、分析使用。

运行并实时查看结果

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

那美那美

失业了,写文章求吃碗炒面

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值