Правильный способ ожидания теста до завершения процесса
Я не уверен, как ждать в тестовом скрипте для планировщика, чтобы завершить процесс, инициированный предыдущим тестом. Следующий тест должен проверить, завершен ли процесс.
У нас есть общий саб web_page_submit
, он использует WWW-Mechanize для обработки http post
а затем мы проверяем, если http response
вернул желаемые результаты и возвращает флаг true / false.
sub web_page_submit
{
my $self = shift @_;
my %fields = @_;
my @finds = @_;
$mech = WWW::Mechanize->new();
$mech->submit_form(
form_name => 'myform',
fields => { %fields } );
my $flag=FALSE;
if ( $mech->success() ) {
$flag=TRUE;
if ( @finds ) {
foreach my $content (@finds) {
if ($mech->content() !~ /$content/ ) {
$flag = FALSE;
}
}
}
}
return $flag;
}
Используя вышеприведенный подпункт, я пытаюсь протестировать процесс, который имеет следующие шаги.
Пользователь инициирует заказ, система показывает пользователю сообщение "Заказ запланирован, ожидание выполнения...".
Браузер проверяет статус заказа каждые 2 секунды через AJAX
- Планировщик обрабатывает его в фоновом режиме
- a - Если он завершен в течение 20 секунд, система выводит сообщение "Заказ выполнен"
- b - Если он не завершит его в течение 20 секунд, то система отобразит сообщение "Заказ принят и обработан, вы получите письмо по завершении"
Тест 1: Начать заказ
# Test: Initiate order
ok($test->web_page_submit(
fields => { command => 'order', ... },
find => "Order scheduled"
), 'Order Initiated');
Тест 2: мне нужно подождать здесь, прежде чем будет выполнен второй тест.
Из браузера каждые две секунды происходит опрос AJAX с таблицей MySQL orderstatus
, Он сдается после десяти попыток и показывает сообщение об ошибке.
Условие ожидания: status = 1 in a dbtable || wait should not exceed more then 20 seconds
Мне нужно помочь написать тест кода ожидания?
Мое решение:
while (varcheckDBstatus || (maxtry>10)) {
sleep (2);
varcheckDBstatus = varcheckDBstatus();
}
SKIP: {
skip "Order completed Test", 1 if varcheckDBstatus == 0;
# Test 2
}