我有一个在持续集成系统上运行的 webapp 构建计划(阿特拉斯竹 2.5)。我需要合并 质量单位基于 JavaScript 的单元测试纳入构建计划,以便在每次构建时,都会运行 Javascript 测试,并且 Bamboo 将解释测试结果。

最好我希望能够使构建过程“独立”,这样就不需要与外部服务器的连接。关于如何实现这一目标的好主意?运行构建过程的 CI 系统位于 Ubuntu Linux 服务器上。

有帮助吗?

解决方案

当我自己想出一个解决方案时,我认为分享它是个好主意。该方法可能并非完美无缺,但它是第一个似乎有效的方法。请随时发布改进和建议。

简而言之,我做了什么:

  • 启动一个实例 Xvfb, 虚拟帧缓冲区
  • 使用 Js测试驱动程序:
    • 将 Firefox 实例启动到虚拟帧缓冲区(无头)
    • 捕获 火狐浏览器 实例并运行测试套件
    • 生成符合 JUnit 的测试结果 .XML
  • 使用 Bamboo 检查结果文件以通过或失败构建

接下来我将介绍更详细的阶段。这就是我的目录结构最终的样子:

lib/
    JsTestDriver.jar
test/
    qunit/
            equiv.js
            QUnitAdapter.js
    jsTestDriver.conf
    run_js_tests.sh
    tests.js
test-reports/
build.xml

在构建服务器上:

  • 安装 Xvfb (apt-get install Xvfb)
  • 安装火狐浏览器(apt-get install firefox)

进入要构建的应用程序:

server: http://localhost:4224

load:
# Load QUnit adapters (may be omitted if QUnit is not used)
  - qunit/equiv.js
  - qunit/QUnitAdapter.js   

# Tests themselves (you'll want to add more files)
  - tests.js

创建一个脚本文件来运行单元测试并生成测试结果(Bash 中的示例, run_js_tests.sh):

#!/bin/bash
# directory to write output XML (if this doesn't exist, the results will not be generated!)
OUTPUT_DIR="../test-reports"
mkdir $OUTPUT_DIR

XVFB=`which Xvfb`
if [ "$?" -eq 1 ];
then
    echo "Xvfb not found."
    exit 1
fi

FIREFOX=`which firefox`
if [ "$?" -eq 1 ];
then
    echo "Firefox not found."
    exit 1
fi

$XVFB :99 -ac &    # launch virtual framebuffer into the background
PID_XVFB="$!"      # take the process ID
export DISPLAY=:99 # set display to use that of the xvfb

# run the tests
java -jar ../lib/JsTestDriver.jar --config jsTestDriver.conf --port 4224 --browser $FIREFOX --tests all --testOutput $OUTPUT_DIR

kill $PID_XVFB     # shut down xvfb (firefox will shut down cleanly by JsTestDriver)
echo "Done."

创建一个调用脚本的 Ant 目标:

<target name="test">        
    <exec executable="cmd" osfamily="windows">
        <!-- This might contain something different in a Windows environment -->
    </exec>

    <exec executable="/bin/bash" dir="test" osfamily="unix">
        <arg value="run_js_tests.sh" />
    </exec>
</target>   

最后,告诉 Bamboo 构建计划调用 test 目标并查找 JUnit 测试结果。这里默认的 "**/test-reports/*.xml" 会做得很好。

其他提示

有关任何有兴趣运行他们茉莉花BDD规格headlessly Maven中,你可能会感兴趣的茉莉花Maven的插件我保持:

http://github.com/searls/jasmine-maven-plugin

作为替代方案,您也可以尝试 TestSwarm。我已经使用 QUnit 启动并运行我的 JS 测试。

我打得周围的一些在过去一年中的解决方案,但我没有发现噶球场(原testacular)任何东西。试试看

http://karma-runner.github.com/

您可能能够使用犀牛,无头的浏览器,在您的CI机器上运行单元测试。当然,这里的缺点是,它不会找到具体到浏览器X的错误......但它确实击败安装在你的CI箱2-3操作系统,涵盖所有主要平台......

但是,是的,这种吸...但它可能工作得不够好,在CI方案。

我已经使用行家和JUnit调用犀牛。这是不优雅,我却用它来测试基本服务和实用代码。

它需要嘲笑不受支持类,像Java库XHR。

我发现,它是最好的代码一切在JavaScript(测试等)和用于构建组织仅使用JUnit和钩到CI。

我想看看是否能JsTestDriver虽然做到这一点。或摩卡W / A的junit记者。

JS测试运行是一个很好的解决方案。它使用PhantomJS和QUnit。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top