關(guān)于自動化,您了解多少?(信而泰原創(chuàng)文章)
對于網(wǎng)絡設備的測試來說,想必以下情況您也遇到過。
· 公司新版軟件即將發(fā)布,上個版本剛剛測試完的N個測試用例又得再跑一次!
· 公司產(chǎn)品做出廠前測試,同一批次的N個產(chǎn)品,相同的指標來來回回反反復復重復測試!!
· 本想休息時間追個劇,測試任務卻還在忙,來回切屏苦不堪言!!!
好,接下來咱們談談自動化測試。
自動化測試語言發(fā)展
要做自動化測試,最先就得考慮以哪種腳本語言去開發(fā)。像Tcl語言,它是由John Ousterhout創(chuàng)建,最早稱為“工具命令語言(Tool Command Language)”。作為老牌的自動化測試語言,最初就是基于整合測試系統(tǒng)而開發(fā)出來的。Tcl易上手,便于學習,而且功能強大,經(jīng)常被用于快速原型開發(fā)、腳本編程、 GUI和自動化測試等等方面。Tcl是一個解釋型語言,直接對每條語句順序解釋執(zhí)行,面向過程,需要由iTcl(incrTcl)擴展包及8.6版本提供面向?qū)ο笾С郑瑃hread擴展包支持多線程。
還有后來居上的Python語言,也深受大家的追捧。在去年TOIBE發(fā)布的編程語言排行榜上,Python語言已經(jīng)排到第三,僅次于Java和C語言,C++緊隨其后。
Python作為一種解釋型語言,面向過程且面向?qū)ο螅仓С侄嗑€程。大家追捧的原因就是因為Python語言代碼簡潔、語法簡單,同樣的功能,Python的代碼量可能只是其他語言的1/10.。所以Python語言也被廣泛應用于系統(tǒng)編程、人工智能、Web開發(fā)、大數(shù)據(jù)和云計算,當然也是自動化測試的主要腳本語言之一。
除此之外,也有使用Perl、C++、Ruby、Java等作為自動化測試的編程語言。
自動化測試優(yōu)點
自動化測試能夠有效的解決軟件產(chǎn)品反復迭代回歸測試耗時的問題。
· 測試執(zhí)行速度快
· 7*24小時進行回歸測試
傳統(tǒng)測試以手工測試為主,手工測試完全依賴于人的操作與判斷,這給測試帶來了人為風險,具體體現(xiàn)在以下幾點。
在較好的自動化框架下,可以更好的管理測試進度,執(zhí)行完自動化測試腳本后,可以輕松獲取代碼覆蓋率,進而根據(jù)覆蓋情況分析,進行測試用例補充。
作為國內(nèi)專業(yè)的網(wǎng)絡測試設備和解決方案供應商,信而泰推出的新一代軟件測試平臺Renix,可以為您提供完善的自動化測試功能(5大類)。
1、Renix Tcl/Python API:便于編寫腳本,進行自動化測試;
2、智能腳本工具(Smart Script):便于配置測試的命令;
3、GUI To Tcl/Python:便于將圖像界面的操作,保存成可執(zhí)行的測試腳本;
4、XAT自動化測試軟件:便于集中管理測試腳本,連接測試環(huán)境;
5、VIP服務:可以根據(jù)您的需求,定制自動化服務。
友情提示:本文篇幅較長,可能會占用您一會兒時間閱讀,但小編強烈建議您抽時間讀完,因為純屬小編嘔心瀝血之作,專治各種不必要的加班!
一、Renix Tcl/Python API
應用程序接口(API)作為自動化測試的基礎,測試條件的預置、測試步驟的設計與開發(fā)、測試結(jié)果的判斷和輸出,都需要測試儀提供的API來支持。而目前 ,Tcl/Python作為熱門的自動化測試開發(fā)語言,Renix也提供了相應的Tcl/Python API,便于測試人員進行自動化腳本的編寫。
為了更好讓大家了解Renix API的使用,下面以Python API為例,介紹Python語言如何基于Renix平臺進行自動化測試。(如果您對Tcl語言也感興趣,可以聯(lián)系阿信為您排憂解惑)。
l API功能介紹
Renix Python API的功能主要分為五個方面對測試儀進行管理:
1、設備管理。包括升級機箱、配置測試資源(連接/斷開機箱,占用/釋放端口)、配置端口物理屬性(速率、雙工模式、流控)以及管理License等;
2、流量管理。包括配置流量負載、配置流量發(fā)送方式(Continue、Time、Burst)、控制流量啟停等;
3、協(xié)議管理。包括配置接口參數(shù)、配置協(xié)議參數(shù)、控制協(xié)議啟停等
4、捕獲管理。包括配置捕獲端口、配置過濾捕獲條件、配置捕獲空間大小、控制捕獲啟停等;
5、統(tǒng)計管理。包括訂閱統(tǒng)計視圖、查看統(tǒng)計結(jié)果、保存數(shù)據(jù)結(jié)果等。
自動化測試的根本就是通過API去實現(xiàn)對測試儀的控制,API的設計也是采用面向?qū)ο蟮乃枷搿O駵y試儀的管理IP、端口號、槽位號等屬性,有相應的類去實現(xiàn)控制。端口作為測試最基礎的資源,在端口類的基礎上也衍生出各種各樣子類,像建立流量、端口物理屬性配置、報文捕獲等類,兩者之間屬于繼承關(guān)系。另外如開始發(fā)流、停止發(fā)流、建立協(xié)議仿真等行為,Renix API也提供了相應的類對其進行控制。
當進行測試時,我們是按照樹形結(jié)構(gòu)去組織測試配置項。如下圖,當我們需要建立協(xié)議1、流量1和流量2時,我們是需要先定義好端口1這個對象,在端口1的基礎上再去建立協(xié)議1和流量1,需要定義好端口2這個對象,在端口2的基礎上再去建立流量2。
當我們創(chuàng)建了一個對象之后,該對象就繼承了根節(jié)點最基本的四個方法:delete、edit、get、execute,通過這四種方法來對建立的對象進行操作,從而實現(xiàn)對測試配置項的配置和編輯。通過delete,可以刪除測試配置項以及跟其有關(guān)聯(lián)的所有子配置項;通過edit,可以對測試配置項的內(nèi)容進行編輯;通過get,可以獲取到測試配置項的值;通過execute,可以執(zhí)行測試配置項的操作。而且在此基礎上,可以通過set_relatives方發(fā)將對象之間建立關(guān)聯(lián);可以通過get_relatives方法獲取關(guān)聯(lián)的對象;可以通過get_parent方法獲取當前測試配置項的父節(jié)點對象;并且通過get_children方法獲取當前測試配置項的子節(jié)點對象列表。下面就從這幾個方面為大家介紹下API的使用:
可以通過相應的類去創(chuàng)建測試配置項,在創(chuàng)建的同時可以給配置項的字段賦值,而且創(chuàng)建時必須指定upper,upper指向合法的父節(jié)點對象。
如下圖,通過Port這個類去建立port_1這個對象,在建立port_1時,upper指向它的父節(jié)點對象root,同時給Location賦值‘//10.1.5.11/1/1’。這樣port_1這個對象就建立完成了。

對于每個測試配置項對象都有一個delete的方法,可以刪除測試配置項,不過需要注意點就是刪除配置項會導致跟其有關(guān)聯(lián)的所有子配置項都會被刪除。
如下圖,通過port_1.delete()將測試配置項port1刪除,此時如果port_1下面存在子配置項stream_1,那么它也同樣會被刪除。

如果需要對測試配置項進行修改,有兩種方式可以實現(xiàn)。第一種,可以通過測試配置項自帶的edit接口來修改配置項,這種方式可以同時修改多個字段的值,效率較高;第二種,可以通過測試配置項的成員直接修改配置項,這種方式優(yōu)點在于簡單快捷、語法清晰。
如下圖,通過stream_1.edit使能EnableSignature,并將FixedLength的值改為64。通過stream_1.EnableSignature = True使能EnableSignature;通過stream_1.FixedLength = 64將FixedLength的值改為64。


API本地值不會自動跟Renix后臺同步,所以要獲取測試配置的值需要通過get方法來獲取。這樣做的是因為一旦自動同步,API會緩存同步之后的值,而且也會帶來大量不必要的性能消耗。同樣,我們可以獲取測試配置項所有字段的值,也可以指定要獲取的一個或多個字段的值。
如下圖,通過stream_1.get(‘EnableSignature’,’FixedLength’)獲取EnableSignature和FixedLength的值。通過stream_1.get()獲取所有字段EnableSignature、FixedLength和RepeatCount的值。

在API中凡是命名以Command結(jié)尾的都是一個操作,我們可以通過構(gòu)造函數(shù)來創(chuàng)建一個操作,并提供操作的輸入?yún)?shù)。然后可以通過execute方法執(zhí)行一個操作。在操作執(zhí)行之后可能會得到一些輸出參數(shù)。
如下圖,通過CreateResultViewCommand(DataClassName=’StreamStats’)來創(chuàng)建一個創(chuàng)建流量統(tǒng)計視圖的操作,然后通過cmd.execute()執(zhí)行創(chuàng)建統(tǒng)計視圖的操作。統(tǒng)計視圖創(chuàng)建完成之后得到的cmd.ResultViewHandle可以作為輸出參數(shù)賦值給view_handle,然后供其他對象調(diào)用。

說了這么多,我們就來看一個腳本實例測試吧。這個例子是用來測試儀表自環(huán)的兩個端口的性能是否有丟包或者存在亂序包。
腳本設計思路
初始化API—>占用端口—>配置流量—>訂閱統(tǒng)計—>啟動測試—>停止測試—>分析統(tǒng)計—>判斷結(jié)果。
第二步:編寫腳本
導入需要用到的模塊。

創(chuàng)建和占用測試端口Port1、Port2。

配置流量的收發(fā)端口,配置流量的源和目的MAC地址。

創(chuàng)建和訂閱Stream Block的統(tǒng)計


開始測試,發(fā)送所有流量,10s之后,停止測試。

根據(jù)獲取到的統(tǒng)計結(jié)果進行分析,檢查兩條流量收發(fā)的包數(shù)是否相等;檢查兩條流量是否有丟包;檢查兩條流量是否有亂序包



根據(jù)分析的結(jié)果,做出判斷,測試是Pass還是Fail。

第三步:獲取關(guān)聯(lián)對象
如下圖,通過s1.set_relatives(‘RxPort’,Port_1,EnumrelationDirection.TARGET)將RxPort、Port_1、EnumrelationDirection.TARGET這幾個對象關(guān)聯(lián)起來。
通過port_1.get_children()方法獲取當前測試配置項的所有子節(jié)點對象;通過port_1.get_children(relative_name=’StreamTemplate’)獲取port1下類型為StreamTemplate的所有對象
![]()
![]()
![]()
通過Win+R,輸入cmd,打開cmd.exe(Windows系統(tǒng)適用);輸入“cd ‘腳本所在路徑’” ,進入腳本所在目錄;輸入“python ‘腳本名稱’”,回車,執(zhí)行腳本。

如下圖,通過測試結(jié)果可以看到Stream_1發(fā)送了7492964個包,對端也接收到7492964個包,Stream_2發(fā)送了7492960個包,對端也接收到7492960個包,兩條流量的收發(fā)相等;兩條流量的丟包數(shù)都為0;兩條流量傳輸過程中都沒有產(chǎn)生亂序包。最后判斷此次測試結(jié)果:Pass。

智能腳本是無代碼的自動化測試用例編寫和執(zhí)行的解決方案。在一定程度上為代碼小白省時省力,結(jié)構(gòu)清晰明了,使用靈活,用戶可以輕松上手。在上一篇的文章已經(jīng)詳細介紹過了,感興趣的小伙伴可以點擊文章最上方藍色字關(guān)注我們,然后在往期精選中可以找到喔。
三、GUI To Tcl/Python
GUI(Graphical User Interface)就是指圖形用戶界面,又稱圖形用戶接口是指采用圖形方式顯示的計算機操作用戶界面,在這兒特指Renix客戶端界面。GUI To Tcl/Python目的在于將客戶在GUI界面的配置和操作轉(zhuǎn)化為可執(zhí)行的自動化測試腳本。測試的思想在于:客戶在GUI界面連接機箱、占用端口、配置流量、配置負載等操作會保存為.xfcg文件,在Smart Script配置的開始發(fā)送所有流、停止所有流、訂閱端口統(tǒng)計和2544/2889/3918套件測試等操作命令也會保存為.xfcg文件,然后對于這些操作和命令的調(diào)用代碼就通過自動編寫保存為test.py文件,最后當客戶需要進行測試時,直接執(zhí)行test.py文件即可。另外,當你需要修改配置和操作時,可以通過Renix打開.xcfg文件修改配置和操作,然后再使用GUI To Python;或者就在test.py的文件中編寫相應的代碼完成對配置和操作的修改
這樣大大減少了客戶編寫代碼的時間,不僅提高了測試效率,對于代碼不是特別精通的用戶也都可以進行測試。毋庸置疑,這是代碼量最小的自動化測試。
如下圖,先在Renix界面上占用兩個測試端口,每個端口各配置一條流量,幀長128字節(jié),port1負載配置為50%(線速是1000M),port2的負載配置為100%;

然后結(jié)合Smart Script,配置發(fā)送所有流、打流時長10s、停止發(fā)送所有流、等待3s、保存結(jié)果為1.db文件等命令;

最后通過GUI To Python保存為可執(zhí)行的自動化測試腳本。

如下圖,GUI To Python 生成的文件中,用戶在GUI 界面占用的端口、配置的流量和在Smart Script配置的操作均被保存在.xcfg的配置文件,調(diào)用和執(zhí)行配置文件的代碼也被存為test.py。這樣用戶就可以直接通過執(zhí)行test.py來完成自動化測試。

我們運行test.py之后,可以看到,腳本已經(jīng)測試成功,數(shù)據(jù)結(jié)果01.db的文件也已經(jīng)在相應目錄下保存,通過ResultAnalyzer可以打開文件查看結(jié)果


四、XAT自動化測試軟件
XAT(Xinertel Automated Testing)是信而泰推出的自動化測試軟件。該軟件旨在通過簡單、快捷的方式實現(xiàn)對自動化腳本的集中測試和管理。可以通過該軟件進行測試儀表和被測設備的連接,占用測試儀表的端口,將測試端口與測試腳本進行綁定,批量進行腳本測試。軟件界面會有測試結(jié)果的匯總,也會打印測試日志,便于測試失敗時定位問題,更為重要的一點,通過該軟件可以將測試記錄一一保存在Excel文件中,包括之前的占用端口、測試配置、測試日志、測試結(jié)果等信息。節(jié)省了人工記錄的時間,同時減少了人為記錄可能帶來的不必要的誤差。操作方便、使用靈活,測試信息記錄準確,可謂是自動化測試的好幫手。

如下圖,我們先通過XAT配置和占用IP地址為192.168.1.180測試儀的port1~8,然后在左下角的列表框中選中需要進行測試的一個或多個端口,選中192.168.0.180/1/4、192.168.0.180/1/6和192.168.0.180/1/8,鼠標右鍵,通過Combine To Group將選中端口組綁定成一個端口組,點擊后在右下列表“端口組合”出現(xiàn)綁定的端口組


完成配置端口后就可以點擊“設置腳本”來選中需要執(zhí)行的腳本。先打開腳本所在路徑,在“搜索腳本”窗口會出現(xiàn)腳本文件,選中需要測試的腳本文件,鼠標右鍵,通過Add Script將選中的腳本添加到右下角的設置腳本列表;

再次選中測試腳本,鼠標右鍵,通過Bind PortGroup將選中的腳本和“配置端口”設置好的端口組綁定,點擊后,選中腳本和端口組綁定,并在右上角的測試套件中顯示添加的腳本端口組合簡稱為“測試套件;

默認測試套件都是勾選中的,套件左邊顯示綠色勾,如果不需要執(zhí)行該套件可以選中測試腳本之后,鼠標右鍵,通過Unselect執(zhí)行腳本時不執(zhí)行選中測試套件.(選擇Unbind Port Group,會在測試套件列表中刪除選中的測試套件;選擇Select,則執(zhí)行腳本時執(zhí)行選中測試套件);

在工具欄中點擊“
”開啟所有測試執(zhí)行“設置端口”-“測試套件”中選中的測試套件
開始測試后,出現(xiàn) “執(zhí)行端口組(1)” 頁面,如下圖,測試結(jié)果:顯示每個測試腳本執(zhí)行完成之后的結(jié)果信息;測試步驟:實時顯示每個腳本的測試執(zhí)行步驟;下方的“執(zhí)行端口組(1)”:實時顯示執(zhí)行的log日志信息;在狀態(tài)欄顯示總體執(zhí)行的狀況

所有測試執(zhí)行完成之后,工具欄顯示“導出所有測試報告按鈕”, 在導出報告前,可以再菜單欄-測試報告-設置報告導出路徑中設置測試報告導出到執(zhí)行的路徑下,設置好導出目錄后點擊“
”導出所有測試報告按鈕,報告導出完畢之后,查看報告文件。在Log文件夾里有每個腳本測試的詳細log信息,在Report.doc里是word板的測試報告,在TestResult.xlsx則為Excel表格測試報告

如下圖是Excel表格測試報告。

五、VIP服務
這里VIP服務并不是需要大家交200塊錢,辦信而泰會員卡什么的,而是指信而泰可以為你量身定制自動化服務。不管是提供Renix Tcl/Python API、基于API的二次開發(fā)、自動化測試軟件的定制、自動化腳本的開發(fā)、自動化測試服務等,只要您有需要,我們都盡力去實現(xiàn)。
以上就是自動化測試的介紹,最后要說的就是在這個信息化高速發(fā)展的時代,越來越大的數(shù)據(jù)量,越來越高速的帶寬,對網(wǎng)絡設備的要求也是越來越高,我們的步伐只有越來越快,才能跟上時代的發(fā)展。不要再為重復的產(chǎn)品測試感到乏味,不要再為軟件無休止的迭代測試覺得苦惱,不要再為了不會編程而擔心。自動化測試即將成為測試工作里不可缺少的部分。
