在 Google Cloud Build 中运行 python 单元测试

Nir*_*cov 5 python-3.x google-cloud-build

我希望 Google Cloud Build 在推送更改后运行我的 python 项目中的单元测试。我能够配置运行测试的步骤,但我不确定如何输入保存测试的目录,如果我只是输入,那么.它会运行 0 测试

我的项目结构是: -project_name -package_name -test -sample_test.py

这是我的cloudbuild.yaml配置:

steps:
    - name: 'gcr.io/cloud-builders/docker'
      args: ["run","gcr.io/google-appengine/python","python3","-m","unittest","discover","--verbose","-s","./package_name/test/","-p","*_test.py"]
      id:   unittest
Run Code Online (Sandbox Code Playgroud)

上面的操作失败并显示以下消息:

raise ImportError('Start directory is not importable: %r' % start_dir)
ImportError: Start directory is not importable: './package_name/test/'
ERROR
ERROR: build step 0 "gcr.io/cloud-builders/docker" failed: exit status 1
Show debug panel
Run Code Online (Sandbox Code Playgroud)

如果我用刚才替换的文件夹,.它会运行但不会发现任何测试。为了将代码复制到 gs 存储桶,我们使用 gsutil,然后 ./package_name 将包复制到本地存储桶,这当然有效

我如何了解要运行的测试的正确文件夹结构是什么?谢谢!

Mar*_*oft 6

  1. 为什么使用appengine容器?为什么不直接使用官方的 Python 容器 - name: python:3.7?步骤作为 Docker 容器运行,当你想运行 docker 容器时,我认为没有理由在 docker 中运行 Docker。尝试这个:
steps:
  - name: python:3.7
    args: ["python","-m","unittest","discover","--verbose","-s","./package_name/test/","-p","*_test.py"]
    id: unittest
Run Code Online (Sandbox Code Playgroud)
  1. __init__.py另外,你的目录中有文件吗./package_name/test?该消息directory is not importable通常意味着该目录不是 Python 包,因为缺少__init__.py文件。