自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

應(yīng)用Perl多進程技術(shù)到自動化測試腳本

開發(fā) 架構(gòu) 自動化
Perl多進程是這樣實現(xiàn)的:主進程每fork一個子進程,會把當(dāng)前(主進程的)內(nèi)存空間的所有變量都復(fù)制一份傳到新的進程里面,達到數(shù)據(jù)共享的目的。

本文和大家重點討論一下如何應(yīng)用Perl多進程技術(shù)到自動化測試腳本,首先我們來看一下Perl多進程的概念,Perl語言是一種非常強大的腳本語言,其廣泛應(yīng)用于系統(tǒng)維護,CGI(CommonGatewayInterface)編程,數(shù)據(jù)庫編程和自動化測試中。

Perl多進程

Perl語言是一種非常強大的腳本語言,其廣泛應(yīng)用于系統(tǒng)維護,CGI(CommonGatewayInterface)編程,數(shù)據(jù)庫編程和自動化測試中。
多任務(wù)和并發(fā)處理一度被看作是判定優(yōu)異操作系統(tǒng)的一個特性;同樣任何優(yōu)秀從而流行的編程語言都會有并發(fā)的應(yīng)用,而且都有各自的實現(xiàn)方法。Perl最開始在并發(fā)方面的應(yīng)用就是多進程。
Perl多進程的用戶接口是fork()函數(shù)以及對系統(tǒng)fork函數(shù)封裝的一些module。我們在使用Perl語言編程時,如果一個任務(wù)的某一個段可以或者需要并發(fā)很多執(zhí)行,那么我們就會使用Perl的多進程編程,例如同時向數(shù)據(jù)庫遞交多個記錄的查詢,同時完成多個系統(tǒng)信息的收集等等。

Perl多進程是這樣實現(xiàn)的:主進程每fork一個子進程,會把當(dāng)前(主進程的)內(nèi)存空間的所有變量都復(fù)制一份傳到新的進程里面,達到數(shù)據(jù)共享的目的。此外,主進程和子進程可以通過信號、管道等來通信。
在處理并發(fā)的方案中,多進程依靠內(nèi)存空間獨享提供了優(yōu)秀的容錯性和健壯性。一個多進程的系統(tǒng)不會由于其中一個進程的狀態(tài)不良而崩潰,每個進程都相對獨立地運作,很少會相互影響。

內(nèi)存空間獨享也造就了多進程不可避免的劣勢:資源負(fù)荷以及通信復(fù)雜,對于Perl來說,每個子進程都可以看作主進程的拷貝,這多少有些內(nèi)存浪費,而且主進程的關(guān)鍵變量如果是“淺復(fù)制”到子進程的話,將會帶來一些意想不到的錯誤。另外,進程的創(chuàng)建和回收會帶來許多額外的負(fù)載,因此應(yīng)當(dāng)盡量避免頻繁地創(chuàng)建進程。

多進程之間的通信方式有socket,管道,信號量等。在Linux平臺上,對于進程間大量信息的交互情況,最常用的是文件;這在用戶空間進程和系統(tǒng)內(nèi)核空間進程之間的通信中的最為常用。
在談起Perl多進程的時候,不可避免的要說說它與Perl多線程的關(guān)系。

應(yīng)用Perl多進程技術(shù)到自動化測試腳本

在自動化測試中,利用RationalBuildForge作為測試管理和監(jiān)控工具,90%以上的測試腳本都采用Perl腳本。采用了模塊化編程,并大量使用CPAN提供的module。由于很多module都不是線程安全的,同時為了提高腳本開發(fā)效率,也會在一個腳本中直接調(diào)用另外一個腳本,所以選擇在自動化測試框架中應(yīng)用Perl多進程。

自動化測試腳本使用多進程大致分為兩種情況。一種是Testconsole需要同時操作十幾個設(shè)備,例如用于主機和存儲互連的光纖交換機,用于光纖物理層斷開測試的交換機APCON等。這類測試的特點是需要同時操作10幾個或者20幾個的測試對象,對它們的操作是配置操作,而且配置腳本都會成功,主進程只需要所有子進程執(zhí)行完畢就認(rèn)為所有子任務(wù)已經(jīng)完成,然后可以進行后續(xù)的操作。因此采用一種較為簡單的多進程編程方式。下面是針對這種情況的多進程處理的代碼示例。

清單1.Perl多進程處理的代碼    
 

  1. our@cmd=("./apcon_2052.exp119.11.217.27A15B15",  
  2. "./apcon_2058.exp119.11.217.65adminteamw0rkA05A06",  
  3. "./apcon_2052.exp119.11.217.27B09D09");  
  4. our$zombies=0;  
  5. our$kid_proc_num=0;  
  6.  
  7. $SIG{CHLD}=sub{$zombies++};  
  8.  
  9. for(my$i=0;$i<@cmd;$i++){  
  10. my$pid=fork();  
  11. if(!defined($pid)){exit1;}  
  12. unless($pid){  
  13. system"$cmd[$i]";  
  14. exit0;  
  15. }  
  16. $kid_proc_num++;  
  17. }  
  18.  
  19. while(1){  
  20. if($zombies>0){  
  21. $zombies=0;  
  22. my$collect;  
  23. while(($collect=waitpid(-1,WNOHANG))>0){  
  24. $kid_proc_num--;  
  25. }  
  26. }  
  27. if($kid_proc_num==0){last;}  
  28. else{next;}  
  29. }  
  30.  

 以上的代碼采用多進程方式同時處理了對3個測試設(shè)備的配置操作,然后主進程等待所有配置操作完成,再進行后續(xù)的測試。

另外一種情況較為復(fù)雜,就是經(jīng)常需要針對數(shù)百個主機和存儲進行配置、狀態(tài)查詢等,而且配置結(jié)果和查詢狀態(tài)需要返回主進程處理,然后根據(jù)結(jié)果數(shù)據(jù)再決定如何繼續(xù)。對于這種情況,主進程需要生成數(shù)百個子進程,而且每個子進程都有大量的信息返回給主進程來處理。這樣處理數(shù)百個子進程的生成:由于Perl多進程方式占用系統(tǒng)資源較多,因此設(shè)定一個允許主進程同時運行的最多子進程數(shù)目,然后在有子進程結(jié)束時,主進程再生成新的子進程至所有的子任務(wù)完成。這樣處理主進程和子進程的通信和信息交互:由于測試Perl腳本運行平臺為Linux,它是帶有BSD風(fēng)格的POSIX兼容的系統(tǒng),會提供可靠的信號,所以仍然使用系統(tǒng)提供信號的來獲取子進程結(jié)束的消息;對于子進程的返回信息,采用為每個子進程產(chǎn)生一個臨時文件用于存儲返回的所有信息,最后主進程來處理這些文件從而獲取每個子任務(wù)的結(jié)果信息。如下是為這種情況設(shè)計的多進程處理方式的軟件流圖。

小結(jié)

根據(jù)常見的設(shè)備系統(tǒng)測試自動化平臺的特點和要求,把Perl的多進程技術(shù)應(yīng)用到了測試腳本中,極大地提高了測試效率。

Perl多進程已經(jīng)很長的發(fā)展歷史,而且應(yīng)用廣泛,技術(shù)成熟。多進程在健壯性和容錯性方面表現(xiàn)更好,每個進程都擁有獨立的內(nèi)存空間,并行的幾個進程一般來說不會相互干擾;當(dāng)然,相應(yīng)的,多進程的系統(tǒng)開銷也比較大,而且進程間通信也變得復(fù)雜一些。妥善地處理多進程生成和進程間的通信,會很好地改善自動化測試的運行效率以及穩(wěn)定性。

【編輯推薦】

 

  1. 深入學(xué)習(xí)Perl運算符用法
  2. Perl文件句柄概念詳解
  3. 解析四大Perl操作符用法
  4. 專家推薦 幾款常用Perl開發(fā)工具
  5. 學(xué)習(xí)筆記 Perl數(shù)字與字符串間的自動轉(zhuǎn)換
責(zé)任編輯:佚名 來源: csdn.net
相關(guān)推薦

2010-07-26 10:02:49

Perl多進程

2010-07-14 11:14:48

Perl多進程

2010-07-26 09:53:08

Perl多進程

2012-03-30 15:52:51

ibmdw

2010-07-15 13:13:21

Perl多進程

2010-07-15 12:51:17

Perl多進程

2010-07-26 09:45:09

Perl多進程

2021-06-30 19:48:21

前端自動化測試Vue 應(yīng)用

2010-09-08 15:25:09

自動化測試技術(shù)網(wǎng)站鏈接測試

2021-06-26 07:40:21

前端自動化測試Jest

2011-05-31 17:35:45

測試自動化QTP

2010-12-24 14:46:31

Perl腳本

2023-05-18 14:01:00

前端自動化測試

2011-08-16 15:36:47

iPhone應(yīng)用測試

2011-04-18 12:52:37

自動化測試功能測試軟件測試

2011-06-08 17:15:46

QTP腳本

2010-07-14 11:27:42

Perl多進程

2022-02-17 10:37:16

自動化開發(fā)團隊預(yù)測

2012-02-27 17:34:12

Facebook自動化

2021-09-03 09:56:18

鴻蒙HarmonyOS應(yīng)用
點贊
收藏

51CTO技術(shù)棧公眾號