为OpenERP的功能和负载测试提供Funkload的基础类
项目描述
简介
此软件包提供了OpenERPTestCase类,该类继承自FunkloadTestCase,并提供了专门用于通过XML-RPC或JSON-RPC API进行OpenERP功能性和负载测试的方法。
它具有登录和用户管理功能,以及通过*ModelProxy类对API调用的Pythonic封装。
有关详细示例,请参阅包含的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文件中提供登录、密码和组。在这种意义上,组被视为用户组,这与OpenERP的哲学略有不同,但这并不重要。
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基准报告中的请求标题。
工作流程调用
由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的方法。预计在未来的版本中会有更多出现。
参考
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:允许指定环境变量作为db_name
launchpad #1195416:向OpenERP服务器方法传递关键字参数
launchpad #1196243:基本JSON-RPC支持
版本0.1 (2012-07-15)
初始版本
项目详情
anybox.funkload.openerp-0.2.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 2b1837b5a51f0a064d5e61219a444a34dacd42f64505f46fb5d6f0a4d865b5dd |
|
MD5 | be7c51cf3c2c23e4d5fbbecd2e80df90 |
|
BLAKE2b-256 | 9feea8d0093d774d821dd275dbe20bea2f39c69b303e69e12576eba045dd9711 |