[英]Gitlab CI: How to configure cypress e2e tests with multiple server instances?
[英]Why e2e database tests failing within CI but not locally?
我有用於開發、登台和生產的管道。
暫存管道是我遇到問題的地方。 管道在 dev 上構建得很好(在 CI 運行器上和關閉),但暫存代碼僅在本地和實時服務器上構建,但在 CI 運行器中會失敗。 我用<--
表示懷疑代碼。
我已經檢查了數據庫容器在測試時是否正在運行並且它已經啟動並正在運行。 日志顯示沒有異常。
賽普拉斯測試在測試與數據庫交互的測試中失敗:
test-ci.sh
:
#!/bin/bash
env=$1
fails=""
inspect() {
if [ $1 -ne 0 ]; then
fails="${fails} $2"
fi
}
# run server-side tests
dev() {
docker-compose up -d --build
docker-compose exec -T users python manage.py recreate_db
docker-compose exec -T users python manage.py test
inspect $? users
docker-compose exec -T client npm test -- --coverage --watchAll --watchAll=false
inspect $? client
docker-compose down
}
# run e2e tests
e2e() {
if [ "${env}" = "staging" ]; then
docker-compose -f docker-compose-stage.yml up -d --build
docker-compose -f docker-compose-stage.yml exec -T users python manage.py recreate_db # <--
docker run -e REACT_APP_USERS_SERVICE_URL=$REACT_APP_USERS_SERVICE_URL -v $PWD:/e2e -w /e2e -e CYPRESS_VIDEO=$CYPRESS_VIDEO --network flaskondocker_default cypress/included:6.0.0 --config baseUrl=http://nginx
inspect $? e2e
docker-compose -f docker-compose-stage.yml down
else
docker-compose -f docker-compose-prod.yml up -d --build
docker-compose -f docker-compose-prod.yml exec -T users python manage.py recreate_db
docker run -e REACT_APP_USERS_SERVICE_URL=$REACT_APP_USERS_SERVICE_URL -v $PWD:/e2e -w /e2e -e CYPRESS_VIDEO=$CYPRESS_VIDEO --network flaskondocker_default cypress/included:6.0.0 --config baseUrl=http://nginx
inspect $? e2e
docker-compose -f docker-compose-prod.yml down
fi
}
# run specific tests
if [ "${env}" = "staging" ]; then
echo "****************************************"
echo "Running e2e tests ..."
echo "****************************************"
e2e
elif [ "${env}" = "production" ]; then
echo "****************************************"
echo "Running e2e tests ..."
echo "****************************************"
e2e
else
echo "****************************************"
echo "Running client and server-side tests ..."
echo "****************************************"
dev
fi
if [ -n "${fails}" ]; then
echo "Test failed: ${fails}"
exit 1
else
echo "Tests passed!"
exit 0
fi
測試的行為類似於docker-compose -f docker-compose-stage.yml exec -T users python manage.py recreate_db
failed 或尚未執行,但日志顯示沒有錯誤。
gitlab-ci.yml
文件:
image: docker:stable
services:
- docker:19.03.12-dind
variables:
COMMIT: ${CI_COMMIT_SHORT_SHA}
MAIN_REPO: https://gitlab.com/coding_hedgehog/flaskondocker.git
USERS: training-users
USERS_REPO: ${MAIN_REPO}#${CI_COMMIT_BRANCH}:services/users
USERS_DB: training-users-db
USERS_DB_REPO: ${MAIN_REPO}#${CI_COMMIT_BRANCH}:services/users-db
CLIENT: training-client
CLIENT_REPO: ${MAIN_REPO}#${CI_COMMIT_BRANCH}:services/client
SWAGGER: training-swagger
SWAGGER_REPO: ${MAIN_REPO}#${CI_COMMIT_BRANCH}:services/swagger
stages:
- build
- push
before_script:
- export REACT_APP_USERS_SERVICE_URL=http://127.0.0.1
- export CYPRESS_VIDEO=false
- export SECRET_KEY=pythonrocks
- export AWS_ACCOUNT_ID=nada
- export AWS_ACCESS_KEY_ID=nada
- export AWS_SECRET_ACCESS_KEY=nada
- apk add --no-cache py-pip python2-dev python3-dev libffi-dev openssl-dev gcc libc-dev make npm
- pip install docker-compose
- npm install
compile:
stage: build
script:
- docker pull cypress/included:6.0.0
- sh test-ci.sh $CI_COMMIT_BRANCH
deployment:
stage: push
script:
- sh ./docker-push.sh
when: on_success
讓我強調一下,測試是在我的計算機和實時服務器上本地通過的。 在 CI 中無頭運行時,與數據庫相關的 e2e 測試會失敗。
知道沒有容器崩潰、日志顯示沒有錯誤、相同的代碼在本地構建並實時運行但在 CI 中失敗,我可以采取哪些調試步驟?
我們遇到了一些問題,數據庫檢查在本地工作,但在無頭 CI 中沒有。 我們發現這是因為日期時間字段。 CI 中的標記響應與本地不同。 因此,所有檢查日期的斷言都失敗了。 我們通過編寫格式化日期時間結果的 MySQL 查詢來解決此問題。 然后相應地調整賽普拉斯中的斷言。 也許你的問題與這個問題有關。
SELECT DATE_FORMAT(columnname, "%d-%c-%Y") as columnname FROM table
所以為了進一步調試,你有沒有在 CI 中正確運行的簡單測試? 或者什么都不起作用?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.