mie*_*iek 59 javascript continuous-integration unit-testing qunit bamboo
我有一个在持续集成系统(Atlassian Bamboo 2.5)上运行的webapp构建计划.我需要将基于QUnit的JavaScript单元测试合并到构建计划中,以便在每个构建时运行Javascript测试,Bamboo将解释测试结果.
我希望能够使构建过程"独立",以便不需要与外部服务器的连接.如何实现这一目标的好主意?运行构建过程的CI系统位于Ubuntu Linux服务器上.
mie*_*iek 55
当我自己想出一个解决方案时,我认为分享它是个好主意.这种方法可能并不完美,但它是第一个似乎有效的方法.随意发布改进和建议.
我简单地说了一下:
接下来我将介绍更详细的阶段.这是我的目录结构最终看起来像:
lib/
JsTestDriver.jar
test/
qunit/
equiv.js
QUnitAdapter.js
jsTestDriver.conf
run_js_tests.sh
tests.js
test-reports/
build.xml
在构建服务器上:
apt-get install Xvfb)apt-get install firefox)进入你要建立的应用程序:
equiv.js和QUnitAdapter.jsjsTestDriver.conf):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."
Run Code Online (Sandbox Code Playgroud)
创建一个调用脚本的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>
Run Code Online (Sandbox Code Playgroud)
最后,告诉Bamboo构建计划同时调用test目标并查找JUnit测试结果.这里默认"**/test-reports/*.xml"会很好.