• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    面向CLI的自動化測試方法的研究與實現(xiàn)?

    2018-03-20 07:04:43徐彩霞葛華勇侯仰宇
    計算機與數(shù)字工程 2018年2期
    關(guān)鍵詞:測試人員測試用例網(wǎng)絡(luò)設(shè)備

    徐彩霞 葛華勇 侯仰宇

    (東華大學(xué)信息科學(xué)與技術(shù)學(xué)院 上海 201620)

    1 引言

    命令行界面(Command-line Interface,CLI)是管理和配置網(wǎng)絡(luò)設(shè)備的一種接口模式,幾乎所有的網(wǎng)絡(luò)設(shè)備都支持CLI接口模式[1]。由于CLI是通過基礎(chǔ)函數(shù)開發(fā)得到的,其具有功能強大、易使用、擴充方便、資源占用率少等優(yōu)點[2],所以客戶端計算機、路由器和24小時運作的服務(wù)器等設(shè)備通常都采用CLI操作方式進行自動化的系統(tǒng)管理。因此,對客戶端計算機、路由器和服務(wù)器等設(shè)備進行CLI測試必不可少。然而,目前的CLI測試方法大部分都使用手工測試,測試人員需要具備專業(yè)知識,熟悉相關(guān)操作的CLI指令。對于簡單的回歸測試,可以采用錄制生成腳本的方式來提高一定的測試效率,但腳本的維護量大,復(fù)用性低。因此,整個CLI測試過程操作繁瑣,手工輸入易錯,不易排錯,而且要求對測試人員進行專業(yè)培訓(xùn),增加了開發(fā)成本。特別是在回歸測試中,極大地浪費了人力、時間和金錢。

    為了改善CLI的測試現(xiàn)狀,本文運用數(shù)據(jù)驅(qū)動腳本的方式[3],研究并實現(xiàn)了一種基于Python語言的CLI自動化測試方法。該方法包括四部分內(nèi)容:使用python的unittest測試框架完成整體的測試工作;應(yīng)用telnet協(xié)議和Python的telnetlib模塊實現(xiàn)主機的遠程登錄;利用yaml的直觀、與腳本語言的易交互性,將測試用例集合在yaml文件中;在用戶界面輸出測試結(jié)果,并將結(jié)果生成日志報告。使用此方法時,若一些測試用例改變,只需要改變數(shù)據(jù)文件,不需要改變測試腳本,提高了測試腳本的復(fù)用性。而且將測試數(shù)據(jù)整合到數(shù)據(jù)文件中,不需要每次測試都進行指令的手動輸入,避免了手動輸入指令的重復(fù)性、繁瑣性,減少了手動出錯的頻率。同時,將結(jié)果生成日志報告,便于開發(fā)、測試人員的后期檢查和調(diào)試。

    2 CLI自動化測試方法

    本方法使用Python腳本語言,運用數(shù)據(jù)驅(qū)動腳本的測試思想,分離了測試腳本和測試用例,實現(xiàn)了沒有宏命令的腳本語言自動化,是一種黑盒自動化測試方式[4],主要用于CLI模塊的功能驗證。該自動化測試方法如圖1所示。

    圖1 自動化測試方法流程圖

    編譯運行腳本文件時,整個測試過程是通過Python的單元測試框架unittest實現(xiàn)的。該單元測試框架首先初始化測試環(huán)境,然后執(zhí)行測試工作流,最后,對測試結(jié)束后的測試環(huán)境進行清理和還原[5]。其中,執(zhí)行測試工作流的具體順序是:首先通過telnet協(xié)議遠程登錄主機設(shè)備;然后利用具體命令讀取yaml數(shù)據(jù)文件,同時將其中的測試數(shù)據(jù)以參數(shù)的形式傳遞給腳本;腳本在客戶端執(zhí)行接收到的測試數(shù)據(jù),即執(zhí)行CLI指令;最后將執(zhí)行結(jié)果輸出到客戶端界面和日志報告中。

    2.1 unittest測試框架

    基于Java的測試框架JUnit,Python衍生出了自身的單元測試框架unittest。利用unittest,測試人員能夠以更加結(jié)構(gòu)化的方式編寫大型且周詳?shù)臏y試集。

    unittest框架包括:測試用例(TestCase)、測試集合(TestSuite)、測試載入器(TestLoader)、測試運行器(TestRunner)、測試結(jié)果(TestResult)和測試夾具(TestFixture)[6]。它們之間的關(guān)系為:1)測試用例:包括測試前環(huán)境的初始化,執(zhí)行測試的代碼、步驟、預(yù)期結(jié)果等,以及測試后環(huán)境的清理還原;2)測試集合:多個測試用例集合在一起構(gòu)成了測試集合;3)測試載入器:將測試用例加載到測試集合中的模塊;4)測試運行器:用來執(zhí)行測試集合的模塊;5)測試結(jié)果:包括運行的測試用時,測試用例數(shù)目,執(zhí)行成功的用例數(shù)目,執(zhí)行失敗的用例數(shù)目等信息;6)測試夾具:對一個測試用例環(huán)境的初始化和清理,通過覆蓋測試用例的環(huán)境初始化和環(huán)境清理還原的方法來實現(xiàn)。

    2.2 telnet協(xié)議使用方法

    telnet協(xié)議是Internet遠程登錄服務(wù)的標(biāo)準(zhǔn)協(xié)議和主要方式[7]。用戶應(yīng)用telnet命令,使用戶計算機暫時成為遠程主機的仿真終端,之后在仿真終端的telnet程序中輸入命令,這些命令會在主機上運行,與直接在主機的控制臺上輸入的效果一樣。其工作原理如圖2所示。

    圖2 telnet的工作原理圖

    telnet遠程登錄服務(wù)采用的是C/S(客戶/服務(wù)器)模式,用戶直接在客戶端輸入指令,仿真終端會把輸入的指令通過telnet程序傳遞給服務(wù)器等網(wǎng)絡(luò)設(shè)備,這些指令會在網(wǎng)絡(luò)設(shè)備的外殼上運行,指令運行后的輸出信息會通過telnet程序回顯在仿真終端的顯示界面上[8]。通常,客戶端和主機設(shè)備之間的遠程連接信息是通過TCP/IP協(xié)議進行傳輸?shù)?,在客戶端輸入的用戶名、密碼和命令字符等實際上就是向服務(wù)器端發(fā)送一個IP數(shù)據(jù);遠程操作結(jié)束時,斷開telnet連接就是撤銷TCP連接。通過telnet協(xié)議遠程登錄服務(wù)器需要滿足的條件是:本地計算機支持telnet服務(wù)協(xié)議;知道遠程主機的IP地址、登錄標(biāo)識用戶名和密碼。

    2.3 yaml數(shù)據(jù)文件

    yaml(Yet Another Markup Language另一種標(biāo)記語言)是一種直觀的、能夠被電腦識別的數(shù)據(jù)序列化格式,是一種可讀性高、容易和腳本語言交互,用來表達資料序列的編程語言。

    本方法的測試數(shù)據(jù)是以yaml的格式進行保存并供測試腳本調(diào)用和執(zhí)行。常見的數(shù)據(jù)存儲方式有純文本、數(shù)據(jù)庫和 XML 文檔、yaml文件等[9]。對于CLI的測試用例集合,純文本形式可讀性不高;數(shù)據(jù)庫方式浪費資源;XML雖然易于數(shù)據(jù)交換和處理,但其語法比yaml復(fù)雜,解析成本高;yaml方式結(jié)構(gòu)簡單,實現(xiàn)方便,解析成本低,而且特別適合在腳本語語言中使用,因此本方法選擇yaml文件格式存儲CLI測試數(shù)據(jù)。

    3 CLI自動化測試方法的實現(xiàn)

    本文在Python的unittest測試框架上,運用tel?net協(xié)議和數(shù)據(jù)驅(qū)動腳本方式實現(xiàn)了CLI的自動化測試方法。本方法涉及到的unittest、telnetlib、yaml都是Python自帶和支持的標(biāo)準(zhǔn)庫函數(shù)[10],這些標(biāo)準(zhǔn)庫的代碼可用性高、功能強大、速度快,而且使用方便,只需要利用import語句直接導(dǎo)入,然后再根據(jù)各模塊的使用方法分別進行配置調(diào)用即可。

    3.1 unittest的使用

    unittest框架的基本使用方法是:首先是準(zhǔn)備測試用例,然后利用測試載入器將測試用例加載到測試集合中,之后由測試運行器執(zhí)行測試集合,執(zhí)行結(jié)果保存在測試結(jié)果中。應(yīng)用unittest模塊實現(xiàn)CLI單元測試的部分程序代碼如圖3所示。

    圖3 unittest框架部分程序代碼

    本文首先在測試腳本中定義了一個測試用例類CLI_Test,該測試用例類繼承自unittest.Test?Case[11]。在 CLI_Test類中,定義的方法包括:1)定義了setUp()方法,在此方法中寫入了測試執(zhí)行前的準(zhǔn)備工作:初始化測試環(huán)境和創(chuàng)建日志文件;2)定義了tearDown()方法,在此方法中寫入了測試結(jié)束后的環(huán)境還原和日志文件的關(guān)閉;3)定義了測試用例文件test_1_CLI,該文件主要包含了測試的啟動、測試內(nèi)容、測試方法、測試數(shù)據(jù)的執(zhí)行、測試結(jié)果的判定及輸出等。因此,通過對unittest模塊進行正確的參數(shù)設(shè)置和方法定義,實現(xiàn)unittest的正常使用和CLI整體測試框架的搭建。

    3.2 遠程登錄的實現(xiàn)

    對服務(wù)器等網(wǎng)絡(luò)設(shè)備進行CLI功能測試,首先要遠程登錄服務(wù)器等網(wǎng)絡(luò)設(shè)備,本文利用python的telnetlib模塊實現(xiàn)主機設(shè)備的遠程登錄,其代碼如圖4所示。

    圖4 telnet遠程登錄網(wǎng)絡(luò)設(shè)備的代碼

    在已知遠程主機的IP地址、標(biāo)識和口令的情況下,通過telnetlib模塊可以實現(xiàn)主機設(shè)備的遠程登錄。一般情況下,服務(wù)器的23端口主要用于tel?net服務(wù)[12],是 Internet上普遍采用的登錄和仿真程序。因此,首先定義一個遠程連接函數(shù)telnet_con?nect,它包括三個參數(shù):主機host、用戶名username和密碼password;然后,通過設(shè)置tn=telnetlib.Tel?net(host,port=23,timeout=10)來連接主機設(shè)備的telnet服務(wù),其中host可以是被測主機的IP地址或者域名;利用語句tn.write(username+“ ”)實現(xiàn)登錄用戶名的輸入;經(jīng)由語句tn.write(password+“ ”)實現(xiàn)登錄密碼的輸入;憑借語句tn.expect([“system>”])來判斷遠程登錄是否成功;最后,編寫命令執(zhí)行、退出Telnet服務(wù)的相關(guān)代碼。

    3.3 測試數(shù)據(jù)集合的實現(xiàn)

    通過yaml數(shù)據(jù)文件整合所有的測試用例,文件結(jié)構(gòu)可以通過縮進來表示,連續(xù)的項目可以通過減號“-”來表示[13]。部分?jǐn)?shù)據(jù)文件格式如圖5所示。

    圖5 yaml數(shù)據(jù)文件

    整個yaml文件通過縮排方式呈現(xiàn),整體結(jié)構(gòu)簡單,可讀性高。當(dāng)執(zhí)行測試腳本時,將yaml文件中的數(shù)據(jù)以參數(shù)形式載入到測試腳本中,提高了腳本的復(fù)用性。文件中的Case是測試用例的ID號,便于測試結(jié)果的審查定位;Command是測試的CLI指令;Returncode是預(yù)期的測試結(jié)果,用于與實際運行結(jié)果作對比,從而判斷測試是否成功。Case、Command、Returncode構(gòu)成了一個簡單的測試用例,所有的測試用例以同樣的形式進行排列、整合后,就是一個完整的數(shù)據(jù)文件。

    3.4 測試結(jié)果的判定與實現(xiàn)

    網(wǎng)絡(luò)設(shè)備的CLI模塊具備完整的功能集合,支持的功能有:SSH的連接與斷開、命令的運行、運行結(jié)果的反饋等[14]。通常CLI指令運行結(jié)果的反饋情況是:執(zhí)行成功會返回ok,執(zhí)行失敗就會返回相應(yīng)的失敗信息。因此,在yaml文件中設(shè)置Return?code為ok,并將其作為腳本中的expect_returncode,即 在 腳 本 中 定 義 :expect_returncode=str(yaml?file_load[Api][l][‘Returncode’]),將屏幕輸出的實時信息作為腳本中的runtime_returncode,即在腳本中定義:runtime_returncode=output_format(screen_output,CLI_CMD),其中 CLI_CMD=Com?mand,screen_output=tn.read_very_eager(),Com?mand=str(yamlfile_load[Api][j][‘Command’])。若expect_returncode和runtime_returncode相等,則代表該條命令執(zhí)行成功,否則代表執(zhí)行失敗。同時,將測試結(jié)果輸出到終端界面。而且為了便于開發(fā)、測試人員調(diào)試CLI功能程序,將測試結(jié)果輸出打印到日志中,日志文件包含測試用時、測試結(jié)果信息、測試用例總數(shù)、執(zhí)行成功的測試用例數(shù)、執(zhí)行失敗的測試用例數(shù)等。

    4 結(jié)果與分析

    本方法主要根據(jù)returncode判斷用例的測試結(jié)果,若runtime_returncode等于expect_returncode,則該條命令執(zhí)行成功,否則執(zhí)行失敗。然后將測試結(jié)果輸出到用戶界面,并打印到日志中。用戶界面的輸出結(jié)果如圖6所示。

    圖6 用戶界面的輸出結(jié)果

    輸出到用戶界面的信息包括測試用例的基本信息:case ID、Command,Telnet情況,以及預(yù)期結(jié)果和運行結(jié)果。但是,若只將測試結(jié)果輸出到用戶界面是不方便的。因為CLI的測試用例很多,而且自動化測試執(zhí)行的速度很快,用戶界面不適合測試結(jié)果的統(tǒng)計、整理與審查。因此,同時將測試結(jié)果打印到日志中,便于測試結(jié)果的統(tǒng)計、整理與檢查,有利于開發(fā)、測試人員的調(diào)試。該腳本共打印了三個日志文件,包含所有測試用例信息的詳細日志和樣例日志,僅包含測試失敗用例信息的詳細日志,滿足開發(fā)、測試人員后期檢查時的不同需求。所有測試用例的詳細日志如圖7所示。

    圖7 所有測試用例信息的詳細日志

    以包含8個測試用例的yaml文件為例,在所有測試用例的詳細日志中,可以得到的信息有:測試開始時間、測試結(jié)束時間、測試用時、測試用例信息、測試結(jié)果信息、測試成功用例數(shù)、測試失敗用例數(shù)等。當(dāng)后期檢查時,依照日志中的用例ID和Command可以快速定位和獲取測試用例的具體信息;根據(jù)日志中的Runtime Returncode得到命令執(zhí)行的實時輸出信息和測試失敗用例的錯誤原因,能夠及時調(diào)試和改善功能程序的缺陷;憑借日志中的PASSED數(shù)目和FAILED數(shù)目快速統(tǒng)計測試用例的覆蓋率和成功率,從而判斷當(dāng)前build的穩(wěn)定性和有效性;通過日志中的used time可以看出每個測試用例的執(zhí)行時間都控制在10s級別,比起每次手動輸入節(jié)省時間。

    5 結(jié)語

    本文應(yīng)用數(shù)據(jù)驅(qū)動腳本方式,使用Python的單元測試框架研究并實現(xiàn)了一種面向CLI的自動化測試方法。該方法利用telnet協(xié)議實現(xiàn)主機設(shè)備的遠程登錄,并將測試用例從測試腳本中分離出來存放在外部的yaml數(shù)據(jù)文件中,實現(xiàn)了沒有宏命令的腳本語言自動化,提高了腳本的復(fù)用性。而且將測試結(jié)果打印到日志文件中,便于開發(fā)、測試人員進行檢查調(diào)試。與CLI的測試現(xiàn)狀相比,該方法有效地避免了CLI測試工作的繁瑣性、手動易錯性,增強了測試腳本的復(fù)用度,極大地提高了測試效率、測試覆蓋率,明顯地減少了CLI功能的開發(fā)成本。而且選用yaml,提高了數(shù)據(jù)文件的可讀性,應(yīng)用人群更廣;利用Python的強大功能庫進行腳本的編寫,代碼簡潔,開發(fā)簡單。

    該測試方法主要應(yīng)用于CLI的功能測試環(huán)節(jié),下一步可以將源代碼的分析模塊、測試用例的生成模塊也集成到該方法中,并考慮提供一個用戶交互頁面便于測試人員的操作。

    [1]姚林燕.CLI中命令樹的設(shè)計和實現(xiàn)[J].信息通信,2012(1):184-186.

    YAO Linyan.Design and Implementation of Command Tree in CLI[J].Information&Communications,2012(1):184-186.

    [2]李晨.基于CLI的IPRAN網(wǎng)絡(luò)管理系統(tǒng)框架的研究和實現(xiàn)[D].武漢:武漢郵電科學(xué)研究院,2014:9-18.

    LI Chen.Research and Realization of CLI-Based IP RAN NMS Framework[D].Wuhan:Wuhan Research Institute of Posts and Telecommunications,2014:9-18.

    [3]陳琪.自動化測試平臺的設(shè)計與實現(xiàn)[D].西安:西安電子科技大學(xué),2014:5-18.

    CHEN Qi.Design and Implementation of Test Automation Platform[D].Xian:Xidian University,2014:5-18.

    [4]李鑫.基于Python的軟件測試自動化平臺[D].太原:太原科技大學(xué),2014:17-41.

    LI Xin.Software Testing Automation Platform Based on Py?thon[D].Taiyuan:Taiyuan University of Science&Tech?nology,2014:17-41.

    [5]蔣子豪.基于Appium的移動端自動化測試項目的設(shè)計與實現(xiàn)[D].南京:南京大學(xué),2016:43-54.

    JIANG Zihao.The Design and Implementation of Appi?um-based Automated Testing Project on Mobile Platforms[D].Nanjing:Nanjing University,2016:43-54.

    [6]江嶼.基于Junit的接口測試框架的設(shè)計與實現(xiàn)[D].南京:東南大學(xué),2015:6-13.

    JIANG Yu.Design and Realization of the Test Framework of Interface Based on Junit[D].Nanjing:Southeast Univer?sity,2015:6-13.

    [7]周開波,張治兵,倪平,等.網(wǎng)絡(luò)設(shè)備Telnet服務(wù)安全威脅及其防范措施[J].現(xiàn)代電信科技,2016,46(3):11-15.

    ZHOU Kaibo,ZHANG Zhibing,NI Ping,et al.Security threats and counter measures related to Telnet of Network devices[J].Modern Science&Technology of Telecommu?nications,2016,46(3):11-15.

    [8]胡奕,唐莉萍.嵌入式系統(tǒng)上無操作系統(tǒng)Telnet服務(wù)器的實現(xiàn)[J].計算機系統(tǒng)應(yīng)用,2014,23(10):79-84.

    HU Yi,TANG Liping.Implementation of Telnet Server for Non-OS Embedded System[J].Computer System Applica?tion,2014,23(10):79-84.

    [9]崔紅軍,饒若楠,邵培南.一種API自動化測試工具的設(shè)計與實現(xiàn)[J].計算機工程,2007,33(4):270-274.

    CUI Hongjun,RAO Ruonan,SHAO Peinan.Design and Im?plementation of An Automated API Test Tool[J].Comput?er Engineering,2017,33(4):270-274.

    [10]Magnus Lie Hetland.Python基礎(chǔ)教程[M].司維,曾軍崴,譚穎華譯.第2版.北京:人民郵電出版社,2010:277-290.

    Magnus Lie Hetland.Basic Course of Python[M].Si Wei,ZENG Junwei,TAN Yinghua translation.The Second Edition.Beijing:Posts and Telecommunications Press,2010:277-290.

    [11]白凱,崔冬華.基于JUnit自動化單元測試的研究[J].計算機與數(shù)字工程,2010,38(2):52-54.

    BAI Kai,CUI Donghua.Research of Automatic Unit Test Based on Junit[J].Computer&Digital Engineering,2010,38(2):52-54.

    [12]張國防.基于telnet協(xié)議的Linux遠程管理[J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2014(10):53-54.

    ZHANG Guofang.TheremotemanagementofLinux based telent[J].Network Security Technology and Appli?cation,2014(10):53-54.

    [13]M Eriksson,V Hallberg.Comparison between JSON and YAML for data serialization[EB/OL].(2011)[2016].http://www.csc.kth.se/utbildning/kandidatexjobb/datateknik/2011/rapport/eriksson_malin_OCH_hall?berg_victor_K11047.pdf.

    [14]劉益,朱曉民.資源池中CLI模塊化網(wǎng)絡(luò)配置管理設(shè)計方案[J].電信工程技術(shù)與標(biāo)準(zhǔn)化,2016,29(1):44-48.

    LIU Yi,ZHU Xiaomin.Design scheme of network config?uration management of CLI template in resource pool[J].Telecom EngineeringTechnicsand Standardization,2016,29(1):44-48.

    猜你喜歡
    測試人員測試用例網(wǎng)絡(luò)設(shè)備
    移動應(yīng)用眾包測試人員信譽度復(fù)合計算模型研究
    基于SmartUnit的安全通信系統(tǒng)單元測試用例自動生成
    一種基于C# 的網(wǎng)絡(luò)設(shè)備自動化登錄工具的研制
    基于混合遺傳算法的回歸測試用例集最小化研究
    高校分析測試中心測試隊伍建設(shè)方案初探
    山東化工(2018年20期)2018-04-02 16:30:53
    淺析軟件測試中的心理學(xué)應(yīng)用
    數(shù)據(jù)中心唯“快”不破
    基于依賴結(jié)構(gòu)的測試用例優(yōu)先級技術(shù)
    基于列車監(jiān)測網(wǎng)絡(luò)設(shè)備的射頻功放模塊設(shè)計
    基于三層交換技術(shù)架構(gòu)數(shù)字化校園網(wǎng)絡(luò)設(shè)備的配置與管理
    鹤山市| 纳雍县| 中江县| 金华市| 绥芬河市| 彝良县| 济宁市| 柯坪县| 高唐县| 桃江县| 宁津县| 遂溪县| 萍乡市| 临高县| 汕尾市| 惠安县| 抚州市| 揭阳市| 樟树市| 荆州市| 海门市| 铅山县| 新野县| 黑山县| 南汇区| 沈阳市| 洪洞县| 化德县| 辽阳市| 龙南县| 古田县| 石狮市| 汝南县| 竹北市| 子洲县| 隆安县| 阿克| 达日县| 平舆县| 会昌县| 长白|