Perl 多進程技術在自動化測試中的應用 軟件測試
本文內容包括:
Perl 的多進程
自動化測試場景介紹
應用 Perl 多進程技術到自動化測試腳本
小結
參考資料
在 IT 產品系統測試的自動化項目中,經常有并行處理多個子任務的需求,為了提高測試效率,就需要用到多進程或者多線程編程。文章介紹了 Perl 多進程的用法和適用場景,以及 Perl 多進程和多線程的關系。同時結合企業級 IT 產品系統測試的自動化特點,介紹了 Perl 多進程在這方面的應用。
Perl 的多進程
Perl 的多進程
Perl 語言是一種非常強大的腳本語言,其廣泛應用于系統維護,CGI(Common Gateway Interface)編程,數據庫編程和自動化測試中。
多任務和并發處理一度被看作是判定優異操作系統的一個特性;同樣任何優秀從而流行的編程語言都會有并發的應用,而且都有各自的實現方法。Perl 最開始在并發方面的應用就是多進程。
Perl 多進程的用戶接口是 fork() 函數以及對系統 fork 函數封裝的一些 module。我們在使用 Perl 語言編程時,如果一個任務的某一個段可以或者需要并發很多執行,那么我們就會使用 Perl 的多進程編程,例如同時向數據庫遞交多個記錄的查詢,同時完成多個系統信息的收集等等。
Perl 的多進程是這樣實現的:主進程每 fork 一個子進程,會把當前(主進程的)內存空間的所有變量都復制一份傳到新的進程里面,達到數據共享的目的。此外,主進程和子進程可以通過信號、管道等來通信。
在處理并發的方案中,多進程依靠內存空間獨享提供了優秀的容錯性和健壯性。一個多進程的系統不會由于其中一個進程的狀態不良而崩潰,每個進程都相對獨立地運作,很少會相互影響。
內存空間獨享也造就了多進程不可避免的劣勢:資源負荷以及通信復雜,對于 Perl 來說,每個子進程都可以看作主進程的拷貝,這多少有些內存浪費,而且主進程的關鍵變量如果是“淺復制”到子進程的話,將會帶來一些意想不到的錯誤。另外,進程的創建和回收會帶來許多額外的負載,因此應當盡量避免頻繁地創建進程。
多進程之間的通信方式有 socket,管道,信號量等。在 Linux 平臺上,對于進程間大量信息的交互情況,最常用的是文件;這在用戶空間進程和系統內核空間進程之間的通信中的最為常用。
在談起 Perl 多進程的時候,不可避免的要說說它與 Perl 多線程的關系。
Perl 的多線程和多線程的關系
如果我們需要執行一些各異的小任務,他們可能數量較多,但生存周期都比較短,或者他們可能共享大量數據,只有小部分的變量是自身的。這個時候,很自然就想到了多線程。
從 Perl 5.005 開始,多線程的概念被引入 Perl 語言了;不過僅僅是概念而已。在 Perl 5.005 中,線程模型默認共享所有的數據,而且數據的共享訪問需要明確的同步操作。這個模型被稱為“5005threads”,其實就是多進程,只不過換了個“多線程”的概念。
文章來源于領測軟件測試網 http://www.kjueaiud.com/