- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 tox 在 CircleCI 部署中运行测试。我有一个名为 tests
的目录,在这个目录中,我有另一个名为 test_files
的目录,其中包含我用于模拟的文件,例如包含 JSON 数据的文件。在本地,我使用模拟文件成功运行测试,但在 CircleCI 中,pytest 无法在目录中找到 JSON 文件:FileNotFoundError: [Errno 2] No such file or directory: 'test_files/data.json'
这是我的tox.ini
:
[tox]
envlist = py37,py38,flake8
[testenv]
deps=-r{toxinidir}/requirements.txt
-r{toxinidir}/test-requirements.txt
commands=
pytest -v tests
和我的config.yml
:
version: 2
jobs:
# using tox
toxify:
docker:
- image: python:3.8
steps:
- checkout
- run:
name: tox build
command: |
pip install tox
tox -q
- run:
name: deploy
command: |
./deploy.sh
workflows:
version: 2
build_and_release:
jobs:
- toxify:
filters:
tags:
only: /^v\d+\.\d+\.\d+$/
测试示例:
from my_package.image import ImageValidator
def test_valid_image():
image_validator = ImageValidator("test_files/default_image.png")
assert image_validator.is_valid_image() is True
我打开图像:
file_path = glob.glob(os.path.join(os.path.dirname(file_path), '*.png'))[0]
with open(file_path, "rb") as image:
image_data = image.read()
...
我错过了什么吗?
最佳答案
重申注释:如果您在代码中使用相对路径:
def test_valid_image():
image_validator = ImageValidator("test_files/default_image.png")
路径test_files/default_image.png
将相对于当前工作目录进行解析,因此如果完整路径是例如
/root/tests/test_files/default_image.png
仅当您从 /root/tests
运行测试时才能找到该文件: cd/root/tests; pytest 可以工作,而其他所有工作目录,例如cd/root; pytest 测试/
将失败。这是您的 tox
配置中当前发生的情况:
commands=
pytest -v tests
在项目根目录中启动pytest
,在tests
目录中查找测试,因此test_files/default_image.png
解析为项目根目录/test_files/default_image.png
而不是您所期望的 project root/tests/test_files/default_image.png
。
有很多方法可以规避这个问题。最好是解析相对于某些静态文件的路径,例如调用模块:
def test_valid_image():
path = os.path.join(__file__, '..', '..', 'test_files', 'default_image.png')
image_validator = ImageValidator(path)
或者,通过知道 pytest
在其配置中存储项目根:
def test_valid_image(request):
rootdir = request.config.rootdir
path = os.path.join(rootdir, 'tests', 'test_files', 'default_image.png')
image_validator = ImageValidator(path)
现在,路径将被解析,忽略工作目录并绑定(bind)到始终具有相同路径的文件;运行pytest测试/
或cd测试/; pytest
现在具有相同的效果。
其他方法是更改工作目录。由于您的测试期望从 tests
目录执行,因此在 tox.ini
中导航到它:
commands=
cd tests && pytest; cd ..
或
commands=
pushd tests; pytest; popd
等等
关于python - CircleCI - pytest 找不到测试使用的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58901734/
例如,我有一个父类Author: class Author { String name static hasMany = [ fiction: Book,
代码如下: dojo.query(subNav.navClass).forEach(function(node, index, arr){ if(dojo.style(node, 'd
我有一个带有 Id 和姓名的学生表和一个带有 Id 和 friend Id 的 Friends 表。我想加入这两个表并找到学生的 friend 。 例如,Ashley 的 friend 是 Saman
我通过互联网浏览,但仍未找到问题的答案。应该很容易: class Parent { String name Child child } 当我有一个 child 对象时,如何获得它的 paren
我正在尝试创建一个以 Firebase 作为我的后端的社交应用。现在我正面临如何(在哪里?)找到 friend 功能的问题。 我有每个用户的邮件地址。 我可以访问用户的电话也预订。 在传统的后端中,我
我主要想澄清以下几点: 1。有人告诉我,在 iOS 5 及以下版本中,如果您使用 Game Center 设置多人游戏,则“查找 Facebook 好友”(如与好友争夺战)的功能不是内置的,因此您需要
关于redis docker镜像ENTRYPOINT脚本 docker-entrypoint.sh : #!/bin/sh set -e # first arg is `-f` or `--some-
我是一名优秀的程序员,十分优秀!