unittest测试套件将qunit javascript套件集成到unittest流中

QUnitSuite的Python项目详细描述


QunitSuite是能够运行QUnit测试套件的^{TT1}$。 在正常的unittest进程中,通过PhantomJS

QunitSuite建立在Ben Alman的接口工作之上 在PhantomJS和主机/报告代码之间:垫片和 PhantomJS配置文件是gruntqunit任务的配置文件

为什么

您是一个python商店或开发人员,您已经构建了工具和测试 围绕unittest(或与unittests兼容)和您的测试 pipeline是基于此,您正在进行一些 这些天来,你想做一些测试 你的网络资料。

但你不想重做整个测试堆栈 那。

QunitSuite简单地嫁接基于QUnit的测试,在PhantomJS中运行,在 您现有的基于美元的架构。

什么

QunitSuite当前提供一个对象作为其API的一部分: qunitsuite.QUnitSuite(testfile[, timeout])

这将生成一个unittest.TestSuite,适用于所有常见的 东西(运行它,并将它交给另一个将要运行的测试套件 就是这样

testfile是引导Qunit测试的HTML文件,就像 通常通过浏览器访问。它可以是本地的 (file:)URL,或HTTP URL。只要一个普通的浏览器可以打开 然后执行它,PhantomJS就可以了。

timeout是传递给PhantomJS运行程序的检查:如果运行程序 不产生超过timeout毫秒的信息 将取消运行并生成测试错误。这个 通常情况下,您的testfile不是Qunit测试 文件,Qunit未运行或Qunit的运行程序已停止(对于异步 测试)并且从未重新启动

默认值非常保守,大多数测试都应该运行 正确使用较低的超时(特别是如果所有测试 同步)。

如何

unittest的自动发现协议不能直接用于测试 套件(它寻找测试用例)。如果你想让自动发现工作 正确地说,您必须使用load_tests协议:

# in a testing module
def load_tests(loader, tests, pattern):
    tests.addTest(QUnitSuite(qunit_test_path.html))
    return tests

在这种特定情况之外,可以使用QUnitSuite作为 标准TestSuite实例,运行它,将其添加到另一个 套用或传递给TestRunner

投诉和申诉

速度

启动一个phantomjs实例并运行一个套件 相当高的开销,在这台机器上大约一秒钟 (2.4GHz、8GB RAM和一个固态硬盘)。

由于每个QUnitSuite当前都创建自己的phantomjs实例, 创建更大的套件(放置许多模块&;是个好主意; 在同一个Qunit HTML文件中进行测试,但不排除拆分 它们跨越多个js文件)。

黑客

Qunitsuite包含一个相当大的黑客,可能会导致 问题取决于您的确切设置:万一失败或 错误,unittest.TestResult格式化提供的错误回溯 在测试对象旁边。这要经过python的 回溯格式化代码,那里没有挂钩。

可以期望使用自定义的TestResult,但是对于测试套件 TestResult实例必须由调用方提供,因此 没有直接钩住它。

这留下三个选项:

  • 创建一个自定义的TestResult类并要求它是 提供给测试套件这需要改变工作流程, 测试运行程序的定制(据我所知)不是 可通过Python2.7的自动发现获得这是最干净的 但在实用性上完全失败了。
  • 创建一个自定义的TestResult,它直接更改原始的 结果的errorsfailures属性是 测试运行程序API。这可以工作,但是可以将自定义结果放入 奇怪的状态和中断,例如unittest2的@failfast
  • 最后,monkeypatch未记录和实现细节 _exc_info_to_string在提供的result上。这就是 至少现在是这样。
<分区>

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

推荐PyPI第三方库


热门话题
java在OSGi felix scr注释中将运行时参数传递给服务   java如何按字母顺序将对象插入ArrayList?   在Netbeans中调试Java   java从json文件中获取不同的照片   通过迭代和打印将java插入2个哈希表的运行时间   java如何替换JUnit 5中的WireMock@Rule注释?   shell在javajsch程序中使用'been'命令访问受限目录   java RMI是什么类型的?   javajooq别名构造   java如何通过在testNG中创建对象来调用测试方法   java下载从安卓 URL加载到imageview中的图像   从java运行bat文件   带有客户端证书的java嵌入式Jetty   java Ajax将JSON数组发送到servlet   创建数据并将数据添加到SQLite数据库时发生java错误   添加CV的javascript HRMS项目过程   java AspectJ加载时编织不起作用   java动态更改(使用JMX)正在监视的文件夹中的新文件   java岛数迭代矩阵并将节点标记为已访问