March 2010 Archives

Прежде, чем вы сможете извлечь пользу от написания тестов, вы должны научиться выполнять их. Существует несколько способов сделать это.

Чтобы увидеть реальные тесты в действии, скачайте последнюю версию Test::Harness из CPAN и распакуйте её в домашнем каталоге. Перейдите в созданную директорию и установите модуль ( см. "Установка Тестовых Модулей"). Чтобы запустить все тесты сразу, введите в командной строке make test:

    $ make test
    PERL_DL_NONLAZY=1 /usr/bin/perl5.8.6 "-MExtUtils::Command::MM" "-e" \
        "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
    t/00compile.........ok 1/5# Testing Test::Harness 2.46
    t/00compile.........ok
    t/assert............ok
    t/base..............ok
    t/callback..........ok
    t/harness...........ok
    t/inc_taint.........ok
    t/nonumbers.........ok
    t/ok................ok
    t/pod...............ok
    t/prove-globbing....ok
    t/prove-switches....ok
    t/strap-analyze.....ok
    t/strap.............ok
    t/test-harness......ok
            56/208 skipped: various reasons
    All tests successful, 56 subtests skipped.
    Files=14, Tests=551,  6 wallclock secs ( 4.52 cusr +  0.97 csys =  5.49 CPU)

Что произошло ?

make test - третий шаг в инсталляции почти каждого модуля Perl. Эта команда выполняет все тестовые файлы, которые содержатся в установочном пакете модуля. И в нашем случае были запущены все тестовые файлы Test::Harness, с последующим выводом информации о результатах.

Вопросы и ответы

  • Вопрос:

    Как запускать тесты для дистрибутивов, которые не используют Makefile.PL ?

  • Ответ:

    make test используется вместе с ExtUtils::MakeMaker - старым и почтенным модулем. Но есть также Module::Build, который в некоторых случаях проще для использования. Если в установочном комплекте есть файл Build.PL, используйте соответственно команды perl Build.PL, perl Build, и perl Build test. Они работают также как было ранее описано с командой make.

  • Вопрос:

    Как запускать тесты по отдельности ?

  • Ответ:

    Команда make test, запускает все тесты дистрибутива в определенном порядке. Вместо нее можно использовать команду prove, если вы хотите запускать только некоторые тесты по отдельности. prove запускает тестовые файлы, имена которых вы передадите ей в качестве аргументов командной строки. Срабатывают только нужные тесты с выводом отчета их результатов.

        $ prove t/strap*.t
        t/strap-analyze....ok
        t/strap............ok
        All tests successful.
        Files=2, Tests=284,  1 wallclock secs ( 0.66 cusr +  0.14 csys =  0.80
            CPU)

    Если вы хотите увидеть более подробный отчет по тестам, используйте флаг -v:

        $ prove -v t/assert.t
        t/assert....1..7
        ok 1 - use Test::Harness::Assert;
        ok 2 - assert(  ) exported
        ok 3 - assert( FALSE ) causes death
        ok 4 -   with the right message
        ok 5 - assert( TRUE ) does nothing
        ok 6 - assert( FALSE, NAME )
        ok 7 -   has the name
        ok
        All tests successful.
        Files=1, Tests=7,  0 wallclock secs ( 0.06 cusr +  0.01 csys =  0.07 CPU)

    Этот флаг указывает prove не скрывать подробностей за кулисами. В результате на экран выводится дополнительная информация вместе с кратким отчетом. Это очень удобно для разработки и отладки.

    Примечание: Если у вас не установлен prove, вы используете старую версию Test::Harness. Находясь в установочном каталоге Test::Harness, введите команду bin/prove.

  • Вопрос:

    Как запускать индивидуальные тесты без prove ?

  • Ответ:

    В большинстве случаев вы можете запускать тесты вручную, как обычные скрипты на Perl.

        $ perl t/00compile.t
        1..5
        ok 1 - use Test::Harness;
        # Testing Test::Harness 2.42
        ok 2 - use Test::Harness::Straps;
        ok 3 - use Test::Harness::Iterator;
        ok 4 - use Test::Harness::Assert;
        ok 5 - use Test::Harness;

    Упс! Этот тест сработал над установленным модулем Test::Harness 2.42, хотя надо протестировать новую версию 2.46. Это происходит, потому что в массиве @INC не прописан путь до каталога где находится наш модуль. Есть несколько способов решить эту проблему. Но мы используем прагму blib предназначенную как раз для подборки модулей, собранных как командой make, так и командой perl Build.

        $ perl -Mblib t/00compile.t
        1..5
        ok 1 - use Test::Harness;
        # Testing Test::Harness 2.46
        ok 2 - use Test::Harness::Straps;
        ok 3 - use Test::Harness::Iterator;
        ok 4 - use Test::Harness::Assert;
        ok 5 - use Test::Harness;

    С флагом -M perl загружает прагму blib просто как если бы в файле скрипта содержалась строка use blib;

    Аргумент TEST_FILES для make test также указывает какие именно тестовые файлы нужно запустить:

        $ make test TEST_FILES=t/00compile.t
        t/00compile....ok 1/5# Testing Test::Harness 2.46
        t/00compile....ok
        All tests successful.
        Files=1, Tests=5,  0 wallclock secs ( 0.13 cusr +  0.02 csys =  0.15
            CPU)

    Примечание: В параметре TEST_FILES можно указать шаблон файлов, например так: TEST_FILES=t/strap*.t, таким образом будут запущены все тестовые файлы, которые соответствуют указанному шаблону.

    Команда make с параметром TEST_VERBOSE=1 выводит подробный отчет по тестам:

Ниже приводится перевод главы Beginning Testing из учебника Perl Testing: A Developer`s Notebook

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

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

Способы установки модулей Perl

Лучший способ установки модулей из CPAN через систему установки модулей, которая может сама произвести поиск, загрузку сборку, установку модулей и их зависимостей.

Через оболочку CPAN

На Unix-подобных платформах (включая Mac OS X), а также в Windows если есть в наличии С компилятор, самый простой способ установки модулей - использование модуля CPAN, который поставляется с Perl. Например, если у вас еще не установлен модуль Test::Simple, запустите командную оболочку CPAN, а затем введите install Test::Simple . Ниже приводится примерная картина установки этого модуля.

    % cpan
    cpan shell -- CPAN exploration and modules installation (v1.7601)
    ReadLine support enabled
    cpan> install Test::Simple
    Running install for module Test::Simple
    Running make for M/MS/MSCHWERN/Test-Simple-0.54.tar.gz

    ...

    Appending installation info to /usr/lib/perl5/5.8.6/powerpc-linux/perllocal.pod
    /usr/bin/make install UNINST=1 -- OK

Примечание: Вы также можете запустить оболочку CPAN командой perl MCPAN -e shell .

Если Test::Simple имеет какие-либо зависимости (в нашем случае их нет), оболочка обнаружит их и установит их первыми.

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

Через PPM

В Windows чаще в всего используется дистрибутив Perl от ActiveState, в которую входит утилита ppm для загрузки, конфигурации, сборки и установки модулей. Если у вас установлен ActivePerl, откройте окно консоли и введите:

    C:\>PPM
    PPM> install Test-Simple

Примечание: ActivePerl также выпускает дистрибутивы Perl для Linux и Solaris, так что вышеуказанные инструкции работают и там.

Если конфигурация указана верно, ppm загрузит и установит последнюю версию Test::Simple из репозитория ActiveState.

Если модуля нет в репозитории вообще, либо его версия в репозитории не самая последняя, у вас есть несколько вариантов.

Первый вариант - вы можете найти альтернативные репозитории. Смотрите список ppm репозиториев . Ниже приводится пример подключения репозитория к PPM.

    C:\>PPM
    PPM> set repository dada http://dada.perl.it/PPM
    PPM> set save

Вручную

Если вы хотите вручную установить модуль на чистом Perl или работаете на пларформе, где имеется соответствующий компилятор, вы можете загрузить и установить модуль вручную. Найти подходящий модуль можно на сайте http://search.cpan.org. После того, как вы нашли и загрузили архив модуля, распокуйте его в домашнем каталоге:

    $ tar xvzf Test-Simple-0.54.tar.gz
    Test-Simple-0.54/
    ...

Примечание: Чтобы установить среду компиляции для Perl на Windows, обратитесь к файлу README.win32, который поставляется вместе с Perl.

Запустите программу Makefile.PL и затем выполните стандартные команды сборки и тестирования модуля:

    $ perl Makefile.PL
    Checking if your kit is complete...
    Looks good
    Writing Makefile for Test::Simple

    $ make
    ...
    cp lib/Test/Builder.pm blib/lib/Test/Builder.pm
    cp lib/Test/Simple.pm blib/lib/Test/Simple.pm

    $ make test

Примечание: Загруженный архив имеет статус "Текущий релиз"(This Reliase), если вы планируете помочь в развитии модуля, нужно загрузить его последний релиз для разработчиков (Latest Dev Release).

Если все тесты пройдены, отлично! В противном случае, сделайте все возможное, чтобы выяснить, что не удалось сделать, почему, и насколько это поправимо. Наконец, необходимо установить модуль, запустив make install (с привилегиями администратора, если вы устанавливаете модуль в системный каталог).

Обычно Makefile.PL использует модуль ExtUtils::MakeMaker для конфигурации и установки модулей. Но иногда для этой же цели используется Build.PL и Module::Build. В этом случае нужно указать другие команды установки:

    $ perl Build.PL
    $ perl Build
    $ perl Build test
    # perl Build install

Примечание: на Unix можно использовать ./Build вместо perl Build.

В остальном, они работают практически идентично.

На Windows может потребоваться установка утилиты nmake от Microsoft для установки модулей вручную, которая использутеся так же, как и make. Таким образом, установка модулей на Windows производится командами nmake: nmake, nmake test, и nmake install.

Примечание: Файл README.win32 из исходного кода дистрибутива Perl может помочь в разрешении вопросов по утилите nmake.exe

Вопрос - ответ ...

  • Вопрос:

    Как я узнаю какое имя нужно указать, при установке модуля через PPM ? Я пытался установить Test-More, но утилита не может его найти!

  • Ответ:

    Такое бывает когда модуль входит в состав дистрибутива модулей, поэтому нужно установить сам дистрибутив. Определить к какому дистрибутиву относится модуль можно на http://search.cpan.org. В нашем примере Test::More входит в дистрибутив Test-Simple, поэтому нужно указать в PPM название дистрибутива Тest::Simple, чтобы установился модуль Test::More.

  • Вопрос:

    Я не системный администратор, или я не хочу устанавливать модули в системный каталог. Как я могу установить модуль в конкретный каталог?

  • Ответ:

    Укажите соответствующий параметр PREFIX при установке модуля. Например, PREFIX ~/perl/lib установит модуль в каталог ~/perl/lib (по меньшей мере, на Unix системах). Затем добавьте в переменную окружающей среды PERL5LIB путь к каталогу или не забывайте использовать прагму lib для добавления каталога в @INC во всех программах, в которых будут вызваны локально установленные модули. Примечание: Почитайте perlfaq8 чтобы узнать больше о поддержке вашего собственного каталога модулей.

    Если вы устанавливаете модуль вручную, выполните Makefile.PL следующим образом:

        $ perl Makefile.PL PREFIX=~/perl/lib

    Примечание: MakeMaker 6.26 поддерживает INSTALLBASE, используйте его вместо PREFIX.

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

        % cpan
    
        ...
                 # указать каталог установки модулей
        cpan[1]> o conf makepl_arg PREFIX=/home/UserName/mylib  
    
                 # зафиксировать изменения параметров
        cpan[2]> o conf commit

    Если устанавливаемый модуль использует Module::Build , укажите параметр --installbase вместо PREFIX

        $ perl Build.PL --installbase=~/perl

    Обратитесь к документации для ExtUtils::MakeMaker, CPAN, и Module::Build за более подробной информацией.

Ниже приводится вольный перевод раздела 'Overview' из книги "Perl Testing A Developer's Notebook"

cover.jpg

Обзор

Есть ли в разработке программного обеспечения тема сексуальнее, чем тема о тестировании программного обеспечения? Что это кроме программирования игр, 3D графики, аудио, высокопроизводительных кластеров, хороших сайтов и.т.д ? Во всяком случае, тестирование находится ниже этого списка. И это прискорбно, потому что хорошее тестирование может увеличить производительность, улучшить дизайн, поднять качество, облегчить накладные расходы, и помочь удовлетворить ваших клиентов, сотрудников и менеджеров.

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

Как и все книги из серии Записная книжка O'Reilly', эта книга пропускает скучную прозу и сосредотачивает внимание на серии упражнений, которые показывают практические примеры реализации задач.

"Записная книжка разработчика: Perl тестирование" поможет быть в теме и:

  • Создавать базовые тесты Perl с легкостью и интерпретацией результатов

  • Применять специальные методы и модули для улучшения ваших тестов

  • Включать наборы тестов в ваши проекты

  • Тестировать базы данных и их данные

  • Тестировать веб сайты и веб проекты

  • Использовать единый формат вывода результатов тестирования(Test Anything Protocol/TAP) с тестами проектов, написанных на других языках

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

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

Statistic

About this Archive

This page is an archive of entries from March 2010 listed from newest to oldest.

April 2010 is the next archive.

Find recent content on the main index or look in the archives to find all content.