Модульное тестирование Python с PyTables и HDF5

Как правильно проводить модульное тестирование с файловым вводом-выводом, особенно если оно включает PyTables и HDF5?

Мое приложение развивается вокруг хранения и извлечения данных python в файлы hdf5 и из них. Пока что я просто сам пишу файлы hdf5 в модульных тестах и ​​загружаю их для сравнения. Проблема в том, что я, конечно, не могу быть уверен, когда кто-то еще запускает тест, что у него есть права на запись файлов на жесткий диск. (Это, вероятно, становится еще хуже, когда я хочу использовать автоматизированные среды тестирования, такие как Jenkins, но я еще не проверял это).

Каков правильный способ справиться с этими ситуациями? Лучше всего создать папку /tmp/ в определенном месте, где, скорее всего, будет предоставлен доступ для записи? Если да, то где это? Или есть простой и прямой способ издеваться над записью и чтением PyTables?

Большое спасибо!


person SmCaterpillar    schedule 27.09.2013    source источник


Ответы (2)


Как насчет использования модуля «tempfile» для создания файлов?

http://docs.python.org/2/library/tempfile.html

Я не знаю, гарантированно ли он работает на всех платформах, но держу пари, что он работает на самых распространенных. Это, безусловно, было бы лучше, чем жестко указывать «/ tmp» в качестве места назначения.

Другой способ — создать базу данных HDF5 в памяти, чтобы не требовался файловый ввод-вывод.

http://pytables.github.io/cookbook/inmemory_hdf5_files.html

Я получил эту ссылку, погуглив «hdf5 в памяти», поэтому не могу точно сказать, насколько хорошо она работает.

Я думаю, что наилучшей практикой было бы написание всех тестовых случаев для работы как с базой данных в памяти, так и с базой данных tempfile. Таким образом, даже если один из вышеперечисленных методов не сработает для пользователя, остальные тесты все равно будут выполняться. Также вы можете отдельно определить, связаны ли ошибки с записью файлов или с чем-то внутренним в базе данных.

person cxrodgers    schedule 27.09.2013
comment
Вы не можете использовать tempfile, потому что pytables/hdf5 создаст свой собственный дескриптор файла и не сможет использовать тот, который вы предоставили. - person Anthony Scopatz; 27.09.2013

По сути, HDF5 и Pytables — это библиотеки ввода-вывода. Они предоставляют API для манипулирования файловой системой. Поэтому, если вы действительно хотите протестировать PyTables/HDF5, вам нужно обратиться к файловой системе. Обойти это невозможно. Если у пользователя нет прав на запись в систему, он не может запускать тесты. Или, по крайней мере, они не могут проводить реалистичные тесты.

Вы можете использовать драйвер файла в памяти для тестирования. Это полезно для ускорения большинства тестов и тестирования функциональности более высокого уровня. Однако, даже если вы пойдете по этому пути, у вас все равно должно быть несколько тестов, которые действительно записывают реальные файлы. Если они терпят неудачу, вы знаете, что что-то не так.

Обычно люди создают временные файлы h5 в каталоге тестов. Но если вы действительно беспокоитесь о том, что у пользователя нет прав на запись в этот каталог, вам следует использовать tempfile.gettempdir(), чтобы найти правильный каталог /tmp для своей среды. Обратите внимание, что это кроссплатформенная программа, поэтому она должна работать везде. Поместите туда файлы h5, которые вы создаете, и не забудьте потом удалить их!

person Anthony Scopatz    schedule 27.09.2013