运行测试时,circleci python -t标志不起作用

时间:2019-11-23 00:35:19

标签: circleci

我的circle.yaml文件中有此运行步骤,未设置结帐或工作目录:

 - run:      
      name: Running dataloader tests
      command: venv/bin/python3 -m unittest discover -t dataloader tests

此问题是-t标志中的工作目录未设置。尝试在moduleNotFound类内查找assertions文件夹时出现dataloader错误。

我的树:

├── dataloader
│   ├── Dockerfile
│   ├── Makefile
│   ├── README.md
│   ├── __pycache__
│   ├── assertions

但这可行:

version: 2
defaults: &defaults
  docker:
    - image: circleci/python:3.6
jobs:
  dataloader_tests:
    working_directory: ~/dsys-2uid/dataloader
    steps:
      - checkout:
          path: ~/dsys-2uid
      ...
      - run:
          name: Running dataloader tests
          command: venv/bin/python3 -m unittest discover -t ~/app/dataloader tests

关于可能发生的事情的任何想法吗?

为什么第一个仅使用-t标志不起作用?

带有路径的working directorycheckout实际做什么?我什至不知道为什么我的解决方案有效。

2 个答案:

答案 0 :(得分:1)

必须指定从顶部到测试文件夹的确切路径,才能进行“发现”。例如:“ python -m unittest discover src / main / python / tests”。这一定是其在第二种情况下起作用的原因。

最有可能是“单元测试发现”的错误,当您明确指定命名空间包作为发现目标时,发现就起作用了,但不会递归到namespace_pkg中的任何命名空间包中。因此,当您只运行“ python3 -m unittest discover”时,它并不会进入cwd中的所有名称空间包(主要是文件夹)。

正在进行一些PR(例如:issue35617)来解决此问题,但尚未发布

答案 1 :(得分:0)

检出 =用于将源代码检出到配置路径的特殊步骤(默认为working_directory)。这是一个特殊步骤的原因是,它更多地是一个帮助程序功能,旨在使您轻松签出代码。如果您需要通过HTTPS执行git,则不应使用此步骤,因为它将git配置为通过ssh签出。

working_directory =在哪个目录中运行步骤。默认值:〜/ project(其中project是文字字符串,而不是您特定项目的名称)。作业期间运行的进程可以使用$ CIRCLE_WORKING_DIRECTORY环境变量来引用此目录。注意:不会扩展写入YAML配置文件的路径;如果您的store_test_results.path是$ CIRCLE_WORKING_DIRECTORY / tests,则CircleCI将尝试存储名为$ CIRCLE_WORKING_DIRECTORY的目录的测试子目录,美元符号$以及所有。