服务器启动后如何运行测试

Posted

技术标签:

【中文标题】服务器启动后如何运行测试【英文标题】:How to run tests after server is up 【发布时间】:2021-12-25 12:56:54 【问题描述】:

尝试创建 GitLab-CI 配置,该配置应该启动 Python 服务器并随后运行一些测试。

到目前为止,我已经成功地获取了正确的图像并且服务器启动了。但是之后,脚本卡住了,我不知道如何跳转到下一个。

我的 gitlab-ci.yml

build:
  image: python:3.7.9
  stage: build
  before_script:
    - pip3 install -r requirements.txt
  script:
    - python3 server.py

test:
  script:
    - python3 -m unittest discover tests

所以,基本上是 2 个阶段; build 应该设置服务器并且 test 应该运行一些单元测试。我知道这两个工作是相互独立的——一旦阶段配置正确,我就会改变它。

非常感谢任何输入!

【问题讨论】:

【参考方案1】:

您可以通过测试容器在测试套件中运行集成测试。

https://github.com/testcontainers/testcontainers-python

这可能有点矫枉过正,首先我会建议 sytech 上面的答案

【讨论】:

【参考方案2】:

为了做到这一点,您必须在同一个作业中运行您的服务器和您的测试。这样做的一种常见方法是“后台”您的服务器。我们经常通过在 bash 中用 & 符号 & 结束一行来做到这一点

所以您的配置可能如下所示:

test:
  image: python:3.7.9
  before_script:
    - pip3 install -r requirements.txt
  script:
    - echo "starting the server"
    - python3 server.py &
    - sleep 1 # give the server a moment to start
    - python3 -m unittest discover tests

此外,您可能会考虑让您的测试套件设置测试服务器,以便将所有内容都封装在您的测试运行程序中。那么您就不必担心这些事情是单独的步骤。

例如,许多 Python Web 框架都有自己的测试助手,它们会为您创建测试应用程序,作为 每个 测试用例设置的一部分。这可能变得更加重要,例如,如果您的测试与数据库交互并且您需要隔离这些测试用例。

【讨论】:

非常感谢,我现在要试试这个:)

以上是关于服务器启动后如何运行测试的主要内容,如果未能解决你的问题,请参考以下文章

如何停止 Maven 执行

在Ubuntu上配置测试成功后如何重启nginx?

mySql提示服务启动后停止应该如何去解决

在使用 Springboot 运行集成测试时启动嵌入式 gRPC 服务器

Cloudformation 模板 - 如何确保 EC2 实例启动后特定服务正在运行

角度|使用生产环境变量启动测试服务器