之STAF的應用總結和分析
序言:我想主要從實際原理和應用上來說說測試框架,這些框架包括:關鍵字測試框架robot,基于各種語言的分布式STAF框架,集成測試框架Fit(husdon),以及elipse TPTPd性能測試框架等。這不是一套工具教程,而是一套應用的簡單思想,個人難免有局限性,見諒。
一、STAF介紹
STAF全名叫Software Testing Automation Framework,即軟件自動化測試框架,我覺得,STAF可以完全稱得為一個測試框架,其基于軟件開發中 “系統+組件”的思想,系統是一個架子,各個組件都可以插入到架子中成為其功能一部分。即,STAF是一個這么一個架子,提供了組件插入的規則,不管你的 組件是用什么語言寫的,只要符合STAF的組件規范,就都能做為STAF的組件服務與其他的組件服務進行通信,即其提供了輕量級分發機制,負責將請求轉發 給服務,從而調用這些服務的功能。
二、staf原理
staf的基本運作原理如下:
1、啟動STAF時,STAF做為系統的一個守護進程開啟,然后同時加載其架構中的服務,這些服務可以是DLL文件、JAR文件。當你設計一個STAF 的外部服務的時候,即繼承STAF提供你的接口,你只需要撰寫一個類實現接口的方法即可。也可以這么理解,STAF就像一個操作系統,而這些服務就像這些操作系統上的應用功能軟件,每個軟件之間可以通過內存或者管道或者網絡通道進行互相通信。所以,你若是設計一個測試框架時,可以參考STAF或者操作系統的這種理念,定義一套規范接口,以便于框架的靈活拓展和實現,而不是將一套框架寫的死死的。
2、STAF在加載服務的時候,為每個服務分配了一個句柄,即STAFHandle,這個句柄即作為服務的唯一標識。類比于操作系統會給每一個進程一個進程ID,你打開系統的任務管理器,能看到很多進程在運作,而你可以通過每個進程的ID對這些進程進行操作。
3、STAF之間服務的交互則可以通過命令行的形式或者向服務的隊列讀寫的形式進行。命令行可以看做為每個服務向外公開的消息接口。
三、staf的應用
staf的缺陷在于掌握困難,你需要很清楚它的機制以及其提供的一些服務的作用后,你才能真正的把他用好
1、分布式多執行端應用:STAF采用P2P架構,即沒有服務器和客戶端之分,任何安裝了STAF的機器之間可以互相通信,可以利用STAF的這種特性實現分布式執行的功能,例如:你有10個測試用例, 一般都會將10個測試儀用例在一臺執行機器上串行運行,腳本少的話當然不會有什么問題,但是當腳本數量龐大到一定程度時,那么你需要一個分配機制,能夠將 這些腳本分配到不同的空閑執行端運行,那么STAF可以幫助你實現這些機制,可以指定一臺STAF機器為腳本任務分配端,然后指定一些STAF機器為執行 端,那么任務分配端收到任務,即一系列測試腳本后,它可以尋找到空閑執行端,應用STAF之間的通信,將這些測試腳本分配下去,在每一臺機器上執行,然后 返回結果。這樣,就可以大大節約一些測試時間了。當然,你也可以自己開發屬于自己的網絡分配系統,可以采用socket機制實現。
2、STAF幾個比較常用的的內外服務:
文件系統服務:即FS服務,你可以采用FS服務進行不同機器之間或者一臺機器上的文件之間的傳遞。例如:一些測試腳本和測試結果、日志等都可以采用這種方式傳遞。
時間驅動服務:即調用此服務來按特定的時間間隔發送STAF命令,從而調用別的STAF功能服務,這其實相當于在自動化測試中,每隔多少時間,進行一次測試,這種概念跟持續集成的按時間間隔進行build有些相似。
事件驅動服務:即由發生的事件來驅動進行通信,從而執行STAF命令,事件是通過隊列形式發送,每個服務都有自己的一個隊列,服務通過接收隊列中的請求從而進行功能操作;這種概念跟持續集成的按事件驅動進行build有些相似。
郵件服務:即發送郵件的服務,當測試完成或者失敗時可以觸發這個服務發送郵件。
日志服務:即可以將一些測試結果或者日志信息按照表格序列的形式存在指定的STAF機器上,然后可以隨時進行讀取。這樣可以當一臺STAF機器的測試執行完畢后,將測試結果存在本機或者專門存放日志的STAF機器上,然后隨時可以讀取顯示。
壓縮服務:調用STAF命令對文件進行壓縮。
名字空間服務:這個服務挺重要的,就是可以將一些數據存在STAF的指定內存中,然后獨特的名字對應著獨特的數據,這個與哈希表有些類似,你可以隨時取得這些數據,這些數據在后臺都是保存在本地XML文件中的。
當然,這些服務只是一些基本服務,為了拓展你自己定制性的測試框架或者平臺,你可以很好的利用這些基本功能。
3、STAX,很多人都不清楚STAX和STAF的關系,其實從本質上而言,STAX和STAF本身沒有太大關系,即STAX只是調用了STAF的內外部服務來構造了一個測試執行引擎。STAX整體機制是:你通過在按照STAX的XML格式定義測試工作流, 可在其中嵌套要執行的測試用例,然后由STAX導入,然后執行STAF命令,調用相關的執行服務執行測試,STAX能夠監測服務的狀態,并且讀取指定機器 的日志服務并顯示。不過我認為:STAX在執行操作上太過于繁瑣,不用也罷。你可以自己設計控制界面,來下發腳本,并且可以讀取日志服務或者可以獲得 STAF的一個句柄,從而可以接收STAF發送過來的回應,將結果和執行狀態顯示在界面上。
4、總而言之,STAF只是一個請求消息的分發機制,而那些基于STAF規則的服務才是實現整個測試的重點。你需要拓建多大的測試框架,那么你就得找到更多的需求,將其轉化為服務,并且定義好他們之間的請求消息,讓它們很好的協同合作。
總結:
1、一個好的測試工具或者框架,簡單的使用并不難,如果真想在自動化測試領域得到進一步的發展,那么學習這些框架的思想,因為這些框架都是前人在實踐基礎上構建出來的,學習其思想,不僅能掌握自動化測試的理念,更能在軟件思想上更進一步。
2、想當時學習STAF框架時,實踐很少,對于自動化測試框架一些認識都限于理論,所以學習了很長時間,但是在一段時間后,再去學習robot框架以及別的框架,都很快的從里到外認識,所以,學習很多工具不如先把一個學通。
版權聲明:本文出自 散步的SUN 的51Testing軟件測試博客:http://www.51testing.com/?382641
原創作品,轉載時請務必以超鏈接形式標明本文原始出處、作者信息和本聲明,否則將追究法律責任。