GitLab CI/CD 测试 Flask 应用程序失败(连接错误),尽管在本地成功了

问题描述 投票:0回答:1

身体:

我的 GitLab CI/CD 管道遇到了一致的问题,其中所有类型的测试(压力、功能和 e2e)在管道中执行时始终失败,但在本地运行时顺利通过。下面,我详细介绍了设置、错误以及我已经尝试过的各种故障排除步骤。

环境:

  • Flask 应用程序在本地运行 http://127.0.0.1:5000
  • 测试:使用Locust进行压力测试,Cypress进行功能测试,使用Maven进行e2e测试
  • CI/CD: GitLab 对每个测试都使用 Docker 化环境

错误:

- 压力测试: 压力测试中对 Flask 应用程序的 API 端点的所有请求都会返回

-ConnectionRefusedError(111, 'Connection refused').
18575              GET /api/company-details/[ticker]: ConnectionRefusedError(111, 'Connection refused') 

- 功能测试(Cypress): 在解析参数期间发生错误,并执行意外的脚本而不是 JSON 配置。

(Cypress encountered an error while parsing the argument: --config)

- E2E 测试(Maven): 由于目标版本无效而导致编译失败。

([ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project untitled: Fatal error compiling: error: invalid target release: 21 -> [Help 1])

.gitlab-ci.yml(为了清晰起见,进行了简化):

image: python:3.9

stages:
  - test
  - deploy

before_script:
  - apt-get update && apt-get install -y maven
  - python -m venv venv
  - source venv/bin/activate
  - pip install -r requirements.txt
  - export PYTHONPATH=./src

stress_tests:
  script:
    - locust -f src/tests/stress/company_stress_test.py --headless --host http://127.0.0.1:5000

functional_tests:
  image: cypress/included:10.0.0
  script:
    - npx cypress run --config-file src/tests/functional/cypress.config.js

e2e_tests:
  script:
    - cd src/tests/e2e
    - mvn test

采取的故障排除步骤:

确认所有测试均在本地通过。 确保在 CI 配置中正确设置路径和环境变量。 尝试使用不同的 Docker 映像和配置进行测试。

问题:

  1. 如何解决GitLab CI环境压力测试的连接问题?

  2. GitLab CI 环境中 Cypress 参数解析错误可能是什么原因导致的?

  3. 如何修复 e2e 测试中的 Maven 目标发布错误?

  4. 在 GitLab CI 管道中使用多个 Docker 镜像是否会使容器之间的网络变得复杂?如果是这样,我该如何配置 CI 来正确处理这个问题?

其他问题: 我还想知道问题是否可能源于在同一管道中管理多个 Docker 映像的复杂性。每种类型的测试都使用不同的基础映像,这可能会导致这些容器之间的网络隔离或配置错误问题:

  • 压力测试在没有特定图像的情况下运行:声明,暗示使用默认的Python图像。
  • 功能测试使用 cypress/included:10.0.0 镜像。
  • E2E 测试恢复使用默认的 Python 映像,但还需要 Maven,它安装在 before_script 中。 此设置需要容器间通信,由于 Docker 网络固有的网络隔离功能,该通信可能会配置不当或被阻止。

我正在寻找有关解决这些 CI/CD 管道问题的任何见解或建议。预先感谢您的帮助!

docker maven gitlab gitlab-ci locust
1个回答
0
投票

我在你的 ci 文件中没有看到你启动 Flask 应用程序的地方。 Locust 会加载 Flask 应用程序还是只是向希望其上线的应用程序发出请求?

如果是这样,您将需要添加 Flask start 命令以确保它在开始测试之前正在侦听正确的地址。

对于 Cypress 配置问题,您可以尝试使用 -C 标志来查看它是否正确解析这些内容。

使用多个图像应该没问题,只要您在每个作业中指定所需的图像,gitlab 运行程序应该创建图像并运行该阶段的步骤。

对于 Maven 问题,根据运行环境的位置(本地托管或 gitlab 云),您可以在该计算机上启动容器并尝试运行测试(如果是本地托管)。 Gitlab 托管将需要添加更多与调试相关的步骤,以确保可以执行正确的步骤来使其正常工作

希望有帮助:)

© www.soinside.com 2019 - 2024. All rights reserved.