跳转到主要内容

为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.txtgroups.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)

初始版本

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分发

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面