my $collect = 0;
while(($collect = waitpid(-1, WNOHANG)) > 0) {
$cur_live_proc--;
}
}
if ( ($cur_live_proc<$MAX_LIVE_PROC) and ($handled_task<$TOTAL_TASK) ) {
$handled_task++;
$cur_live_proc++;
my $pid = fork();
unless ($pid) {
my $filename = &getUniqueFilename();
push @result_filename, $filename;
system "./checkHost $IP[$handled_task-1] $uid $psw $filename";
exit 0;
}
} else {
next;
}
}
&checkResults();
小結
根據常見的設備系統測試自動化平臺的特點和要求,把 Perl 的多進程技術應用到了測試腳本中,極大地提高了測試效率。
Perl 多進程已經很長的發展歷史,而且應用廣泛,技術成熟。多進程在健壯性和容錯性方面表現更好,每個進程都擁有獨立的內存空間,并行的幾個進程一般來說不會相互干擾;當然,相應的,多進程的系統開銷也比較大,而且進程間通信也變得復雜一些。妥善地處理多進程生成和進程間的通信,會很好地改善自動化測試的運行效率以及穩定性。
參考資料
參考 http://search.cpan.org/~nwclark/perl-5.8.9/lib/Thread.pm,了解 Perl 線程模型的簡介和 5005threads 的用戶接口函數。
參考 http://search.cpan.org/~aristotle/Proc-Fork-0.71/lib/Proc/Fork.pm,了解 Perl 的多進程使用。
參考 http://search.cpan.org/~pjcj/Gedcom-1.16/install/System.pm,了解 Perl 中執行一個系統命令或者運行一個程序的方法。
查看圖書 Larry Wall, 《 Programming Perl 》 , 了解 Linux 平臺 Perl 多進程的通信方法。
文章來源于領測軟件測試網 http://www.kjueaiud.com/