我不确定如何在测试脚本中等待调度程序完成先前测试启动的进程。下一个测试是检查过程是否已完成。
我们有一个共同的子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,我正在尝试测试具有以下步骤的过程。
用户启动订单,系统向用户显示消息"订单已预定,等待完成..."。
浏览器通过AJAX
# Test: Initiate order
ok($test->web_page_submit(
fields => { command => 'order', ... },
find => "Order scheduled"
), 'Order Initiated');
在浏览器中,每隔两秒就会对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
}