使单元测试失败导致 Google 云构建中的构建失败

Make unittest failures cause build failure in Google Cloud build

我正在 Google Cloud Platform 上的 Python 项目 运行ning 上设置 CI/CD。代码部署工作正常,但我还为单独的功能创建了一些单元测试。这些单元测试位于几个不同的文件中,因此我创建了一个新文件,其中包含所有这些单元测试并将它们添加到测试套件中。例如,我有一个名为 testFunction1.py 的文件,如下所示:

from main import Function1

class TransformTests(unittest.TestCase):

    def test_function(self):
        # Test goes here


if __name__ == '__main__':
    logging.getLogger().setLevel(logging.ERROR)
    unittest.main()

然后我有一个名为 testFunction2.py 的类似文件用于不同的功能。 最后我有一个名为 executeTests.py 的文件,如下所示:

import unittest

testmodules = [
    'testFunction1',
    'testFunction2'
]

suite = unittest.TestSuite()
loader = unittest.TestLoader()

for t in testmodules:
    mod = __import__(t, globals(), locals(), ['suite'])
    suite.addTests(loader.loadTestsFromModule(mod))

unittest.TextTestRunner().run(suite)

现在我运行使用这个文件来一次执行所有测试,这也很有效。我的问题是 运行 这个文件在 Google Cloud Build 中。我的 cloudbuild.yaml 文件结构如下:

steps:
  - name: "docker.io/library/python:3.7"
    args: ["pip3", "install", "-t", "/workspace/lib", "-r", "requirements.txt"]
  - name: "docker.io/library/python:3.7"
    args: ["python3", "executeTests.py"]
    env: ["PYTHONPATH=/workspace/lib"]

这工作正常,但如果测试失败,云构建仍然通过,这当然不是我想要的。

有谁知道如何更改此设置,以便在测试失败时云构建失败?这也是一个简单的例子,在真实的 repo 中我有大约 50 个测试文件,所以我不想将它们每个都添加到 cloudbuild.yaml 文件中。

如果 return 代码为 0,Cloud Build 认为步骤成功。否则,构建失败。

因此,在您的测试代码中,当至少一个测试失败时执行 exit(1)。构建将停止。

感谢 ,我通过将 executeTests.py 文件中的最后一行代码替换为以下代码解决了这个问题:

ret = not unittest.TextTestRunner().run(suite).wasSuccessful()
sys.exit(ret)