赞
踩
压力测试
我们都知道,互联网应用必须要做的一步就是压力测试,因为每天互联网应用都要面对成千上万的请求。虽然Odoo的定位是企业内部应用,但一旦企业规模变大,服务器也面临着并发带来的压力,因此压力测试也是Odoo运维过程中必不可少的环节之一。本章将带领读者使用Python的压力测试工具Locust来对我们的Odoo应用进行压力测试评估。
任何系统不论如何优化,都会又一个性能的瓶颈,我们做压力测试的目的就是想要知道在一定标准的范围内,服务器经过最优优化后的极限性能在哪,以便我们在预估服务器到达性能极限之前及时对软硬件进行升级,以应对即将到来的压力挑战。
Locust简介
Locust是Python写的压力测试工具,拥有简单明了的UI控制界面和图形报表,而且支持分布式测试。写一个Locust测试脚步也非常简单。
首先,我们安装这个工具:
pip install locustio
启动命令:
locust -f locust_files/my_locust_file.py --host=http://example.com
f 参数指明脚本文件所在目录 host 参数为web访问地址,通常设置为ip地址或者0.0.0.0即可。
启动后可以看到日志输出:
kevin@kevin:~/codes/script/python/locust_test$ locust -f odoo_test.py --host=http://0.0.0.0
[2019-08-26 13:07:40,330] kevin/INFO/locust.main: Starting web monitor at *:8089
[2019-08-26 13:07:40,331] kevin/INFO/locust.main: Starting Locust 0.11.0
[2019-08-26 13:07:48,618] kevin/INFO/locust.runners: Hatching and swarming 200 clients at the rate 1 clients/s…
[2019-08-26 13:12:31,373] kevin/INFO/locust.runners: All locusts hatched: Tester: 200
编写脚步测试文件
我们新建了一个Controller,用于接收Locust发出的请求,简单起见没有做登陆认证。
class LocustTest(http.Controller): @http.route('/locust_test/locust_test/', auth='public') def index(self, **kw): return "Hello, world" @http.route('/locust_test/locust_test/write/', auth='public') def list(self, **kw): # return http.request.render('locust_test.listing', { # 'root': '/locust_test/locust_test', # 'objects': http.request.env['locust_test.locust_test'].search([]), # }) sale_obj = request.env["sale.order"].sudo() # 创建订单 order = sale_obj.create({ "partner_id":7, "order_line":[(0,0,{ "product_id":1, })] }) # 删除订单 order.unlink() return "Test Done"
然后我们编写压力测试脚本:
from locust import HttpLocust,TaskSet,task
class TestOdoo(TaskSet):
def on_start(self):
self.test_sale_order()
@task(1)
def test_sale_order(self):
self.client.get("http://192.168.23.129:8070/locust_test/locust_test/write/")
class Tester(HttpLocust):
task_set = TestOdoo
min_wait = 50
max_wait = 200
启动测试
我们打开Locust控制页面:
我的测试虚拟机1核2G内存,200用户1并发的结果如下:
也可以看到请求曲线:
可以看到我的小服务器能够支持每秒8个请求的处理。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。