plone测试用例与风车测试的集成

niteoweb.windmill的Python项目详细描述


关于

Windmill扩展了Plone的FunctionalTestCase,为 运行风车测试。这是通过添加额外的测试层来实现的, 它将启动一个与windmill服务器并排的单线程zserver实例。

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

有关详细信息,请参见http://getwindmill.com

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

访问Windmill客户端

风车测试应该来自WindmillTestCase。这提供了 WindmillClient作为self.wm的实例。除了支持 标准的WindMillClientapi,这个客户机有一个额外的方法 open_site(),它在打开时自动在plone站点url前面加上前缀 一个网址。否则它与open()方法相同。

常见问题解答

  1. 如何同步由浏览器和unittests中的操作操作操作的数据:
  • 在windmill测试用例中,self.site_open()总是调用transaction.commit() 它将数据写入zodb。
  • 在unittests中,只需执行导入事务;transaction.commit()和数据 将在浏览器中显示。

安装

添加niteoweb.windmill作为在中使用它的包的依赖项 setup.py。一种方法是通过[tests]extra,例如:

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

然后将其添加到构建中,例如:

[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”对象 没有属性“exc_info”。忽略它
  • 风车在python2.4上的测试非常糟糕,如果你偶然发现了错误,请提交错误 任何;)

待办事项

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

更改日志

0.3.2(2011-09-15)

  • 更改方式后,测试安装程序将等待zserver完成。 这有助于解决出现在 误导性错误信息。 [DO3CC]

0.3.1(2010年5月9日)

  • 为了更好地与 loginasportalowner()[domen kozar]

0.3(2009年12月12日)

  • 重构以在单独的层中启动zserver,而不是使用startzserver() 来自佐皮特斯凯斯。在同一测试中进行其他测试时,这更可靠 可能需要运行zserver的测试运行,因为startzserver()不是 层意识到并且不能可靠地被拆掉。 [马丁·阿斯佩利]

0.2(2009年11月23日)

  • 将self.add_user函数添加到testcase(能够添加具有自定义 角色)[Domen Kozar]
  • 修复了第一个请求失败(由于风车/plone racecodintions)[martin aspeli]
  • 修正了风车依赖牵引[Martin Aspeli]

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

推荐PyPI第三方库


热门话题
JavaGWT:何时使用Lazydemelement?   Java中跟踪消失线程的多线程处理   java Springboot未能配置数据源:“url”,但我没有使用数据库   java为按钮生成随机位置   math Java:包含二项式系数计算的表达式   java通过AsyncTask传递参数   从路径错误创建java文件   高流量网站的性能播放框架、Java、Apache、PostgreSQL、JPA和Hibernate   java将4D矢量转换为长矢量   arraylist Java循环在没有任何错误的情况下终止   java正在制作一个计算器应用程序,希望在第二个片段中更新历史,但无法完成   java将信息从IntentService发送到Activity   java如何在游戏中插入大量实体!工作   javascript如何在ScriptEngineforJava中从数学中获得准确的结果?