`
angelguo
  • 浏览: 120027 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

基于Python的性能测试工具locust (与 LR 的简单对比)

 
阅读更多

背景

最近自己开发了一个小的接口,功能测完了,突然想测下性能,原来做性能测试,我一直用的是HP的LoadRunner,前一段时间正好看过locust,想想就用这个来测测性能吧。
由于对LR比较熟,正好做个对比,这样更利于对新东西的理解。

基础

locust 的官网:http://locust.io/

也可以参考论坛里其他同学的介绍:https://testerhome.com/topics/2888

目前locust还只支持Python 2版本。

测试需求

验证在相同的服务器端的情况下,使用LR和locust分别进行性能测试,在相同并发用户的情况下,验证平均响应时间,TPS值等性能测试指标的差异。
为了方便,使用http协议,一个get请求,一个post请求,交易比例为1:1。

服务器端

为了简单易理解,用Python的bottle框架写了一个服务器端,2个交易,一个get,一个post请求,交易中加了2个不同的sleep。
代码如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

__author__ = 'among,lifeng29@163.com'

from bottle import *
from time import sleep

app = Bottle()


@app.route('/transaction_1', method='GET')
def tr1():
    sleep(0.2)
    resp = dict()
    resp['status'] = 0
    resp['value'] = 'xxx'
    return resp


@app.route('/transaction_2', method='POST')
def tr2():
    parm1 = request.forms.get('parm1')
    parm2 = request.forms.get('parm2')
    sleep(0.5)
    resp = dict()
    resp['status'] = 0
    resp['value'] = 'yyy'
    return resp


run(app=app, server='cherrypy', host='0.0.0.0', port=7070, reloader=False, debug=False)

服务器端部署在一个单独的Windows的机器中,基于Python 3,启动后,监听7070端口。

LR中的测试脚本

在另外的一个Windows机器中,使用LR 11,用的是http/html协议的脚本,主要代码如下:
用了2个action,用于划分交易比例。
action1:

Action1()
{
    lr_start_transaction("get");
    web_reg_find("Text=xxx",
        LAST);
    web_custom_request("Head",
        "URL=http://10.0.244.108:7070/transaction_1", 
        "Method=GET",
        "Resource=0",
        "Referer=",
        LAST);
    lr_end_transaction("get", LR_AUTO);
    return 0;
}

action2:

Action2()
{
    lr_start_transaction("post");
    web_reg_find("Text=yyy",
        LAST);  
    web_custom_request("Head",
        "URL=http://10.0.244.108:7070/transaction_2", 
        "Method=POST",
        "Resource=0",
        "Referer=",
        "Body=parm1=123&parm2=abc",
        LAST);
    lr_end_transaction("post", LR_AUTO);
    return 0;
}

使用1:1的比例设置2个transaction的执行比例:

 

 

LR中的执行方法,直接放到场景中,执行即可。

locust中的测试脚本

在另外的mac中,使用locust执行测试,全部通过代码实现。代码如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

__author__ = 'among,lifeng29@163.com'

from locust import *

class mytest(TaskSet):
    @task(weight=1)
    def transaction_1(self):
        with self.client.get(name='get', url='/transaction_1', catch_response=True) as response:
            if 'xxx' in response.content:
                response.success()
            else:
                response.failure('error')

    @task(weight=1)
    def transaction_2(self):
        dt = {
            'parm1': '123',
            'parm2': 'abc'
        }

        with self.client.post(name='post', url='/transaction_2', data=dt, catch_response=True) as response:
            if 'yyy' in response.content:
                response.success()
            else:
                response.failure('error')


class myrun(HttpLocust):
    task_set = mytest
    host = 'http://10.0.244.108:7070'
    min_wait = 0
    max_wait = 0

具体的参数可以查看官方文档。

其中:

1. 主类继承HttpLocust,用于测试http协议的系统;

2. min_wait和max_wait用于设置执行task过程中的等待时间,相当于LR中Pacing的设置,这里都设置为0;

3. task装饰器类似于LR中的事务,可以做嵌套;

4. weight相当于权重,如2个事务是1:1,保持比例一致就行;

5. 这里写了2个事务,分别为get和post;对response的判断通过python的语法实现,类似于LR中的检查点。

执行方法,通过命令行启动:
如下图:

 

 

LR中的测试过程和结果

测试过程:
直接设置并发用户数和加载方式,10个用户并发,同时加载就可以了。

 

 

测试结果:
平均响应时间:

 

 

TPS:

 

 

事务:

 

 

Locust中的测试过程和结果

测试过程:
使用浏览器打开http://127.0.0.1:8089

 


设置需要的并发用户数和用户加载策略。
这里设置相同的10用户并发,Hatch Rate是每秒启动多少用户的意思。这里设置为10,就是同时启动10个了。注意,这里不好设置执行多久,和LR不一样。(可以不启动浏览器,直接在启动参数中设置并发用户数,执行多少个事务后结束,具体用-h可以看到帮助)

 

启动执行后:

 

 


其中,Average中为平均响应时间等测试指标,最后一列的reqs/sec相当于LR中的TPS。(这里locust把它叫做rps),其他指标都比较好理解了。

 

最后的结果:
在web页面中可以下载原始的测试结果数据。
在停掉python命令后,在终端中也可以看到一些信息,最后的一行是百分之X的响应时间,表示百分之多少的交易在XXX响应时间内。
这里比LR中的要多点,包括了50%到100%的响应时间。

 

 

结果比较

在相同的服务器端环境,测试的结果值相似,没有多大的区别。
在设置交易比例的过程中,可以看到get和post交易的比例都存在差异。这个也无法避免(除非自己写脚本划分)。所以tps方面存在些差异。不过总体差距很小。

总结

性能测试,重点是考察并发用户数、响应时间、tps这类指标。

一直用的是LR,LR在一起概念上更易于理解,在有lr的基础上,在看其他的工具,就比较容易了。

locust也可以支持分布式执行(多执行机),用来简单测试这类http的接口,也算比较方便。
而且,locust全部基于Python脚本,扩展性不错,号称可以测试任何协议和系统。

最后,我还是那句话,看什么事情,用什么工具最高效易用,用合适的工具做合适的事情即可。

 

备注:

调试的时候都是连接的代理,这样方便。
一种方法是自己在外面的py中先调试好,然后再放到locust中执行。
另一种是使用命令行启动 locust
如:locust -f loc1.py --no-web -c 1 -n 4
-c是指并发数,-n是执行的次数。少跑点,调试方便。这样配合代理,调试也不复杂。

用命令行还可以自动化执行,执行的结果也可以通过日志或output来分析。

分享到:
评论

相关推荐

    Python+locust 性能测试教程

    Locust是一个由Python编写的开源性能测试工具,它以用户友好、分布式和基于脚本的方式进行负载测试。本教程将深入探讨如何利用Python和Locust进行性能测试,以下是一些关键知识点: 1. **Python基础知识**:Python...

    Python性能测试全面指南:工具、策略与实践

    Python提供了多种工具和库来支持性能测试,如Locust、JMeter和Apache Bench。通过本文的介绍,你应该能够掌握在Python中进行性能测试的基本方法和步骤。希望这些信息能帮助你在实际项目中有效地应用性能测试,确保...

    Python-locust用Python编写的可伸缩的用户负载测试工具

    在软件开发过程中,性能测试是确保系统在高并发情况下稳定运行的关键环节。Locust 是一个由 Python 编写的开源负载测试工具,专为分布式用户负载测试而设计,能够模拟大量用户对应用程序进行并发访问,以评估系统的...

    WEB网站压力测试工具Locust使用教程.zip

    7. **性能测试工具 Locust 的初级使用** 在提供的链接 "7.性能测试工具Locust的初级使用 - CSDN博客.url" 中,可以找到更详细的入门指南,包括如何设置测试环境、编写测试脚本、启动和分析测试结果等。 总的来说,...

    Python性能测试工具Locust安装及使用

    一个开源性能测试工具。 define user behaviour with python code, and swarm your system with millions of simultaneous users. 使用Python代码来定义用户行为。用它可以模拟百万计的并发用户访问你的系统。 官方...

    基于python locust库实现性能测试

    基于python locust库实现性能测试 Locust是一个轻量级的开源压测工具,用Python编写。它可以模拟大量用户同时访问Web应用程序,测试其性能和可靠性。Locust的主要特点是轻量级、灵活、易用,且支持分布式模式,可以...

    Linux版WEB网站压力测试工具locust使用教程

    Locust基于Python构建,因此你需要确保系统已经安装了Python环境,可以从`locust基于python.txt`这一标签中了解到这一点。 Locust的核心概念是“User”(用户)和“Task”(任务)。一个User代表一个模拟的并发用户...

    Python 3.6 性能测试框架Locust安装及使用方法(详解)

    Locust是一款免费开源的性能测试工具,它基于Python语言编写,能够模拟成千上万的并发用户来测试Web应用的性能。Locust的设计理念是让用户通过编写简单的Python脚本来定义用户行为,以此来模拟真实的用户交互过程。 ...

    Python库 | locust-swarm-3.0.0.tar.gz

    综上所述,Locust Swarm 3.0.0是一个强大且灵活的负载测试工具,尤其适合Python开发者进行后端性能测试。通过熟练掌握其使用,开发者可以有效地提升应用的稳定性和性能,为用户提供更好的服务体验。

    性能测试十大工具介绍1

    5. Locust:Python编写的轻量级开源负载测试工具,适合分布式测试,易于扩展和定制。 6. WebLoad:Rational公司(现IBM)的产品,专注于Web应用的性能和负载测试,提供强大的数据分析和报告功能。 7. Tsung:基于...

    性能测试(概念、JMeter、Locust).pdf

    Locust是一个轻量级的性能测试工具,它使用Python编写,并以事件驱动的方式运行,允许测试人员编写简单的脚本来模拟大量并发用户。Locust的使用包括介绍和安装Locust、编写测试脚本以及进行性能测试。 性能测试项目...

    基于python的软件测试平台研究与应用.zip

    总结来说,"基于python的软件测试平台研究与应用"涉及到的关键知识点包括Python测试框架的选择与使用、自动化测试脚本编写、测试用例设计、持续集成、性能测试、测试数据管理以及缺陷跟踪等。掌握这些知识,对于提升...

    Python中的压力测试实战指南

    Python提供了多种工具和库来执行压力测试,如Locust和JMeter。通过本文的介绍,你应该能够理解压力测试的基本概念,掌握在Python中进行压力测试的方法,并能够分析和优化测试结果。 通过本文的介绍,读者应该能够...

    性能测试和工具(pdf)

    在本资料"性能测试和工具"中,我们将深入探讨如何选择和应用性能测试工具来实现这些目标。以下是相关知识点的详细说明: 1. 性能测试的目的:性能测试的主要目的是确保系统在预期的用户负载下能够正常运行,并提供...

    Locust负载测试工具 v2.15.1

    Locust 是一个开源负载测试工具。...Locust 是非常简单易用,分布式,用户负载测试工具。Locust 主要为网站或者其他系统进行负载测试,能测试出一个系统可以并发处理多少用户。Locust 是完全基于时间的

    python locust源码分析

    Locust是一款用于进行性能测试的强大工具,尤其适合于需要模拟大量用户访问场景的情况。它采用Python语言开发,具备良好的可扩展性和分布式特性,能够轻松地模拟成千上万个并发用户。 **目录结构分析:** 1. **...

    Python-云计算产品性能测试指南

    在Python-云计算产品性能测试指南中,我们主要探讨如何利用Python技术进行云计算产品的性能评估,特别是在Debian系统环境下,针对云服务器、云数据库和对象存储这三种基础云服务。作为root用户,我们可以全面控制和...

    Python软件测试宝典随书源码 本书涵盖软件自动化测试中的,接口测试,性能测试,安全测试,UI自动化测试相关的python实现

    Python的locust库是一个轻量级的性能测试框架,它可以模拟大量并发用户,分析系统在高负载下的表现。通过编写脚本,可以定义用户行为模型,执行性能测试并获取详细的统计报告。 安全测试则是检查软件是否存在可能...

Global site tag (gtag.js) - Google Analytics