我想为通过参数test
和function(some_path_to_file)
输入Path
到文件的函数运行tox
。我想传递给函数的文件不能在测试设置期间临时创建(我通常通过pytest
s builtin tmpdir
fixtures完成),而是位于测试目录<package>/data
之外的软件包<package>/tests
目录中(位置<package>/tests/data
可能会更好)。由于tox
在virtualenv中运行测试,因此我不清楚如何使测试数据文件可用于测试。我知道我可以使用--basedir
option来定义pytest
的基本临时目录,但是我还没有使用tox
来使用它。
tl; dr
问题是使用sqlite3.connect(database
将some_path_to_file
从Path
转换为str
(以将其传递到function
内部的Path.resolve(
) 。无需以任何方式配置pytests --basedir
选项和tox
。
答案 0 :(得分:1)
这也把我绊倒了。我能够解决的方法是指定文本文件的完整路径,我希望测试功能将 relative 读入基本目录。
例如,我的目录树如下所示:
.
├── __init__.py
├── my_package
│ ├── __init__.py
│ └── calculate_stats.py
├── my_package.egg-info
│ ├── PKG-INFO
│ ├── SOURCES.txt
│ ├── dependency_links.txt
│ ├── requires.txt
│ └── top_level.txt
├── bin
│ └── calculate_stats
├── requirements
│ ├── default.txt
│ └── development.txt
├── setup.py
├── test
│ ├── __init__.py
│ ├── test_calculate_stats.csv
│ ├── test_calculate_stats.txt
│ └── test_calculate_stats.py
└── tox.ini
在文件test_calculate_stats.py
中,有以下一行:
assert (calculate_stats.calculate_stats_to_csv("test/test_calculate_stats.txt", "test/test_calculate_stats.csv") == 60)
calculate_stats_to_csv
函数读取test/test_calculate_stats.txt
文件,计算一些统计信息,并将其输出到test/test_calculate_stats.csv
最初,我刚刚将输入文件指定为test_calculate_stats.txt
,因为它与包含测试功能的文件位于同一目录中-这是我遇到错误的时候。
答案 1 :(得分:0)
tox
预定义了多个substitutions。 virtualenv的目录为{envdir}
,site-packages
在{envsitepackagesdir}
。像这样从命令行将值传递到测试脚本:
[testenv]
commands = pytest --basedir={envsitepackagesdir}/mypackage