【问题标题】:circleci python -t flag when running tests does not work运行测试时 circleci python -t 标志不起作用
【发布时间】:2019-11-23 00:35:19
【问题描述】:

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

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

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

我的树:

├── 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 实际上是做什么的?我什至不知道为什么我的解决方案有效。

【问题讨论】:

    标签: circleci


    【解决方案1】:

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

    它很可能是“unittest discovery”的一个错误,当您明确指定命名空间包作为发现的目标时,发现工作有效。但它不会递归到 namespace_pkg 内的任何命名空间包。因此,当您简单地运行“python3 -m unittest discover”时,它不会进入 cwd 中的所有命名空间包(基本上是文件夹)。

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

    【讨论】:

      【解决方案2】:

      checkout = 用于将源代码签出到配置路径(默认为 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 的目录的测试子目录,美元符号 $ 等等。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-07-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-30
        • 2017-04-22
        • 2019-12-27
        相关资源
        最近更新 更多