Какой модуль Perl я могу использовать для проверки вывода CGI на наличие распространенных ошибок? - PullRequest
0 голосов
/ 01 марта 2011

Существует ли модуль Perl, который может проверять вывод CGI другой программы?Например, у меня есть программа

x.cgi

(эта программа не на Perl), и я хочу запустить ее из программы

test_x_cgi.pl

Так, например, test_x_cgi.pl что-то вроде

#!perl
use IPC::Run3
run3 (("x.cgi"), ...)

Так что в test_x_cgi.pl я хочу автоматически проверить, что вывод x.cgi не делает глупостей, например, напечатать сообщения до того, как заголовок HTTP будет полностью выведен.Другими словами, я хочу иметь своего рода «браузер» в Perl, который обрабатывает вывод.Прежде чем пытаться самому создать такую ​​вещь, есть ли какой-нибудь модуль на CPAN, который это делает?

Обратите внимание, что x.cgi здесь не является сценарием Perl;Я пытаюсь написать тестовый фреймворк для него на Perl.Поэтому, в частности, я хочу протестировать строку вывода на предмет неправильности.

Редактировать: Спасибо

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

Ответы [ 5 ]

2 голосов
/ 01 марта 2011

Есть CGI :: Test , который выглядит как то, что вы ищете. В частности, упоминается возможность тестирования не-Perl CGI-программ. Некоторое время он не обновлялся, но не имеет спецификации CGI.

1 голос
/ 01 марта 2011

Есть Test :: HTTP .Я не использовал его, но, похоже, у него есть интерфейс, который соответствует вашим требованиям.

$test->header_is($header_name, $value [, $description]);

Сравнивает заголовок ответа $ header_name со значением $ value, используя Test :: Builder-is>.

$test->header_like($header_name, $regex, [, $description]);

Сравнивает заголовок ответа $ header_name с регулярным выражением $ regex, используя Test :: Builder-like>.

0 голосов
/ 01 марта 2011

Посмотрите на примеры из главы 16 из поваренной книги Perl

16.9.Управление вводом, выводом и ошибкой другой программы

Используется IPC :: Open3.Fom Perl Cookbook, может быть изменен мной, см. Ниже.

Пример 16.2

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

use IPC::Open3;
use IO::Select;


$cmd = "grep vt33 /none/such - /etc/termcap";
 my $pid = open3(*CMD_IN, *CMD_OUT, *CMD_ERR, $cmd);

$SIG{CHLD} = sub {
    print "REAPER: status $? on $pid\n" if waitpid($pid, 0) > 0
};

#print CMD_IN "test test 1 2 3 \n";
close(CMD_IN);

my $selector = IO::Select->new();
$selector->add(*CMD_ERR, *CMD_OUT);

while (my @ready = $selector->can_read) {
    foreach my $fh (@ready) {
        if (fileno($fh) == fileno(CMD_ERR)) {print "STDERR: ", scalar <CMD_ERR>}
        else                                {print "STDOUT: ", scalar <CMD_OUT>}
        $selector->remove($fh) if eof($fh);
    }
}
close(CMD_OUT);
close(CMD_ERR);
0 голосов
/ 01 марта 2011

Если вы хотите написать среду тестирования, я бы посоветовал взглянуть на Test :: More из CPAN в качестве хорошей отправной точки. Это мощный, но довольно простой в использовании и, безусловно, будет лучше, чем собрать что-то вместе как один раз.

0 голосов
/ 01 марта 2011

Если вы хотите проверить, что выходные данные x.cgi правильно отформатированы HTML / XHTML / XML / etc, почему бы не запустить его через W3 Validator?1004 * и найдите способ вызвать его из своего тестового сценария Perl.Или вы можете использовать этот Perl-интерфейс для вызова W3 Validator в сети .

...