Locust压力测试Odoo
Table of Contents
Locust 是个伸缩性很好的压力测试框架,OdooLocust 是 基于 Locust 和 openerplib 的 Locust扩展
下载 OdooLocust 源码
$ git clone https://github.com/nseinlet/OdooLocust.git
安装 python依赖包
$ cd OdooLocust
$ sudo pip install -r requirements.txt
安装 OdooLocust
$ sudo python setup.py install
编写测试任务集 TaskSet
新建一个 py 文件 OdooLoadingTest.py , 内容 如下
from locust import task, TaskSet
class SellerTaskSet(TaskSet):
# @task(5)
# def read_partners(self):
# cust_model = self.client.get_model('res.partner')
# cust_ids = cust_model.search([])
# prtns = cust_model.read(cust_ids)
# @task(5)
# def read_products(self):
# prod_model = self.client.get_model('product.product')
# ids = prod_model.search([])
# prods = prod_model.read(ids)
@task(20)
def create_so(self):
prod_model = self.client.get_model('product.product')
cust_model = self.client.get_model('res.partner')
so_model = self.client.get_model('sale.order')
cust_ids = cust_model.search([('name', 'ilike', 'agrolait')])
prod_ids = prod_model.search([('name', 'ilike', 'ipad')])
for cust_id in cust_ids:
for prod_id in prod_ids:
order_id = so_model.create({
'partner_id': cust_id,
'order_line': [(0,0,{'product_id': prod_id,
'product_uom_qty':1}),
(0,0,{'product_id': prod_id,
'product_uom_qty':2}),
],
})
so_model.action_confirm([order_id])
from OdooLocust import OdooLocust
class Seller(OdooLocust):
host = "192.168.30.128"
database = "odoo"
min_wait = 0
max_wait = 100
weight = 3
task_set = SellerTaskSet
以上 测试集 用于建立销售订单、并确认销售订单; 至于其他用途的测试集, 则根据用户的需求定制, 基于openerplib 库撰写。
运行 Locust
进入 taskset 存放目录, 运行以下命令
$ locust -f OdooLoadingTest.py Seller
说明
OdooLoadingTest.py 为 taskset 任务集定义py文件
Seller 为 Locust 实例
运行 Locust 后, 它会开启一个 管理控制台, 输入 运行 Locust URL, 例如 http://127.0.0.1:8089/
输入 需要模拟的 用户数量 Number of users to simulate , 以及 每秒钟产生的 用户数 Hatch rate, 点击 start swarming
Locust 开始运行 taskset
在 统计页卡, 表格形式 展示 taskset 运行情况
在 图表页卡, 图表形式 展示 taskset 运行情况
分布式
因为 Locust 是单进程运行的, 为了有效发挥 压测节点的性能, 一般要根据节点的配置, 调整为 master/slave分布式
运行 master
$ locust -f OdooLoadingTest.py Seller --master
运行 slave.
$ locust -f OdooLoadingTest.py Seller --slave
此时可以从 master 看到新加入的 slave.
登陆 Locust 控制台, 可以看到 加入的slave 数量。
备注:
RPS [ requests per second ] 不等于 同时在线用户数