现在有很多的性能测试工具,比如说我们熟悉的loadrunner、jmeter、ab、webbench等等,这些工具如果对一个没用过的朋友来说,学习起来比较不容易,但是如果你能看懂python代码,会写就更好了,就可用尝试一下今天的主角Locust,一款基于python的性能测试工具,它的优点是学习起来比较简单,功能完全自定制,使用比较灵活,支持分布式。

所有的性能测试工具都至少包含这3块:

              1、压力产生器,也就是可以指定产生多大的压力,多少并发;

              2、数据统计,也就是结果的展示,要统计TPS是多少,响应时间多少等等,这些数据; 

              3、代理功能,代理功能呢说白了就一句话,分摊压力。比如说你压测的时候要用1000个并发,但是你的电脑(压力机)配置比较弱,只支持500并发,再大电脑就死掉了,完犊子,压测不了。那怎么办呢,就得分摊压力,再管你同事借一台电脑,俩电脑发压力,那就可以了,每个人的电脑上500个并发,人多好干活嘛,代理就是干这个的,把这个上面的压力分摊到别的电脑上。

当然Locust这3个功能都是有的。

Locust是python的一个第三方模块,安装很简单,直接pip install locust即可,或者自己下载安装包,手动安装。安装完成后,就有locust命令,在命令行里面输入 locust --help,有帮助信息就安装成功了。

locust的官网是 www.locust.io,上面也有怎么安装和例子。

怎么用呢,很简单,只需要几行代码就可以实现,并且有漂亮的web界面,可以设置并发数,和查看结果,首先我们写几行简单的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from locust import HttpLocust, TaskSet, task
#HttpLocust 这个类的作用是用来发送http请求的
#TaskSet   这个类是定义用户行为的,相当于loadrunnerhttp协议的脚本,jmeter里面的http请求一样,要去干嘛的
#task   这个task是一个装饰器,它用来把一个函数,装饰成一个任务,也可以指定他们的先后执行顺序
 
 
class BestTest(TaskSet):
    #自己定义的类,继承TaskSet,也就是这个类是实现咱们要去请求什么的
    @task#用task装饰器把这个函数装饰成一个咱们要执行的性能任务
    def index(self):#这个函数里面定义的是咱们要具体做的操作
        self.client.get('/')#请求这个url里面的哪个路径,如果是接口的话,就是哪个接口
 
class BestTestIndexUser(HttpLocust):
    #这个类继承了HttpLocust,代表每个并发里面的每个用户
    task_set = BestTest #这个是每个用户都去干什么,指定了BestTest这个类,它就会每个用户去运行besttest这个类里面的方法
 

代码写好了,下面运行一下,看看结果,但是运行的时候不是像一个普通的python脚本一样运行了, 得使用locust命令,在命令行里运行

1
2
3
locust -f besttest.py --host=http://www.besttest.cn
#-f是指定一个python文件 后面跟上咱们刚才写的python文件
#--host是你要访问哪个网站,后面跟网站的url

这样就可以运行,运行完之后,就可以在浏览器里面打开locust的控制台了,locust的默认端口号是8089,运行完之后,访问的时候用ip:8090就可以访问了,如下图:

启动locust:

locust控制台页面:

开始测试后的页面:

tps图和响应时间图:

但是locust不像loadrunner和jmeter一样可以设置开始时间和结束时间,只能你自己点stop的时候停止测试,这一点比较烦,所以在使用过程中还是需要自己注意一下测试时间。

刚才上面写的例子是单个接口压测, 或者更说单场景的,如果想做混合场景的压测,比如说是一个业务流程,先登录、然后下单、购物这样的怎么办呢?

只需要写多个task就可以了,也就是在类里面写多个函数,想谁想执行,标上数字就行了,1,2,3,4代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from locust import HttpLocust, TaskSet, task
class BestTest(TaskSet):
    @task(1)#给task装饰器传一个参数,代表先访问首页
    def index(self):#首页
        self.client.get('/')
        #发get请求
    @task(2)
    def login(self):#登录
        self.client.post('/login',{'username':'besttest','password':'123456'})
        #发送post请求,第一个是路径,第二个这个接口的入参,账号和密码
    
class BestTestIndexUser(HttpLocust):
    #这个类继承了HttpLocust,代表每个并发里面的每个用户
    task_set = BestTest #这个是每个用户都去干什么,指定了BestTest这个类,它就会每个用户去运行besttest这个类里面的方法
 

locust性能测试框架随笔的更多相关文章

  1. Python Locust性能测试框架实践

    [本文出自天外归云的博客园] Locust的介绍 Locust是一个python的性能测试工具,你可以通过写python脚本的方式来对web接口进行负载测试. Locust的安装 首先你要安装pyth ...

  2. Locust性能测试框架,从入门到精通

    1. Locust简介 Locust是使用Python语言编写实现的开源性能测试工具,简洁.轻量.高效,并发机制基于gevent协程,可以实现单机模拟生成较高的并发压力. 主要特点如下: 使用普通的P ...

  3. Locust性能测试框架学习

    1. Locust简介 Locust是使用Python语言编写实现的开源性能测试工具,简洁.轻量.高效,并发机制基于gevent协程,可以实现单机模拟生成较高的并发压力. 官网:https://loc ...

  4. Python locust性能测试框架模板

    locust框架模板 from locust import HttpLocust, TaskSet, task import Queue class UserBehavior(TaskSet): de ...

  5. Python3.6 性能测试框架Locust的搭建与使用

    背景 Python3.6 性能测试框架Locust的搭建与使用 基础 python版本:python3.6 方法一: pip install locustio 方法二: 开发工具:pycharm 使用 ...

  6. Python 3.6 性能测试框架Locust安装及使用

    背景 Python3.6 性能测试框架Locust的搭建与使用 基础 python版本:python3.6 开发工具:pycharm Locust的安装与配置 点击“File”→“setting” 点 ...

  7. Locust性能测试

    https://www.cnblogs.com/yoyoketang/p/9638151.html https://www.cnblogs.com/yoyoketang/p/9642242.html ...

  8. Locust性能测试1-环境准备与基本使用

    前言 提到性能测试,大部分小伙伴想到的就是LR和jmeter这种工具,小编一直不太喜欢写这种工具类的东西,我的原则是能用代码解决的问题,尽量不去用工具. python里面也有一个性能测试框架Locus ...

  9. Locust性能测试-环境准备与基本使用 转自:悠悠

    前言 提到性能测试,大部分小伙伴想到的就是LR和jmeter这种工具,小编一直不太喜欢写这种工具类的东西,我的原则是能用代码解决的问题,尽量不去用工具. python里面也有一个性能测试框架Locus ...

随机推荐

  1. sparkSQL获取DataFrame的几种方式

    sparkSQL获取DataFrame的几种方式 1. on a specific DataFrame. import org.apache.spark.sql.Column df("col ...

  2. 【linux】记录一下遇到的各种问题

    1. 解决办法: pthread不是Linux系统的默认库,编译时加上-lpthread参数,以调用链接库 gcc -o 文件名.out 文件名.c -lpthread 输出的时候直接 ./文件名.o ...

  3. vue - blog开发学习2

    首页博客列表的开发 1.修改index.vue,使能够支持列表功能 <template> <div> <PostList v-for="(item,index) ...

  4. tar 和gzip 的区别

    首先要 弄清两个概念:打包和压缩. 打包是指将一大堆文件或目录什么的变成一个总的文件, 压缩则是将一个大的文件通过一些压缩算法变成一个小文件. 为什么要区分这两个概念呢?其实这源于Linux中的很多压 ...

  5. 2018-8-10-win10-UWP-访问网页

    title author date CreateTime categories win10 UWP 访问网页 lindexi 2018-08-10 19:16:51 +0800 2018-2-13 1 ...

  6. 关于js中Ajax的同步、异步使用

    下面一个简单的例子,说明前后端交互中,Ajax同步和异步的使用 1.设置简单的一个div,包含触发事件 CompanyType() <div> <input type="h ...

  7. thrift 的required、optional探究

    原因 经常使用thrift来编写rpc通信,但是对下面两个问题还是有些疑惑 thrift 的required.optional和不写有什么区别 optional不设置isset的话被传输后值? 实验 ...

  8. 理解 Java 序列化

    一.什么是序列化 序列化是一种对象持久化的手段.类通过实现 java.io.Serializable 接口以启用其序列化功能. 序列化:把对象转换为字节序列的过程. 反序列化:把字节序列恢复为对象的过 ...

  9. 【JavaWeb项目】一个众筹网站的开发(六)后台用户权限控制

    登陆成功进入控制面板后 左侧的菜单是共同的元素,抽取出来做静态包含 要求必须是按照不同的用户得到不同的菜单 用户做了权限限制,哪个用户能操作哪些内容(链接.按钮.内容) 一.RBAC权限模型 权限管理 ...

  10. Java之有名内部类和匿名内部类

    Java内部类 定义在外部类中的类就是内部类:内部类的定义是为了更清楚.详细地描述事物. 有名内部类和匿名内部类 Java语言根据内部类是否有类名将内部类分为有名内部类和匿名内部类(没有类名). 有名 ...