使用tox运行时,如何使pytest测试可以访问测试数据文件?

时间:2018-11-14 21:54:41

标签: pytest tox

我想为通过参数testfunction(some_path_to_file)输入Path到文件的函数运行tox。我想传递给函数的文件不能在测试设置期间临时创建(我通常通过pytests builtin tmpdir fixtures完成),而是位于测试目录<package>/data之外的软件包<package>/tests目录中(位置<package>/tests/data可能会更好)。由于tox在virtualenv中运行测试,因此我不清楚如何使测试数据文件可用于测试。我知道我可以使用--basedir option来定义pytest的基本临时目录,但是我还没有使用tox来使用它。

tl; dr

问题是使用sqlite3.connect(databasesome_path_to_filePath转换为str(以将其传递到function内部的Path.resolve() 。无需以任何方式配置pytests --basedir选项和tox

2 个答案:

答案 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