我使用构建在nodejs之上的docker使用testcafe&cumberjs运行测试。通过npm脚本启动测试运行。我在下面详细介绍了工作流程...
1)Git拉预先构建的docker映像
2)(可选)在package.json文件中设置“ config”参数,例如... npm config set packageJson:task-profile auto-regression-chrome
3)执行运行程序脚本,即npm run e2e-test
我的shell脚本只能满足3个需求,但我会不断发展,以便满足2)和3)的需求。我目前的shell脚本看起来像这样
#!/bin/sh
set -e
if [ "$1" == 'npm' ] && [ "$2" == 'run' ]; then
shift 2
XVFB_SCREEN_WIDTH=${SCREEN_WIDTH-1280}
XVFB_SCREEN_HEIGHT=${SCREEN_HEIGHT-720}
dbus-daemon --session --fork
Xvfb :1 -screen 0 "${XVFB_SCREEN_WIDTH}x${XVFB_SCREEN_HEIGHT}x24" >/dev/null 2>&1 &
export DISPLAY=:1.0
fluxbox >/dev/null 2>&1 &
exec npm run "$@"
fi
# otherwise, just run whatever command was passed on
exec "$@"
关于如何发展脚本以适应2)和3)的任何想法。通常,我会克隆映像并执行Runner命令,但是拥有一个shell脚本会很高兴,该脚本允许我先设置一些npm配置并执行npm run。
打算提供更多详细信息:
看着https://github.com/bhreinb/SYSTAC#running-tests-on-docker
在docker上运行测试时,我会执行以下操作
1)构建docker映像
docker build --no-cache -t bhreinb/systac .
2)在docker上运行测试并丢弃映像...
docker run --rm -it -v $PWD/e2e/:/opt/systac/e2e bhreinb/systac npm run e2e-test
限制是运行测试之前需要在源代码控制中设置配置。我希望能够使用一个命令(即
)动态更新配置,运行测试并丢弃映像。 docker run --rm -it -v $PWD/e2e/:/opt/SYSTAC/e2e -v $PWD/reports/:/opt/SYSTAC/reports/ bhreinb/SYSTAC npm config set packageJson:task-profile auto-regression-chrome && npm run e2e-test
希望有意义吗?
答案 0 :(得分:2)
这是一个暂定的快速技巧,可让您使用-v
选项传递配置参数。
#!/bin/sh
set -e
# Quick and dirty option processing
while [ $1 = '-v' ]; do
case $2 in
*=*)
option=${2%=*}
npm config set "$option" "${2#$option}"
shift 2;;
*)
echo "$0: Fatal error: argument to -v must contain =" >&2
exit 127;;
esac
done
# Aside; use = not == inside [ ... ]
if [ "$1" = 'npm' ] && [ "$2" = 'run' ]; then
shift 2
XVFB_SCREEN_WIDTH=${SCREEN_WIDTH-1280}
XVFB_SCREEN_HEIGHT=${SCREEN_HEIGHT-720}
dbus-daemon --session --fork
Xvfb :1 -screen 0 "${XVFB_SCREEN_WIDTH}x${XVFB_SCREEN_HEIGHT}x24" >/dev/null 2>&1 &
export DISPLAY=:1.0
fluxbox >/dev/null 2>&1 &
exec npm run "$@"
fi
exec "$@"
用法:
docker run --rm -it \
-v $PWD/e2e/:/opt/SYSTAC/e2e \
-v $PWD/reports/:/opt/SYSTAC/reports/ \
bhreinb/SYSTAC \
scriptname -v foo=bar \
-v packageJson:task-profile=auto-regression-chrome \
-v baz=quux \
npm run gargleblaster --demo --crash --splinters