跳转到主要内容

Plone TestCase与Windmill测试集成

项目描述

关于

niteoweb.windmill扩展了Plone的FunctionalTestCase,以提供运行Windmill测试的支持。这是通过添加一个额外的测试层来实现的,该层在Windmill服务器旁边启动一个单线程的ZServer实例。

Windmill支持大多数现代浏览器。控制器API可以在http://trac.getwindmill.com/wiki/ControllerApi找到。

更多详情,请参阅http://getwindmill.com

请记住阅读源代码,它非常轻量级!

访问Windmill客户端

风车测试应该从 WindmillTestCase 衍生。这提供了一个 WindmillClient 的实例作为 self.wm。除了支持标准的 WindMillClient API 之外,这个客户端还有一个额外的 open_site() 方法,该方法在打开 URL 时自动将 Plone 网站URL添加到前面。它在其他方面与 open() 方法相同。

常见问题解答

  1. 如何同步浏览器和 unittests 中由动作操作的数据

  • 在 Windmill TestCase 中,self.site_open() 总是调用 transaction.commit(),这将数据写入 ZODB。

  • 在 unittests 中,只需执行 import transaction;transaction.commit(),然后在浏览器中可以看到数据。

安装

niteoweb.windmill 添加到 setup.py 中使用该包的依赖项中。一种方法是使用 [tests] 额外功能,例如。

extras_require = {
    'tests': ['niteoweb.windmill'],
},

然后将其添加到您的 buildout 中,例如。

[tests]
recipe = zc.recipe.testrunner
eggs =
    my.package [tests]

用法

基本用法

from Products.PloneTestCase import PloneTestCase as ptc
from niteoweb.windmill import WindmillTestCase

ptc.setupPloneSite()

class TestSample(WindmillTestCase):

    def afterSetUp(self):
        self.setRoles(['Manager'])
        self.login_user()

    def test_foo(self):
        self.wm.open_site(url="/about")
        self.wm.waits.forPageLoad(timeout=30000)


def test_suite():
    from unittest import TestSuite, makeSuite
    suite = TestSuite()
    suite.addTest(makeSuite(TestSample))
    return suite

高级用法

from Products.PloneTestCase import PloneTestCase as ptc

from niteoweb.windmill import WindmillTestCase, WindmillLayer

class CustomWindmillLayer(WindmillLayer):
    site = 'plone2'
    windmill_settings = WindmillLayer.windmill_settings.copy()
    windmill_settings['START_FIREFOX'] = False
    WindmillLayer.windmill_settings['START_CHROME'] = True

ptc.setupPloneSite()

class TestWM(WindmillTestCase):

    layer = CustomWindmillLayer

    def afterSetUp(self):
        self.setRoles(['Manager'])
        self.login_user()

    def test_foo(self):
        self.wm.open_site('/login_form', site='plone2')
        self.wm.waits.forPageLoad(timeout=30000)

    def test_suite():
        from unittest import TestSuite, makeSuite
        suite = TestSuite()
        suite.addTest(makeSuite(TestWM))
        return suite

并使用调试模式运行测试,以便在错误/失败时停止

bin/instance test -s package.module -t test_foo -D

已知问题

  • 在拆卸过程中,您有时会得到 AttributeError: ‘NoneType’ object has no attribute ‘exc_info’。忽略它。

  • Windmill 在 Python2.4 上的测试非常糟糕,如果您遇到任何问题,请提交错误;)

待办事项

  • 一些简单的集成来加载现有的 ZODB 存储库

变更日志

0.3.2 (2011-09-15)

  • 更改了测试设置等待 zserver 完成的方式。这有助于解决表现在非常奇怪且误导性错误消息中的时间问题。[do3cc]

0.3.1 (09.05.2010)

  • 使用 portal_owner 而不是 default_user 以提高与 loginAsPortalOwner() 的兼容性 [Domen Kozar]

0.3 (12.12.2009)

  • 重构以在单独的层中启动 ZServer 而不是使用 ZopeTestCase 中的 startZServer()。这在同一测试运行中还有其他可能需要运行 ZServer 的测试时更为可靠,因为 startZServer() 不可知层,并且无法可靠地拆卸。[Martin Aspeli]

0.2 (23.11.2009)

  • 向测试用例添加了 self.add_user 函数(能够添加具有自定义角色的用户)[Domen Kozar]

  • 修复了第一个请求失败(由于 windmill/plone 竞争条件)[Martin Aspeli]

  • 修复了 windmill 依赖项提取 [Martin Aspeli]

项目详细信息


下载文件

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

源分布

niteoweb.windmill-0.3.2.tar.gz (6.0 kB 查看散列)

上传时间

由以下机构支持

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