带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.txtgroups.txt文件。在这个意义上的群体 被认为是用户组,这与 哲学是开放式的,但这并不重要。

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 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)

初始版本

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何拆分字符串(基于各种分隔符),但不保留空格?   解析。Json格式的txt文件和knime中的java   java Spring rest api为什么在rest api调用的响应中更改了数据类型   升华文本3抛出java。lang.ClassNotFoundException,而记事本++不存在   java Android指纹扫描仪在尝试5次后停止工作?   java Android如何设置精确的重复报警?   java如何使用HTTPGET connect为access API输入用户名和密码   java当测试报告显示没有测试失败时,Gradle为什么说“有失败的测试”?   用Gson实现java获取响应   MapReduce程序中函数错误的java不可映射参数   java spring安全性不符合自动代理的条件   java GWT使用异步回调进行同步/阻塞调用   java奇怪的类数组问题无法在jsp中显示   如何在java中使用PrinterJob使用epl打印条形码   java如何在JTable中居中单元格   将Java Mockito测试转换为Kotlin   html Java正则表达式模式匹配到多个相同标记   testCompile中缺少java Gradle(Android)多项目依赖项   在输入提示后输入字符串时发生java FileNotFoundException