Что такое тестовый файл

Обновлено: 21.11.2024

Этот модуль предоставляет набор тестовых утилит для атрибутов файлов.

Некоторые атрибуты файла зависят от владельца процесса, проверяющего файл так же, как это делают операторы проверки файла. Например, root (или суперпользователь, или администратор) всегда может читать файлы независимо от разрешений.

Некоторые атрибуты также не имеют смысла за пределами Unix, поэтому некоторые тесты автоматически пропускаются, если они считают, что они не будут работать на этой платформе. Если у вас есть способ заставить эти функции работать, например, в Windows, пришлите мне патч. :) Если вы хотите притвориться Windows на машине, отличной от Windows (например, чтобы протестировать skip() ), вы можете установить переменную среды PRETEND_TO_BE_WINDOWS.

Необязательный параметр NAME для каждой функции позволяет указать имя теста. Если не указано, будет сгенерировано разумное значение по умолчанию.

Функции

Хорошо, если файл существует, иначе нет.

file_not_exists_ok( ИМЯ ФАЙЛА [, ИМЯ] )

Хорошо, если файл не существует, и плохо, если он существует.

file_empty_ok( ИМЯ ФАЙЛА [, ИМЯ ] )

Хорошо, если файл существует и имеет пустой размер, но не подходит, если файл не существует или существует с ненулевым размером.

Ранее он пытался протестировать файл любого типа. Когда-нибудь в будущем это не удастся, если аргумент не является простым файлом или каталогом.

file_not_empty_ok( ИМЯ ФАЙЛА [, ИМЯ] )

Хорошо, если файл существует и имеет ненулевой размер, и не подходит, если файл не существует или существует с нулевым размером.

Ранее он пытался протестировать файл любого типа. Когда-нибудь в будущем это не удастся, если аргумент не является простым файлом или каталогом.

file_size_ok( ИМЯ ФАЙЛА, РАЗМЕР [, ИМЯ] )

Хорошо, если файл существует и имеет размер SIZE в байтах (точно), недопустимо, если файл не существует или существует с размером, отличным от SIZE.

Ранее он пытался протестировать файл любого типа. Когда-нибудь в будущем это не удастся, если аргумент не является простым файлом или каталогом.

file_max_size_ok( FILENAME, MAX [, NAME] )

Хорошо, если файл существует и его размер меньше или равен MAX байтам. Недопустимо, если файл не существует или существует с размером больше MAX байт.

Ранее он пытался протестировать файл любого типа. Когда-нибудь в будущем это не удастся, если аргумент не является простым файлом или каталогом.

file_min_size_ok( ИМЯ ФАЙЛА, МИН. [, ИМЯ] )

Хорошо, если файл существует и его размер больше или равен MIN байтам, недопустимо, если файл не существует или существует с размером меньше MIN байтов.

Ранее он пытался протестировать файл любого типа. Когда-нибудь в будущем это не удастся, если аргумент не является простым файлом или каталогом.

file_line_count_is( FILENAME, COUNT [, NAME ] )

Хорошо, если файл существует и содержит COUNT строк (точно), недопустимо, если файл не существует или существует с количеством строк, отличным от COUNT.

Эта функция использует текущее значение $/ в качестве конца строки и подсчитывает строки, считывая их и подсчитывая количество прочитанных строк.

Ранее он пытался протестировать файл любого типа. Когда-нибудь в будущем это не удастся, если аргумент не является простым файлом или каталогом.

file_line_count_isnt( FILENAME, COUNT [, NAME ] )

Хорошо, если файл существует и содержит не ровно COUNT строк, но не подходит, если файл не существует или существует с количеством строк COUNT. Прочтите это внимательно: файл должен существовать, чтобы этот тест прошел!

Эта функция использует текущее значение $/ в качестве конца строки и подсчитывает строки, считывая их и подсчитывая количество прочитанных строк.

Ранее он пытался протестировать файл любого типа. Когда-нибудь в будущем это не удастся, если аргумент не является простым файлом или каталогом.

file_line_count_between( FILENAME, MIN, MAX, [, NAME ] )

Хорошо, если файл существует и имеет количество строк от MIN до MAX включительно.

Эта функция использует текущее значение $/ в качестве конца строки и подсчитывает строки, считывая их и подсчитывая количество прочитанных строк.

Ранее он пытался протестировать файл любого типа. Когда-нибудь в будущем это не удастся, если аргумент не является простым файлом или каталогом.

file_contains_like (ИМЯ ФАЙЛА, ШАБЛОН [, ИМЯ])

Хорошо, если файл существует и его содержимое (в виде одной большой строки) соответствует ШАБЛОНУ, недопустимо, если файл не существует, не читается или существует, но не соответствует ШАБЛОНУ.

Поскольку содержимое файла считывается в память, вы не должны использовать это для больших файлов. Помимо потребления памяти, диагностика тестов для неудачных тестов может быть трудной для расшифровки. Однако для коротких файлов это работает очень хорошо.

Поскольку все содержимое обрабатывается как одна большая строка, вы можете создать шаблон для проверки нескольких строк. Не забывайте, что вам может понадобиться использовать модификатор /s для таких шаблонов:

Наоборот, если вам нужно сопоставить начало или конец строки внутри файла, используйте модификатор /m:

Если вы хотите проверить содержимое файла на соответствие нескольким шаблонам, но не хотите, чтобы файл считывался повторно, вы можете передать массив шаблонов вместо одного шаблона, например так:

Обратите внимание, что если вы сделаете это, а ваш файл не существует или будет недоступен для чтения, вы получите только одну ошибку теста вместо ошибки для каждого шаблона. Это может привести к тому, что ваш план тестирования будет отключен, хотя в этот момент вам может быть все равно, потому что ваш тест все равно не прошел. Если вам не все равно, либо вообще пропустите план тестирования, используя функцию done_testing() Test::More, либо используйте "file_readable_ok" в сочетании с блоком SKIP.

Предоставлено Бадди Берденом.

file_contains_unlike (ИМЯ ФАЙЛА, ШАБЛОН [, ИМЯ])

Хорошо, если файл существует и его содержимое (в виде одной большой строки) не соответствует ШАБЛОНУ, не подходит, если файл не существует, не читается или существует, но соответствует ШАБЛОНУ.

Все примечания и предостережения для "file_contains_like" относятся и к этой функции.

Предоставлено Бадди Берденом.

file_contains_utf8_like (ИМЯ ФАЙЛА, ШАБЛОН [, ИМЯ])

То же самое, что и file_contains_like , за исключением того, что файл открывается как UTF-8.

file_contains_utf8_unlike (ИМЯ ФАЙЛА, ШАБЛОН [, ИМЯ])

То же самое, что и file_contains_unlike , за исключением того, что файл открывается как UTF-8.

file_contains_encoded_like (ИМЯ ФАЙЛА, КОДИРОВАНИЕ, ШАБЛОН [, ИМЯ])

То же самое, что и file_contains_like , за исключением того, что файл открывается с кодировкой

file_contains_encoded_unlike (ИМЯ ФАЙЛА, КОДИРОВАНИЕ, ШАБЛОН [, ИМЯ])

То же самое, что и file_contains_unlike , за исключением того, что файл открывается с кодировкой.

file_readable_ok( ИМЯ ФАЙЛА [, ИМЯ ] )

Хорошо, если файл существует и доступен для чтения, но не подходит, если файл не существует или не может быть прочитан.

file_not_readable_ok( ИМЯ ФАЙЛА [, ИМЯ] )

Хорошо, если файл существует и не может быть прочитан, недопустимо, если файл не существует или не может быть прочитан.

file_writable_ok( ИМЯ ФАЙЛА [, ИМЯ] ) file_writeable_ok( ФАЙЛ ИМЯ [, ИМЯ ] )

Хорошо, если файл существует и доступен для записи, но не подходит, если файл не существует или недоступен для записи.

Исходное имя — file_writeable_ok с этим дополнительным e. Это все еще работает, но есть функция с правильным написанием.

file_not_writeable_ok( ИМЯ ФАЙЛА [, ИМЯ] ) file_not_writable_ok( ФАЙЛ ИМЯ [, ИМЯ ] )

Хорошо, если файл существует и недоступен для записи, недопустимо, если файл не существует или доступен для записи.

Исходное имя — file_not_writeable_ok с этим дополнительным e. Это все еще работает, но есть функция с правильным написанием.

file_executable_ok( ИМЯ ФАЙЛА [, ИМЯ] )

Хорошо, если файл существует и является исполняемым, но не подходит, если файл не существует или не является исполняемым.

Этот тест автоматически пропускается, если предполагается, что он выполняется на платформе Windows.

file_not_executable_ok( ИМЯ ФАЙЛА [, ИМЯ] )

Хорошо, если файл существует и не является исполняемым, и недопустимо, если файл не существует или является исполняемым.

Этот тест автоматически пропускается, если предполагается, что он выполняется на платформе Windows.

file_mode_is( ИМЯ ФАЙЛА, РЕЖИМ [, ИМЯ] )

Хорошо, если файл существует и режим соответствует, но не подходит, если файл не существует или режим не соответствует.

Этот тест автоматически пропускается, если предполагается, что он выполняется на платформе Windows.

Предоставлено Шоном Соричетти

file_mode_isnt( ИМЯ ФАЙЛА, РЕЖИМ [, ИМЯ] )

Хорошо, если файл существует, а режим не совпадает. Недопустимо, если файл не существует или режим совпадает.

Этот тест автоматически пропускается, если предполагается, что он выполняется на платформе Windows.

Предоставлено Шоном Соричетти

file_mode_has( ИМЯ ФАЙЛА, РЕЖИМ [, ИМЯ] )

Хорошо, если файл существует и для него включены все биты в режиме, но не подходит, если файл не существует или режим не соответствует. То есть FILEMODE & MODE == MODE должно иметь значение true.

Этот тест автоматически пропускается, если предполагается, что он выполняется на платформе Windows.

Предоставлено Рикардо Синьесом

file_mode_hasnt( ИМЯ ФАЙЛА, РЕЖИМ [, ИМЯ] )

Хорошо, если файл существует и у него отключены все биты в режиме, но не нормально, если файл не существует или режим не соответствует. То есть FILEMODE & MODE == 0 должны быть истинными.

Этот тест автоматически пропускается, если предполагается, что он выполняется на платформе Windows.

Предоставлено Рикардо Синьесом

file_is_symlink_ok( ИМЯ ФАЙЛА [, ИМЯ] )

Хорошо, если FILENAME является символической ссылкой, даже если она указывает на несуществующий файл. Этот тест автоматически пропускается, если операционная система не поддерживает символические ссылки.

file_is_not_symlink_ok( ИМЯ ФАЙЛА [, ИМЯ] )

Хорошо, если FILENAME не является символической ссылкой. Этот тест автоматически пропускается, если операционная система не поддерживает символические ссылки. Если файл не существует, тест завершается неудачно.

symlink_target_exists_ok( SYMLINK [, TARGET] [, NAME] )

Хорошо, если FILENAME является символической ссылкой и указывает на существующий файл. С необязательным аргументом TARGET тест завершается неудачно, если цель SYMLINK не является TARGET. Этот тест автоматически пропускается, если операционная система не поддерживает символические ссылки. Если файл не существует, тест завершается неудачно.

symlink_target_dangles_ok( SYMLINK [, NAME] )

Хорошо, если FILENAME является символической ссылкой и не указывает на существующий файл. Этот тест автоматически пропускается, если операционная система не поддерживает символические ссылки. Если файл не существует, тест завершается неудачно.

symlink_target_is( SYMLINK, TARGET [, NAME] )

Хорошо, если FILENAME является символической ссылкой и указывает на TARGET. Этот тест автоматически пропускается, если операционная система не поддерживает символические ссылки. Если файл не существует, тест завершается неудачно.

symlink_target_is_absolute_ok( SYMLINK [, NAME] )

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

dir_exists_ok( DIRECTORYNAME [, NAME] )

Хорошо, если файл существует и является каталогом, но не подходит, если файл не существует или существует, но не является каталогом.

Предоставлено Бадди Берденом.

dir_contains_ok( ИМЯ КАТАЛОГА, ИМЯ ФАЙЛА [, ИМЯ] )

Хорошо, если каталог существует и содержит файл, но не подходит, если каталог не существует или существует, но не содержит файла.

Предоставлено Бадди Берденом.

link_count_is_ok( ФАЙЛ, LINK_COUNT [, ИМЯ])

Хорошо, если количество ссылок на ФАЙЛ равно LINK_COUNT. LINK_COUNT интерпретируется как целое число. LINK_COUNT, который оценивается как 0, возвращает OK, если файл не существует.

link_count_gt_ok( ФАЙЛ, LINK_COUNT [, ИМЯ])

Хорошо, если количество ссылок на ФАЙЛ больше LINK_COUNT. LINK_COUNT интерпретируется как целое число. LINK_COUNT, который оценивается как 0, возвращает OK, если на файл есть хотя бы одна ссылка.

link_count_lt_ok( ФАЙЛ, LINK_COUNT [, ИМЯ])

Хорошо, если количество ссылок на ФАЙЛ меньше LINK_COUNT. LINK_COUNT интерпретируется как целое число. LINK_COUNT, который оценивается как 0, возвращает OK, если на файл есть хотя бы одна ссылка.

owner_is( ФАЙЛ, ВЛАДЕЛЕЦ [, ИМЯ])

Хорошо, если владелец ФАЙЛА совпадает с ВЛАДЕЛЬЦЕМ. ВЛАДЕЛЕЦ может быть текстовым именем пользователя или числовым идентификатором пользователя. Тестовые пропуски в Dos и Mac OS owner_isnt( ФАЙЛ, ВЛАДЕЛЕЦ [, ИМЯ] )

Хорошо, если владелец ФАЙЛА не совпадает с ВЛАДЕЛЬЦЕМ. ВЛАДЕЛЕЦ может быть текстовым именем пользователя или числовым идентификатором пользователя. Тестовые пропуски в Dos и Mac OS group_is( FILE , GROUP [, NAME ] )

Хорошо, если группа ФАЙЛА такая же, как и ГРУППА. GROUP может быть текстовым именем группы или числовым идентификатором группы. Тестовые пропуски в Dos, Mac OS group_isnt( FILE , GROUP [, NAME ] )

Хорошо, если группа ФАЙЛА не совпадает с группой ГРУППА. GROUP может быть текстовым именем группы или числовым идентификатором группы. Тестовые пропуски в Dos, Mac OS file_mtime_age_ok( ФАЙЛ [, WITHIN_SECONDS ] [, NAME ] )

Хорошо, если время изменения ФАЙЛА составляет WITHIN_SECONDS, включая текущее системное время. Этот тест использует stat() для получения mtime. Если файл не существует, тест возвращает ошибку. Если stat() не работает, тест пропускается.

file_mtime_gt_ok( ФАЙЛ, UNIXTIME [, ИМЯ])

Хорошо, если mtime ФАЙЛА > UNIXTIME. Этот тест использует stat() для получения mtime. Если stat() не проходит, этот тест пропускается. Если ФАЙЛ не существует, этот тест не пройден.

file_mtime_lt_ok( ФАЙЛ, UNIXTIME, [, ИМЯ])

Хорошо, если время изменения ФАЙЛА

* проверить свойства других пользователей (например, readable_by_root)

* проверить количество ссылок на файл

* проверить части пути (каталог, имя файла, расширение)

Этот модуль находится на Github:

Шон Соричетти предоставил некоторые функции.

Том Метро помог мне разобраться с некоторыми возможностями Windows.

Дилан Мартин добавил owner_is и owner_isnt .

Дэвид Уиллер добавил file_line_count_is .

Бадди Берден предоставил dir_exists_ok , dir_contains_ok , file_contains_like и file_contains_unlike .

xmikew предоставил материал mtime_age.

Торбьорн Линдал работает над Test2::Tools::File, и мы вместе работаем над согласованием наших интерфейсов.

Авторское право © 2002–2022, Брайан Д. Фой. Все права защищены.

Эта программа является бесплатным программным обеспечением; вы можете распространять его и/или изменять в соответствии с условиями Artistic License 2.0

Инструкции по установке модуля

Чтобы установить Test::File, скопируйте и вставьте соответствующую команду в свой терминал.

Дополнительную информацию об установке модуля см. в подробном руководстве по установке модуля CPAN.

Резюме
При тестировании передачи файлов иногда полезно иметь в системе несколько общих тестовых файлов определенного размера, которые не содержат конфиденциальных данных. В этой статье показано, как создавать такие файлы.

dd
Простым способом создания тестовых файлов является использование программы dd . Это просто записывает файл, состоящий из множества нулей, в указанное вами место.Вы можете указать различные параметры, например размер файла.

установка дд

доступно для Windows, Linux, Unix и OS X. Если у вас Linux, система Unix или OS X уже должна быть установлена. Чтобы проверить, откройте командную строку и введите:

Это должно вернуть местоположение dd, если оно находится в вашем $PATH .

После загрузки файла разархивируйте его в каталог.

синтаксис dd
Чтобы использовать dd, вы должны запустить его из командной строки. Если вы используете Windows, откройте командную строку и перейдите в каталог, в который вы распаковали файл dd-0.5.zip. Вы должны найти там программу под названием dd.exe, которую вам нужно запустить.

  • of= : если вы не укажете путь, тестовый файл будет записан в каталог, в котором вы сейчас находитесь.
  • bs= : обычно установлено значение 1024, т. е. 1 КБ.
  • count= : количество операций записи размера блока. Использование числа, кратного 1024, сохраняет значения по основанию 2.

Примечание. Предполагается, что все примеры для Windows размещены в c:\dd .

Это записывает файл с именем 10MB.testfile в c:\temp\testfiles с размером 10MB:

Это записывает файл с именем 1GB.testfile в c:\temp\testfile размером 1 ГБ:

Это записывает файл с именем 10 МБ в /tmp/10 МБ и размером 10 МБ:

Это записывает файл с именем 1 ГБ в /tmp/1GB и размером 1 ГБ:

Советы:

В Windows в путях используются символы "/", а не символы обратной косой черты "\"

В Windows используйте строчные буквы при указании пути и имени файла

Если вы работаете в Linux и делаете это от имени пользователя root, не забудьте сменить владельца файлов после их создания на пользователя, которого вы используете для тестирования переноса.

Создание больших тестовых файлов может занять много времени, так что наберитесь терпения.

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

У вас есть приложение, которое создает файлы? Затем вам нужно проверить эти файлы, чтобы убедиться, что их содержимое правильное. Этот модуль упрощает эту задачу. Используйте его тестовые функции, чтобы убедиться, что содержимое файлов соответствует вашим ожиданиям.

Параметры

Эти тестовые функции принимают необязательную хэш-ссылку параметров, которые могут включать один или несколько следующих параметров:

Кодировка, в которой закодирован файл. Это будет использоваться на уровне ввода-вывода для чтения файла, чтобы его можно было правильно декодировать во внутреннее представление Perl. Примеры включают UTF-8, iso-8859-3 и cp1252. См. Encode::Supported для получения списка поддерживаемых кодировок. Также может быть указан как слой, например ":utf8" или ":raw". Полный список слоев см. в Perlio.

Обратите внимание, что важно указать кодировку, если в вашем файле есть символы, отличные от ASCII. И значение для сравнения (строковый аргумент для file_contents_eq() и аргумент регулярного выражения для file_contents_like(), например, должны быть декодированы во внутреннюю форму Perl. Самый простой способ сделать это — использовать для размещения

В вашем тестовом файле и напишите все это в UTF-8. Например:

Контекст таблицы старого стиля единого контекста

Определяет количество контекста, отображаемого в выводе диагностических различий. Если вам нужно показать больше области вокруг разных строк, передайте этот параметр, чтобы определить, сколько еще ссылок вы хотели бы видеть.

Функции тестирования

file_contents_eq

Проверяет, что содержимое файла равно строке. Передайте имя файла в стиле Unix, и оно будет преобразовано для локальной файловой системы. Поддерживаемые параметры:

Старое имя этой функции, file_contents_is, остается псевдонимом.

file_contents_eq_or_diff

Как и file_contents_eq() , только в случае сбоя диагностика будет содержать разницу вместо полного содержимого файла. Это может упростить проверку содержимого очень больших текстовых файлов, в которых отличается только подмножество строк. Поддерживаемые параметры:

контекст стиля кодирования

file_contents_ne

Проверяет, что содержимое файла не равно строке. Передайте имя файла в стиле Unix, и оно будет преобразовано для локальной файловой системы. Поддерживаемые параметры:

Старое имя этой функции, file_contents_isnt, остается псевдонимом.

file_contents_like

Проверяет, соответствует ли содержимое файла регулярному выражению. Регулярное выражение должно быть передано как объект регулярного выражения, созданный qr// . Поддерживаемые параметры:

file_contents_unlike

Проверяет, что содержимое файла не соответствует регулярному выражению. Регулярное выражение должно быть передано как объект регулярного выражения, созданный qr// . Поддерживаемые параметры:

file_md5sum_is

Проверяет, соответствует ли файл заданной контрольной сумме MD5.Контрольная сумма должна быть представлена ​​в виде шестнадцатеричной строки, например, 6df23dc03f9b54cc38a0fc1483df6e21. Передайте имя файла в стиле Unix, и оно будет преобразовано для локальной файловой системы. Поддерживаемые параметры:

Возможно, бесполезно, если не установлено значение :raw .

Старое имя этой функции, file_md5sum, остается псевдонимом.

files_eq

Проверяет, что содержимое двух файлов одинаково. Передайте имя файла в стиле Unix, и оно будет преобразовано для локальной файловой системы. Поддерживаемые параметры:

Старое имя этой функции, file_contents_identical, остается псевдонимом.

files_eq_or_diff

Как и files_eq(), эта функция проверяет, совпадают ли содержимое двух файлов. В отличие от files_eq(), в случае сбоя эта функция выводит разницу между двумя файлами в диагностике. Поддерживаемые параметры:

контекст стиля кодирования

Дэвид Э. Уиллер

Этот модуль хранится в открытом репозитории GitHub. Не стесняйтесь делать форки и вносить свой вклад!

Авторское право (c) 2004-2007 Киррили Роберт. Некоторые права защищены. Copyright (c) 2007-2016 Дэвид Э. Уиллер. Некоторые права защищены.

Эта программа является бесплатным программным обеспечением; вы можете распространять его и/или модифицировать на тех же условиях, что и сам Perl.

Инструкции по установке модуля

Чтобы установить Test::File::Contents, скопируйте и вставьте соответствующую команду в свой терминал.

Дополнительную информацию об установке модуля см. в подробном руководстве по установке модуля CPAN.

Читайте также: