Есть ли способ упаковать мои модульные тесты с PAR или PerlApp?
У меня есть приложение, которое я упаковываю в "бинарную" форму, используя PerlApp для распространения. Так как мои клиенты хотят простую установку для своих систем Win32, это работает очень хорошо.
Теперь клиент решил, что ему нужно запустить все модульные тесты, как при стандартной установке. Тем не менее, они по-прежнему не будут устанавливать нормальный Perl.
Итак, мне нужен способ упаковать свои модульные тесты для работы на системах моего клиента.
Первой моей мыслью было, что я могу собраться prove
в один файл и упакуйте каждый из моих тестов отдельно. Затем отправьте почтовый файл с соответствующей структурой.
Небольшое исследование показало, что Test::Harness::Straps вызывает Perl из командной строки.
Существует ли существующий инструмент, который помогает с этим процессом?
Возможно, я мог бы использовать PAR::Packer
"s parl
инструмент для обработки вызова моих тестовых скриптов.
Меня интересуют мысли о том, как применять PAR или PerlApp, а также мысли о том, как подойти к переопределению Test:: Harness и друзьям.
Благодарю.
Обновление: мое сердце не настроено на PAR или PerlApp. Это просто инструменты, с которыми я знаком. Если у вас есть идея или решение, для которого требуется другой упаковщик (например, Cava Packager), я хотел бы услышать об этом.
Обновление 2: tsee указал на замечательную новую функцию в PAR, которая приближает меня. Существуют ли какие-либо эксперты по TAP, которые могут предоставить некоторые идеи или указания о том, где искать в новом дистрибутиве Test:: Harness?
2 ответа
Я, вероятно, не буду пускать большие новости, если скажу, что PAR (и, вероятно, также perlapp) не предназначены для упаковки всего набора тестов и множества побочных продуктов сборки CPAN-модуля. Они предназначены для упаковки автономных приложений или библиотек двоичных JAR-подобных модулей.
При этом вы можете добавить произвольные файлы в архив PAR (как в библиотеки.par, так и в автономные файлы.exe), используя параметр pa -a. В случае автономного исполняемого файла содержимое будет извлечено в $ENV{PAR_TEMP}."/ Inc" во время выполнения.
В связи с этим возникает проблема повторного использования исполняемого файла, упакованного в PAR, для запуска тестового жгута (и разрешения запускать ваш исполняемый файл как "perl"). Сейчас у меня нет готового решения для этого, но я недавно работал над тем, чтобы сделать исполняемые файлы, упакованные в PAR, повторно используемыми как более или менее универсальные интерпретаторы perl. Две ошибки, прежде чем я объясню, как вы можете использовать это:
- Ваше приложение не будет волшебным образом называться "perl" и добавляться в ваш $PATH.
- "Повторное использование" приложения в качестве perl общего назначения требует специальных опций и в настоящее время не поддерживает обычные опции perl (те, что в perlrun). Он может просто запустить внешний Perl-скрипт по вашему выбору.
К сожалению, последняя проблема - то, что может убить этот подход для вас. Я всегда думал о поддержке параметров командной строки perl, но в ближайшее время не осуществлю.
Вот рецепт, как вы получаете PAR с поддержкой "reusable exe":
- Установите новейшую версию PAR от CPAN.
- Установите новейшую версию PAR::Packer для разработчиков из CPAN (0.992_02 или 03).
- Добавьте опцию --reusable в вашу командную строку pp.
Запустите ваш исполняемый файл со следующими параметрами, чтобы запустить внешний скрипт "foo.pl":
./myapp --par-options --reuse foo.pl FOO-PL-OPTIONS-HERE
К сожалению, как вы собираетесь учить Test::Harness, что "./myapp --par-options --reuse" является интерпретатором perl, мне не под силу.
Cava Packager позволяет упаковывать тестовые сценарии с вашими упакованными исполняемыми файлами. Это в первую очередь позволяет вам запускать тесты для упакованного кода перед распространением. Однако есть возможность распространять тесты и тестовые возможности среди ваших конечных пользователей.
Примечание. Как указано под моим именем, я связан с Cava Packager.