成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Perl多進程技術在自動化測試腳本中用法指導

開發 架構 自動化
Perl 語言是一種非常強大的腳本語言,一個Perl多進程的系統不會由于其中一個進程的狀態不良而崩潰,每個進程都相對獨立地運作,很少會相互影響。

Perl多進程的用戶接口是 fork() 函數以及對系統 fork 函數封裝的一些 module,本文向大家介紹一下應用Perl多進程技術到自動化測試腳本,首先我們來看一下Perl多進程的概念。

Perl多進程

Perl 語言是一種非常強大的腳本語言,其廣泛應用于系統維護,CGI(Common Gateway Interface)編程,數據庫編程和自動化測試中。
多任務和并發處理一度被看作是判定優異操作系統的一個特性;同樣任何優秀從而流行的編程語言都會有并發的應用,而且都有各自的實現方法。Perl 最開始在并發方面的應用就是Perl多進程。

Perl多進程的用戶接口是 fork() 函數以及對系統 fork 函數封裝的一些 module。我們在使用 Perl 語言編程時,如果一個任務的某一個段可以或者需要并發很多執行,那么我們就會使用 Perl 的Perl多進程編程,例如同時向數據庫遞交多個記錄的查詢,同時完成多個系統信息的收集等等。
Perl 的Perl多進程是這樣實現的:主進程每 fork 一個子進程,會把當前(主進程的)內存空間的所有變量都復制一份傳到新的進程里面,達到數據共享的目的。此外,主進程和子進程可以通過信號、管道等來通信。

在處理并發的方案中,Perl多進程依靠內存空間獨享提供了優秀的容錯性和健壯性。一個Perl多進程的系統不會由于其中一個進程的狀態不良而崩潰,每個進程都相對獨立地運作,很少會相互影響。
內存空間獨享也造就了Perl多進程不可避免的劣勢:資源負荷以及通信復雜,對于 Perl 來說,每個子進程都可以看作主進程的拷貝,這多少有些內存浪費,而且主進程的關鍵變量如果是“淺復制”到子進程的話,將會帶來一些意想不到的錯誤。另外,進程的創建和回收會帶來許多額外的負載,因此應當盡量避免頻繁地創建進程。

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

應用Perl多進程技術到自動化測試腳本

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

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

清單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.  

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

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


圖3.軟件流圖


下面以登錄每個主機檢查運行狀態的例子給出Perl多進程處理數百個子任務的代碼。

清單2.Perl多進程處理數百個子任務    
 

  1. usestrict;  
  2. usewarnings;  
  3. usePOSIX":sys_wait_h";  
  4.  
  5. our@IP=&getAllHostIP();  
  6. our$TOTAL_TASK=@IP;#assumewehave300hosts  
  7. our$MAX_LIVE_PROC=24;#MaximumnumberofsubProcessallowedtoco-exist  
  8. our@result_filename=();  
  9. our$zombies=0;  
  10. $SIG{CHLD}=sub{$zombies++};#handlemessagefromkernel  
  11.  
  12. our$handled_task=1;  
  13. our$cur_live_proc=1;  
  14. my$pid=fork();  
  15. unless($pid){  
  16. my$filename=&getUniqueFilename();  
  17. push@result_filename,$filename;  
  18. system"./checkHost$IP[$handled_task-1]$uid$psw$filename";  
  19. exit0;  
  20. }  
  21.  
  22. while($cur_live_proc>0){  
  23. if($zombies>0){  
  24. $zombies=0;  
  25. my$collect=0;  
  26. while(($collect=waitpid(-1,WNOHANG))>0){  
  27. $cur_live_proc--;  
  28. }  
  29. }  
  30. if(($cur_live_proc<$MAX_LIVE_PROC)and($handled_task<$TOTAL_TASK)){  
  31. $handled_task++;  
  32. $cur_live_proc++;  
  33. my$pid=fork();  
  34. unless($pid){  
  35. my$filename=&getUniqueFilename();  
  36. push@result_filename,$filename;  
  37. system"./checkHost$IP[$handled_task-1]$uid$psw$filename";  
  38. exit0;  
  39. }  
  40. }else{  
  41. next;  
  42. }  
  43. }  
  44.  
  45. &checkResults();  
  46.  

 小結

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

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

【編輯推薦】

  1. 術語匯編 Perl多進程概念詳解
  2. 常用Perl命令行參數應用介紹
  3. 實例解析Perl多進程技術的應用
  4. Perl多進程在自動化測試場景中應用
  5. Perl多進程及其和多線程的關系解析
責任編輯:佚名 來源: ibm.com
相關推薦

2010-07-15 13:21:46

Perl多進程

2010-07-14 11:14:48

Perl多進程

2010-07-26 09:53:08

Perl多進程

2012-03-30 15:52:51

ibmdw

2010-08-10 14:34:37

QTPFlex

2010-08-10 14:25:42

SilkTestFlex

2010-07-15 12:51:17

Perl多進程

2010-07-26 09:45:09

Perl多進程

2010-07-15 13:13:21

Perl多進程

2010-07-23 14:12:14

Perl Hash

2010-07-26 14:45:17

Perl Hash

2010-07-26 15:17:51

Perl解析XML文件

2010-07-20 13:02:08

Perl數組

2024-01-08 13:31:00

Rust自動化測試

2011-05-31 17:35:45

測試自動化QTP

2010-12-24 14:46:31

Perl腳本

2010-07-26 10:09:01

Perl split函

2010-07-26 16:23:23

Perl語言

2010-07-21 10:32:05

Perl函數返回值

2011-04-18 12:52:37

自動化測試功能測試軟件測試
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品久久久久久久久久久久 | 成人午夜免费福利视频 | 欧美日韩在线一区二区 | 国产成人精品久久久 | 欧美白人做受xxxx视频 | 国产婷婷| 中日韩av | jizz亚洲人| 一区二区高清在线观看 | 97超碰人人草 | 国产yw851.c免费观看网站 | 中文字幕国产一区 | 免费的色网站 | 亚洲成人国产综合 | 日本久久久影视 | 亚洲视频免费观看 | 久久久久久国产精品 | 国产精品亚洲综合 | 久久99精品视频 | 一级毛片免费看 | 一级免费视频 | 操操日| 日韩视频一区二区三区 | 亚洲二区视频 | 成人欧美日韩一区二区三区 | 91精品国产91久久久久久最新 | 国产精品毛片在线 | 99久久精品国产麻豆演员表 | 91精品国产乱码久久久久久久久 | 亚洲一区导航 | 午夜免费 | www.yw193.com | 美女视频三区 | 婷婷毛片| 久草网址| 国产黄色一级电影 | 亚洲免费观看视频网站 | 欧美日韩国产一区二区三区 | 都市激情亚洲 | 欧美a级成人淫片免费看 | 国产精品国产精品国产专区不卡 |