带funkload的openerp功能和负载测试基类
anybox.funkload.openerp的Python项目详细描述
简介
这个包提供了OpenERPTestCase类,子类 FunkloadTestCase使用为openerpfunctional和 通过xml-rpc或json-rpc apis进行负载测试。
它具有登录和用户管理功能,以及pythonic 通过*ModelProxy类封装api调用。
有关详细示例,请参见包含的test_sales_order.py测试 案例。
基本用户处理
Funkload可以根据需要创建具有给定组的用户,并以 他们。请注意如何将组指定为来自 ir.model.data:
from anybox.funkload.openerp import OpenERPTestCase class MyTestCase(OpenERPTestCase): def test_01_makeuser(self): self.login('admin', 'admin') self.ensure_user('spam', 'spampassword', ['base.group_sale_manager']) def test_02_my_usecase(self): self.login('spam', 'spampassword') ...
使用测试用例准备 数据库。fl-run-test按字母顺序加载它们。
通过Funkload的凭据服务器进行用户处理
Funkload提供了一个外部和可选的凭据服务器。这是 你绝对不会被迫使用的设施。
原则是为登录、密码和组提供服务,从不同的 外部users.txt和groups.txt文件。在这个意义上的群体 被认为是用户组,这与 哲学是开放式的,但这并不重要。
openerptestcase提供了一个登录方法,该方法从 来自凭据服务器的希望组:
def test_my_usecase(self): self.login_as_group('base.group_sale_manager') # now test some scenario
当然,这意味着组的名称也必须是一致的 在groups.txt.中。请参阅提供的users.txt和groups.txt 文件夹。
还有一个方法ensure_credential_server_users() 使用适当的组创建所有希望的用户。
API调用
原则是获取一个ModelProxy实例,它将封装 所有常规(所谓的ORM)呼叫:
def test_my_usecase(self): """First list all customers, then...""" self.login('user', 'password') res_partner = self.model('res.partner') res_partner.model.search([('customer', '=', 'True')], description="Search customers")
描述将作为请求标题出现在Funkload Bench报告中
工作流调用
由model()方法提供的ModelProxy实例可以 同时执行工作流的触发器验证:
def test_my_usecase(self): # some preparations, then confirm Sale Order #1234 model = self.model('sale.order') model.workflow('order_confirm')(1234, description="Confirm Sale Order")
如前所述,如果是针对工作台的报告。
JSON-RPC
从0.2版起,OpenERPTestCase为json-rpc提供帮助程序 会话(类似于浏览器启动的会话)和调用。
会话完全独立于XML-RPC会话。你需要 执行单独的登录操作:
self.web_login('user', 'password')
然后您可以获得一个JsonModelProxy,并访问orm方法(在 在某些情况下,其行为可能与XML-RPC略有不同:
model = self.model('sale.order', rpc='json') model.search([('customer', '=', 'True')], description="Search customers")
一些特定于web的方法是直接公开的。下面是类似的 javascript web客户端将做什么:
fields = ('name', 'street', 'city', 'zip') model.search_read([('customer', '=', True)], fields, description="Fetch customer addresses")
实际上,这是目前唯一一个特定于web的方法 可用。更多的内容可能会出现在即将发布的版本中。
注意
这个JSON-RPOpenERP实现目前支持 仅限OpenERP V7.0。API更改将安排在以后进行 OpenERP版本(感谢Anthony Lesuisse的指点 那就结束了)。
参考文献
OpenERPTestCase类具有ref()方法,以检索 引用代码中的对象ID,如XML或YML文件中的,即 ir.model.data:
def test_my_usecase(self): product_id = self.ref('product.product', 'stock',
确认
ModelProxy提供的非常简单的包装灵感来自 openobject库。
基准测试技巧
尽可能随机化。值得注意的是,必须避免重复 使用同一用户登录:这会产生数据库冲突,将 有些测试在错误状态下运行,但也使它们非常快,因此 使你的数据不可用。
setUp()中的任何内容都超出性能范围 测量。查看提供的test_sales_orders如何预加载 为每个客户提供一次性可用客户和可销售产品 虚拟用户。
版本0.2(2013-07-01)
- launchpad #1196284: allow specification of an environment variable as db_name
- launchpad #1195416: pass keyword arguments to OpenERP server methods
- launchpad #1196243: basic JSON-RPC support
版本0.1(2012-07-15)
初始版本