在持续集成构建中轻松运行JavaScript单元测试

miek:

我有一个在持续集成系统(Atlassian Bamboo 2.5)上运行的webapp构建计划我需要将基于QUnit的JavaScript单元测试合并到构建计划中,以便在每次构建时都将运行Javascript测试,而Bamboo将解释测试结果。

最好是,我希望能够使构建过程“独立”,从而不需要与外部服务器的连接。如何做到这一点的好主意?运行构建过程的CI系统在Ubuntu Linux服务器上。

miek:

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

简而言之,我做了什么:

  • 启动Xvfb实例(虚拟帧缓冲区)
  • 使用JsTestDriver
    • 启动Firefox实例到虚拟帧缓冲区(无头)
    • 捕获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
  • 安装Firefox(apt-get install firefox

进入要构建的应用程序:

服务器:http:// localhost:4224 

load:
#加载QUnit适配器(如果不使用QUnit,则可以省略)
  -qunit / equiv.js 
  -qunit / QUnitAdapter.js    

#测试自身(您想添加更多文件)
  -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"将很好。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

构建管理/持续集成最佳实践

使用Ant构建器运行所有单元测试

我如何仅在Maven的构建阶段运行单元测试而不进行集成测试

在持续集成环境中运行的最佳实践或编写集成测试的有效方法

无法检入TFS并通过持续集成进行构建'

在Gradle中的每个构建之前运行单元测试

SQL Server数据库单元测试和持续集成

在TFS构建管道上运行(x)单元测试

持续集成

如何在持续集成中包括Google基准测试

持续集成创建构建循环

API的集成与单元测试

单元测试与集成测试

在Django中与单元测试分开运行集成测试

测试和持续集成

使单元测试失败导致Google Cloud构建中的构建失败

在每个构建中的构建机器中执行集成测试还是仅进行单元测试是正常的?

持续集成:单元测试使用“ MVN测试”运行,但在由JaCoCo运行时失败

持续集成服务器上的集成测试

Dropwizard中的单元测试视图(续集)

您如何设置每日(每晚)构建和持续集成?

在持续集成中运行测试与手动运行测试

Xamarin.Android与TFS 2013的持续集成和测试

Team Services 持续集成构建参考 Nuget 失败

在 C# Web 应用程序中使用持续集成在 VSTS 上进行 TypeScript 单元测试

“构建”在持续集成中是什么意思?

DevOps - 进程“msbuild.exe”在持续集成构建中以代码“1”退出

如何忽略Maven构建中特定失败的单元测试结果?

PostgreSQL - 持续集成