Правильный способ ожидания теста до завершения процесса

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

У нас есть общий саб 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;
}

Используя вышеприведенный подпункт, я пытаюсь протестировать процесс, который имеет следующие шаги.

  1. Пользователь инициирует заказ, система показывает пользователю сообщение "Заказ запланирован, ожидание выполнения...".

  2. Браузер проверяет статус заказа каждые 2 секунды через AJAX

  3. Планировщик обрабатывает его в фоновом режиме
    1. a - Если он завершен в течение 20 секунд, система выводит сообщение "Заказ выполнен"
    2. 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
}

0 ответов

Другие вопросы по тегам