簡體   English   中英

為什么 e2e 數據庫測試在 CI 內失敗,而不是在本地?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM