在流程完成之前等待测试的正确方法

时间:2017-05-01 09:49:45

标签: perl www-mechanize test-more

我不确定如何在测试脚本中等待调度程序完成先前测试启动的进程。下一个测试是检查过程是否已完成。

我们有一个共同的子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;
}

使用上面的sub,我正在尝试测试具有以下步骤的过程。

  1. 用户启动订单,系统向用户显示消息"订单已预定,等待完成..."。

  2. 浏览器通过AJAX

  3. 每2秒检查订单状态
  4. 计划程序在后台处理它
    1. a - 如果在20秒内完成,则系统显示msg"订单已完成"
    2. b - 如果在20秒内未完成,则系统显示msg"订单已接受和已处理,您将在完成时收到邮件"
  5. 测试1:发起订单

    # Test: Initiate order
    
    ok($test->web_page_submit(
        fields => { command => 'order', ... },
        find   => "Order scheduled"
    ), 'Order Initiated');
    

    测试2:我需要在第二次测试执行前等待。

    在浏览器中,每隔两秒就会对MySQL表orderstatus进行一次AJAX轮询。它在十次尝试后放弃并显示失败消息。

    等待条件: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 个答案:

没有答案