简介

  • Locust是一种易于使用的分布式用户负载测试工具。可用于对网站(或系统)负载测试,并依据响应数据计算出系统支持的并发用户数。

安装及调试(以下操作在windows环境下进行)

    • Locust基于python语言发开发,只需要装有python环境即可通过以下命令安装:

      1. pip install locustio

      提示安装成功后,可运行命令查看可用选项:

      1. locust --help
    • 调试代码
      在locust中,所有用户行为都是通过python代码定义。可以通过locust命令和web端的UI界面提供的几个参数(虚拟用户总数/孵化率/Host)获取的请求信息,来模拟生成大量虚拟用户。以下是结合青享云平台编写的调试代码:
      Example locustfile.py

 1 import random
2 from locust import HttpUser, task, between
3 class QuickstartUser(HttpUser):
4 wait_time = between(5, 9)
5 # 要测试的场景1
6 @task
7 def index_page(self):
8 self.client.get("/3d/consumer.html")
9 # 要测试的场景2
10 # task带的数值代表当前任务在压测过程中的执行比重
11 # 本例中表示index_page任务与view_item任务压力比为1:3
12 @task(3)
13 def view_item(self):
14 self.client.get("[商品详情页地址]")
15 # 每个任务执行脚本执行的操作,类似于setUp()方法,同理on_stop()为任务结束后执行的操作
16 def on_start(self):
17 self.client.post(
18 url='地址',
19 json={"username": "账号", "password": "密码", "captcha": "", "remember": True, "requestId": ""})

当前文件名为locustfile的python文件是locust默认运行的task文件,在当前目录下命令行执行命令locust即可运行启动locust服务;如果创建的文件名和位置不在当前运行路径下,可通过命令行控制运行,如下:

locust -f practice/my_qdcloud_locustfile.py

此时,可以在浏览器中访问本地8089端口地址 http://localhost:8089 打开locust UI界面,填写参数,即可开始测试:

参数说明:

Number of total users to simulate:需要创建的虚拟用户总数(即并发数)
Spawn rate:孵化率(每秒创建的虚拟用户数),所有的虚拟用户每秒创建多少
Host:base地址,代码中的地址优先级高于此处

执行后结果信息展示如上图所示,locust自带有数据表、统计图、fails统计信息、异常请求的展示界面、测试数据下载,感兴趣的同学自行百度。

核心参数:

Type:请求类型,即接口的请求方法;

Name:请求名称;
requests:当前已完成的请求数量;
fails:当前失败的数量;
Median:响应时间的中间值,即50%的响应时间在这个数值范围内,单位为毫秒;
90%ile:根据正态分布,90%的响应时间在正态分布平均值下方,即小于这个值;
Average:平均响应时间,单位为毫秒;
Min:最小响应时间,单位为毫秒;
Max:最大响应时间,单位为毫秒;
average Size:平均每个请求的数据量,单位为字节;
current RPS(requests per second):每秒钟处理请求的数量,即RPS。


实例代码:

 1 import time
2 import execjs
3 from locust import HttpUser, task, between
4 import requests
5 class QuickstartUser(HttpUser):
6 @task
7 def scan_goods_page(self):
8 self.client.get('路径')
9 # wait_time = between(2, 5)
10 """
11 # 订单生成任务请求
12 @task
13 def create_orders(self):
14
15 header = {
16 "Authorization": "Bearer eyJhbGciOiJIUzI1NiIsInR5......",
17 "Content-Type": "application/json;charset=UTF-8"}
18 self.client.request(
19 method="post",
20 headers=header,
21 url="路径",
22 data='{"totalFees":"0.01","totalCount":1,"cashFees":"0.01","shippingFees":"0.00","deliveryAddrId":483,'
23 '"receGoodsContacts":"黑色桌子","receGoodsTel":"13299990000",'
24 '"receGoodsAddr":"河北省|秦皇岛市|北戴河区|北戴河北戴河北戴河北戴河北戴河北戴河北戴河北戴河","skuAndCount":[{"skuId":27,'
25 '"defaultPicUri":"地址'
26 '13:38:49_af80dc87c10f48eab55093713973db9d.jpg","goodsName":"卡萨帝BCD-551WDCTU1","sellPrice":"0.02",'
27 '"earnest":"0.01","count":1,"subtotal":"0.01","sellModeFlag":"1","brandId":8,"shelvesId":1,'
28 '"partnerId":1,"specList":[{"specName":"尺寸","specValue":"475"},{"specName":"颜色","specValue":"白色"},'
29 '{"specName":"容量","specValue":"100ml"}]}],"invoice":{"invoiceType":"1","invoiceTitle":"个人",'
30 '"invoiceTitleCode":"","invoiceTitleType":"0","invoiceContent":"商品明细","customerName":"黑色桌子",'
31 '"customerPhone":"13299990000","companyName":"","dutyCode":"","bank":"","bankAccount":"",'
32 '"consignee":"","mobile":"","email":"","registeredAddress":"","registeredMobile":"","pcd":"",'
33 '"province":"","city":"","district":"","address":"","orderCode":"","orderId":"","userId":""}}')
34 time.sleep(2)
35 """
36 def GetCookie():
37 s = requests.session()
38 loginUrl = 'url'
39 postData = {"username": "用户名", "password": "密码", "captcha": "", "remember": True, "requestId": ""}
40 rs = s.post(loginUrl, postData)
41 requests.cookies.RequestsCookieJar()
42 c = requests.cookies.RequestsCookieJar() # 利用RequestsCookieJar获取
43 c.set('cookie-name', 'cookie-value')
44 s.cookies.update(c)
45 print(s.cookies.get_dict())
46 # print(c.get("ibps-3.3.3-token")
47 # print(s.cookies.get_dict())
48 def on_start(self):
49 with self.client.post(url='地址',
50 json={"username": "15866800632", "password": "1a2s3d4f", "captcha": "", "remember": True,
51 "requestId": ""},
52 catch_response=True) as response:
53 if response.status_code != 200:
54 print("失败!请求状态码是:%s " % response)
55 else:
56 print("请求结果成功!")
57 # return print(response)
58 s = requests.session()
59 loginUrl = '地址'
60 postData = {"username": "15866800632", "password": "1a2s3d4f", "captcha": "", "remember": True,
61 "requestId": ""}
62 rs = s.post(loginUrl, postData)
63 requests.cookies.RequestsCookieJar()
64 c = requests.cookies.RequestsCookieJar() # 利用RequestsCookieJar获取
65 c.set('token', 'e09c769b-8191-42de-9ed1-3660067010a3')
66 s.cookies.update(c)
67 # get_token = execjs.compile(open(r"auth.js").read()).call('getToken', '')
68 return print(s.cookies.get_dict())
69 def on_stop(self):
70 status = self.client.post(url="地址",
71 data={'access_token': 'e09c769b-8191-42de-9ed1-3660067010a3'})
72 return print(status.status_code)

以上脚本可实现压测场景1、页面访问;2、订单生成场景;3、登录、退出

性能测试工具locust简单应用的更多相关文章

  1. 性能测试工具Locust,一个开源性能测试工具

    性能测试工具Locust,一个开源性能测试工具使用Python代码来定义用户行为.用它可以模拟百万计的并发用户访问你的系统.1.它与目前主流的LoadRunner和Jmeter玩法都不一样.2.它完全 ...

  2. 性能测试工具Locust

    An open source load testing tool. 一个开源性能测试工具. define user behaviour with python code, and swarm your ...

  3. 性能测试工具Locust的使用

    一.写在前面 官网:https://www.locust.io/ 官方使用文档:https://docs.locust.io/en/latest/ 大并发量测试时,建议在linux系统下进行. 二.L ...

  4. 开源性能测试工具Locust使用篇(三)

    脚本增强 面对较复杂的测试场景,我们可能还是会感觉无从下手:例如,很多时候脚本需要做关联或参数化处理,Locust中就不知道怎么实现了.可能也是这方面的原因,感觉难以将Locust应用到实际的性能测试 ...

  5. 性能测试工具Locust的介绍和使用

    内容来自网络 https://www.w3xue.com/exp/article/20191/16707.html https://blog.csdn.net/qq_36255988/article/ ...

  6. 基于python的性能测试工具–locust

    现在有很多的性能测试工具,比如说我们熟悉的loadrunner.jmeter.ab.webbench等等,这些工具如果对一个没用过的朋友来说,学习起来比较不容易,但是如果你能看懂python代码,会写 ...

  7. 性能测试进阶:(一)性能测试工具Locust

    An open source load testing tool. 一个开源性能测试工具. define user behaviour with python code, and swarm your ...

  8. 开源性能测试工具Locust使用篇(二)

    那如何理解Locust和TaskSet这两个类呢? class HttpLocust(Locust) 在Locust类中,具有一个client属性,它对应着虚拟用户作为客户端所具备的请求能力,也就是我 ...

  9. Python技术栈性能测试工具Locust入门

    Locust是一款Python技术栈的开源的性能测试工具.Locust直译为蝗虫,寓意着它能产生蝗虫般成千上万的并发用户: Locust并不小众,从它Github的Star数量就可见一斑: 截止文章写 ...

随机推荐

  1. jmeter的一些知识目录

    1.JDK安装及环境变量配置2.Jmeter安装及环境变量配置3.如何启动 jmeter 4.下载并安装mysql驱动5.创建JDBC连接池及配置6 .新建线程组及参数配置7.http默认请求及参数配 ...

  2. 推荐系统实践 0x11 NeuralCF

    前言 这一篇文章我们来谈一下2017年新加坡国立大学提出的基于深度学习的系统过滤模型NeuralCF.我们在之前讲过矩阵分解技术,将协同过滤中的共现矩阵分解成用户向量矩阵以及物品向量矩阵.那么Embe ...

  3. 在IDEA中使用JDBC获取数据库连接时的报错及解决办法

    在IDEA中使用JDBC获取数据库连接时,有时会报错Sat Dec 19 19:32:18 CST 2020 WARN: Establishing SSL connection without ser ...

  4. Epson 打印机计数器清零

    错误提示:废墨垫需要维护.请联系爱普生认证服务机构. 一.下载打印机清零软件 软件名称:EPSON Adjustment Program 二.USB线连接打印机 清零前请取消打印任务,打印机用USB线 ...

  5. 微软自带打包工具 InstallShield 的使用

    1.下载并安装  InstallShield InstallShield Limited Edition for Visual Studio 2013 图文教程(教你如何打包.NET程序)   Ins ...

  6. python初学者-使用for循环做一个九九乘法表

    for i in range(1, 10): for j in range(1, i + 1): print(j, '*', i, '=', i * j, end=" ") #en ...

  7. SpringBoot整合任务调度框架Quartz及持久化配置

    目录 本篇要点 SpringBoot与Quartz单机版快速整合 引入依赖 创建Job 调度器Scheduler绑定 自动配置,这里演示SimpleScheduleBuilder 手动配置,这里演示C ...

  8. SecureCRT SSH Linux中不显示彩色 字体颜色、文件夹和文件显示的颜色区别开解决办法

    SecureCRT SSH Linux中不显示彩色 字体颜色.文件夹和文件显示的颜色区别开解决办法 实验环境: 刚开始我的情况是这样的:带颜色的显示不出来,然后还能看到,此处有内容,猜测是Secure ...

  9. IntelliJ IDEA错误: 源值1.5已过时,将在未来所有版本中删除

    参考:http://www.jianshu.com/p/451271c4de11

  10. 在 Emit 代码中如何await一个异步方法

    0. 前言 首先立马解释一波为啥会有这样一篇伪标题的Demo随笔呢? 不是本人有知识误区,或者要误人子弟 因为大家都知道emit写出来的都是同步方法,不可能await,至少现在这么多年来没有提供对应的 ...