文婷 何中全
摘? 要: 計(jì)算機(jī)技術(shù)的快速發(fā)展,使軟件在通信、交通、電子以及軍工等各個(gè)領(lǐng)域都發(fā)揮著越來(lái)越重要的作用,軟件測(cè)試作為保障軟件質(zhì)量的重要手段,也引起了各領(lǐng)域廣泛的關(guān)注。本文針對(duì)軍用軟件測(cè)試過(guò)程中的測(cè)試環(huán)境局限性、測(cè)試效率低等問(wèn)題,提出一種基于python的軟件測(cè)試平臺(tái)實(shí)現(xiàn)方法,實(shí)現(xiàn)被測(cè)軟件與外部對(duì)象的網(wǎng)絡(luò)通信模擬、接口數(shù)據(jù)自動(dòng)生成及解析、測(cè)試結(jié)果自動(dòng)判定等功能,能夠降低對(duì)測(cè)試環(huán)境的依懶性,提高測(cè)試效率及充分性,有效保障測(cè)試質(zhì)量。
關(guān)鍵詞: 軟件測(cè)試;python;測(cè)試平臺(tái);網(wǎng)絡(luò)通信
中圖分類(lèi)號(hào): TP3? ? 文獻(xiàn)標(biāo)識(shí)碼: A? ? DOI:10.3969/j.issn.1003-6970.2020.09.042
本文著錄格式:文婷,何中全. 基于python的軟件測(cè)試平臺(tái)研究與應(yīng)用[J]. 軟件,2020,41(09):158161
【Abstract】: With the rapid development of computer technology, software is playing an increasingly important role in various fields such as communications, transportation, electronics, and military industry. Software testing is important to ensure software quality, and it has aroused widespread concern in various fields. In order to solve the problems of the limitation of the test environment and the lower test efficiency in the software testing process, this paper proposes a python-based software testing platform implementation method. It has realized functions such as simulation of network communication between software and external objects, automatic generation and analysis of interface data, and automatic determination of test results. The testing platform based on python can reduce dependence on the test environment, improve test efficiency and adequacy, and ensure test quality.
【Key words】: Software test; Python; Testing platform; Network communication
0? 引言
隨著計(jì)算機(jī)技術(shù)的迅猛發(fā)展,在人們的工作、生活等各個(gè)領(lǐng)域都承載著各種軟件,軟件在人們生活、工作中發(fā)揮著越來(lái)越重要的作用。同樣,在我國(guó)的軍工行業(yè),軟件的規(guī)模以及覆蓋范圍也與日俱增[1]。隨著軟件的廣泛應(yīng)用,軟件質(zhì)量也引起了廣泛的關(guān)注。軟件測(cè)試作為控制軟件質(zhì)量的重要手段,也成為當(dāng)前的研究熱點(diǎn)之一[2-5]。在軍用軟件測(cè)試過(guò)程中,動(dòng)態(tài)測(cè)試通常以人工測(cè)試為主,測(cè)試效率較低[6]。同時(shí)會(huì)受測(cè)試環(huán)境的限制,比如軟件測(cè)試相關(guān)的硬件設(shè)備不齊套、技術(shù)狀態(tài)不穩(wěn)定、異常數(shù)據(jù)產(chǎn)生困難等限制,進(jìn)一步降低軟件測(cè)試效率,甚至影響軟件測(cè)試效果。為解析測(cè)試效率低、測(cè)試環(huán)境限制等問(wèn)題,本文提出一種基于python的軟件測(cè)試平臺(tái)實(shí)現(xiàn)方法,能夠模擬外部對(duì)象與被測(cè)軟件間的網(wǎng)絡(luò)通信,向被測(cè)軟件提供測(cè)試數(shù)據(jù),以支撐對(duì)被測(cè)軟件的功能、性能、接口、強(qiáng)度等類(lèi)型的測(cè)試,有效擺脫測(cè)試環(huán)境的限制。同時(shí)與其他外部通信對(duì)象模擬軟件(如:網(wǎng)絡(luò)調(diào)試工具等)相比[7],本平臺(tái)除了對(duì)外部通信對(duì)象的模擬,還能夠自動(dòng)生成測(cè)試數(shù)據(jù),并支持測(cè)試結(jié)果自動(dòng)判定,能夠有效提高測(cè)試效率,保障測(cè)試質(zhì)量。
1? 基于python的軟件測(cè)試平臺(tái)概述
python是一種面向?qū)ο?、解釋型的腳本語(yǔ)言,同時(shí)也是一種功能強(qiáng)大而完善的通用型語(yǔ)言,其提供了通信、文件操作、文件I/O等許多功能強(qiáng)大的類(lèi)庫(kù),能夠支持測(cè)試平臺(tái)的實(shí)現(xiàn)[8-9]。本文基于python內(nèi)置的socket、struct、csv等模塊,構(gòu)建軟件測(cè)平臺(tái),向用戶提供網(wǎng)絡(luò)通信接口模擬、接口數(shù)據(jù)生成、接口數(shù)據(jù)解析、測(cè)試結(jié)果自動(dòng)判定相關(guān)接口。使用戶能夠擺脫測(cè)試環(huán)境的限制,按照測(cè)試要求,快速模擬外部對(duì)象與被測(cè)軟件的網(wǎng)絡(luò)通信,實(shí)現(xiàn)對(duì)被測(cè)軟件的功能、性能、接口等類(lèi)型的測(cè)試。該平臺(tái)由網(wǎng)絡(luò)通信模塊、接口數(shù)據(jù)生成模塊、接口數(shù)據(jù)解析模塊、測(cè)試結(jié)果自動(dòng)判定模塊四大功能模塊組成,如圖1所示。各模塊主要功能見(jiàn)表1。
2? 基于python的軟件測(cè)試平臺(tái)實(shí)現(xiàn)過(guò)程
2.1? 網(wǎng)絡(luò)通信模塊
TCP/IP協(xié)議是最常見(jiàn)的網(wǎng)絡(luò)通信協(xié)議之一,傳輸控制協(xié)議(TCP)和用戶數(shù)據(jù)報(bào)協(xié)議(UDP)是TCP/IP協(xié)議的核心[10]。python 內(nèi)置socket模塊中提供了大量TCP、UDP通信相關(guān)的函數(shù)接口可實(shí)現(xiàn)TCP、UDP通信[11]。本平臺(tái)基于socket,實(shí)現(xiàn)網(wǎng)絡(luò)通信模塊,向用戶提供TCP、UDP通信功能。
(1)TCP通信接口模擬
考慮到被測(cè)軟件與外部對(duì)象進(jìn)行TCP通信時(shí),可能作為服務(wù)端,也可能作為客戶端,所以本平臺(tái)基于python socket,分別構(gòu)建Tcp_client、Tcp_Server兩個(gè)類(lèi),向用戶提供鏈路初始化、啟動(dòng)鏈路、連接處理、發(fā)送數(shù)據(jù)等接口,實(shí)現(xiàn)被測(cè)軟件與外部對(duì)象的TCP通信模擬。并結(jié)合實(shí)際場(chǎng)景加入異常保護(hù)、線程處理以及接收回調(diào)函數(shù)機(jī)制,以提高程序的穩(wěn)定性,并支持鏈路數(shù)據(jù)同發(fā)同收以及多鏈路收發(fā)等復(fù)雜測(cè)試場(chǎng)景。Tcp_client、Tcp_Server提供的主要接口及描述如下,接口的使用方法如圖2所示。
a)Init:獲取配置的服務(wù)器、客戶端初始化信息,并創(chuàng)建socket;
b)Tcp_Sever_Start:按照初始化中獲取的ip、port綁定socket(bind),設(shè)置socket相關(guān)屬性,并對(duì)服務(wù)器創(chuàng)建失敗等異常進(jìn)行監(jiān)控及處理;
c)Tcp_client_start:連接服務(wù)器,設(shè)置socket相關(guān)屬性;
d)SendData:調(diào)用send函數(shù)進(jìn)行數(shù)據(jù)發(fā)送,并對(duì)發(fā)送異常進(jìn)行檢測(cè)及處理;
e)ReadData:調(diào)用recv函數(shù)進(jìn)行數(shù)據(jù)接收,并對(duì)接收異常進(jìn)行檢測(cè)及處理;
f)Accep:客戶端連接及處理。
(2)UDP通信接口模擬
經(jīng)分析,被測(cè)軟件與外部對(duì)象進(jìn)行UDP通信時(shí),通信方式包括UDP組播以及UDP點(diǎn)對(duì)點(diǎn)通信,本平臺(tái)基于python socket,分別構(gòu)建UDP_MultiCast、UDP_Unicast兩個(gè)類(lèi),向用戶提供鏈路初始化、接收數(shù)據(jù)、發(fā)送數(shù)據(jù)等接口,實(shí)現(xiàn)被測(cè)軟件與外部對(duì)象的UDP通信模擬。同時(shí),與TCP通信類(lèi)似,也加入異常保護(hù)、線程處理以及接收回調(diào)函數(shù)機(jī)制,提高程序的穩(wěn)定性,且適應(yīng)復(fù)雜的測(cè)試場(chǎng)景。UDP_MultiCast、UDP_Unicast提供的主要接口及其描述如下,接口的使用方法與Tcp_client、Tcp_Server類(lèi)似,包含數(shù)據(jù)接收函數(shù)定義、鏈路初始化及啟動(dòng),發(fā)送數(shù)據(jù)等步驟,此處不再贅述。
a)Init:獲取配置的UDP組播、點(diǎn)對(duì)點(diǎn)通信初始化信息,創(chuàng)建并綁定socket;
b)SendData:調(diào)用sendto函數(shù)進(jìn)行數(shù)據(jù)發(fā)送,并對(duì)發(fā)送異常進(jìn)行檢測(cè)及處理;
c)ReadData:調(diào)用recvfrom函數(shù)進(jìn)行數(shù)據(jù)接收,并對(duì)發(fā)送異常進(jìn)行檢測(cè)及處理。
2.2? 接口數(shù)據(jù)生成模塊
為實(shí)現(xiàn)按照用戶定義的數(shù)據(jù)結(jié)構(gòu),快速生成接口數(shù)據(jù),本平臺(tái)基于python內(nèi)置的csv、struct等模塊,實(shí)現(xiàn)數(shù)據(jù)接口文件的讀取及處理,并基于數(shù)據(jù)接口文件中定義的數(shù)據(jù)結(jié)構(gòu)自動(dòng)生成數(shù)據(jù)打包的代碼,用戶以自動(dòng)生成的數(shù)據(jù)打包代碼為模板,可快速生成符合測(cè)試場(chǎng)景的接口數(shù)據(jù)。具體的實(shí)現(xiàn)流程如圖3所示。
2.3? 接口數(shù)據(jù)解析模塊
為實(shí)現(xiàn)按照用戶定義的數(shù)據(jù)結(jié)構(gòu),對(duì)被測(cè)軟件輸出的接口數(shù)據(jù)進(jìn)行解析,本平臺(tái)基于python內(nèi)置的csv、struct模塊,實(shí)現(xiàn)數(shù)據(jù)接口文件的讀取及處理,并按照讀取的數(shù)據(jù)結(jié)構(gòu)完成對(duì)被測(cè)軟件輸出的接口數(shù)據(jù)的解析,具體的實(shí)現(xiàn)流程如圖4所示。
2.4? 測(cè)試結(jié)果自動(dòng)判定模塊
完成接口數(shù)據(jù)解析后,本平臺(tái)可按照人工設(shè)置的判斷準(zhǔn)則,對(duì)接口的數(shù)據(jù)正確性進(jìn)行檢查,并顯示檢查結(jié)果,具體實(shí)現(xiàn)流程如下。
3? 平臺(tái)應(yīng)用及效果
3.1? 被測(cè)軟件概述
選取某軍用設(shè)備系統(tǒng)控制軟件基于本平臺(tái)開(kāi)展配置項(xiàng)測(cè)試,該系統(tǒng)控制軟件主要功能為與各設(shè)備建立通信連接(通信方式包括TCP,UDP通信),向各設(shè)備發(fā)送控制指令,控制各設(shè)備完成自檢、校準(zhǔn)、數(shù)據(jù)處理等各項(xiàng)任務(wù),并實(shí)時(shí)接收設(shè)備工作狀態(tài)、處理結(jié)果等設(shè)備上報(bào)數(shù)據(jù)進(jìn)行展示,其基本信息如表2所示。
基于本平臺(tái)對(duì)被測(cè)軟件開(kāi)展配置項(xiàng)測(cè)試的流程與基于實(shí)裝環(huán)境的測(cè)試流程基本一致,都包含測(cè)試需求分析及策劃、測(cè)試用例設(shè)計(jì)、測(cè)試環(huán)境搭建、測(cè)試用例執(zhí)行及測(cè)試總結(jié)5個(gè)階段,如圖6所示。其中測(cè)試需求分析及策劃、測(cè)試用例設(shè)計(jì)、測(cè)試總結(jié)階段的活動(dòng)二者完全相同,在測(cè)試環(huán)境搭建、測(cè)試用例執(zhí)行階段二者有所不同,具體區(qū)別在于:
a)測(cè)試環(huán)境搭建階段:基于實(shí)裝的測(cè)試需要獲取所有與被測(cè)軟件通信的設(shè)備,而基于本平臺(tái)的測(cè)試則不需要提供任何設(shè)備,但需編寫(xiě)腳本調(diào)用本平臺(tái)提供的接口模擬與被測(cè)軟件通信的外部對(duì)象以及自動(dòng)生成測(cè)試數(shù)據(jù),可大大降低對(duì)測(cè)試環(huán)境依賴性。
b)測(cè)試執(zhí)行階段:基于實(shí)裝的測(cè)試需要人工解析被測(cè)軟件輸出數(shù)據(jù),以及對(duì)測(cè)試結(jié)果進(jìn)行人工判斷,而基于本平臺(tái)的測(cè)試可編寫(xiě)腳本調(diào)用相應(yīng)接口實(shí)現(xiàn)被測(cè)軟件輸出數(shù)據(jù)的自動(dòng)解析及測(cè)試結(jié)果自動(dòng)判定,可提高測(cè)試執(zhí)行效率。
3.3? 測(cè)試結(jié)果及分析
基于本平臺(tái)可支持對(duì)被測(cè)軟件的功能、接口、性能、強(qiáng)度等類(lèi)型的測(cè)試,相比實(shí)裝環(huán)境,基于本平臺(tái)可更加便捷、高效的生成正常、異常、邊界等各類(lèi)測(cè)試數(shù)據(jù),提高測(cè)試效率、充分性及測(cè)試深度,以發(fā)現(xiàn)更多的軟件缺陷。對(duì)基于本平臺(tái)的測(cè)試與同類(lèi)型軟件在實(shí)裝環(huán)境下的測(cè)試結(jié)果數(shù)據(jù)進(jìn)行比較,可發(fā)現(xiàn):
a)測(cè)試用例執(zhí)行方面:基于實(shí)裝的測(cè)試時(shí)會(huì)受限于設(shè)備狀態(tài)(如:設(shè)備無(wú)法產(chǎn)生部分異常數(shù)據(jù)、設(shè)備不齊套),導(dǎo)致部分用例無(wú)法執(zhí)行,用例執(zhí)行無(wú)法達(dá)到100%;而基于本平臺(tái)的測(cè)試可支持用戶按測(cè)試場(chǎng)景構(gòu)造任何測(cè)試數(shù)據(jù),測(cè)試執(zhí)行率可達(dá)到100%;
b)測(cè)試效率方面:基于實(shí)裝的測(cè)試時(shí)會(huì)受限于設(shè)備狀態(tài)(如:設(shè)備狀態(tài)不穩(wěn)定或者出現(xiàn)故障),且測(cè)試數(shù)據(jù)準(zhǔn)備及測(cè)試執(zhí)行以人工操作為主,測(cè)試效率較低;而基于本平臺(tái)的測(cè)試雖然編制測(cè)試腳本會(huì)占用一定時(shí)間,但由于本平臺(tái)提供數(shù)據(jù)打包代碼自動(dòng)生成、測(cè)試結(jié)果自動(dòng)判定等自動(dòng)化手段,其測(cè)試效率也優(yōu)于實(shí)裝測(cè)試(測(cè)試周期縮短約20%);
c)缺陷發(fā)現(xiàn)方面:基于本平臺(tái)的測(cè)試可生成更加豐富的測(cè)試數(shù)據(jù),提高測(cè)試充分性及深度,相比實(shí)裝測(cè)試,能夠發(fā)現(xiàn)更多的軟件問(wèn)題(軟件問(wèn)題增加約為15%)。
4? 結(jié)論與展望
本平臺(tái)基于python內(nèi)置的socket、csv、struct等模塊,實(shí)現(xiàn)網(wǎng)絡(luò)通信接口模擬、接口數(shù)據(jù)自動(dòng)生成、接口數(shù)據(jù)自動(dòng)解析以及測(cè)試結(jié)果自動(dòng)判定功能,能夠有效解決軟件測(cè)試過(guò)程中測(cè)試效率低、測(cè)試環(huán)境限制等問(wèn)題,提高測(cè)試效率及質(zhì)量。但本平臺(tái)也具有一定局限性,如:本平臺(tái)目前僅支持對(duì)TCP、UDP類(lèi)型網(wǎng)絡(luò)通信的模擬,在后續(xù)應(yīng)對(duì)通信類(lèi)型進(jìn)行拓展。同時(shí),本平臺(tái)在測(cè)試結(jié)果自動(dòng)判定方面僅支持對(duì)輸出類(lèi)接口的自動(dòng)判定,自動(dòng)化程度較低,在后續(xù)也可以進(jìn)一步優(yōu)化,提高測(cè)試的自動(dòng)化程度。
參考文獻(xiàn)
[1]劉國(guó)棟, 王艷, 龐瀾, 等. 集成與敏捷開(kāi)發(fā)在軍用光電系統(tǒng)軟件開(kāi)發(fā)中的應(yīng)用[J]. 計(jì)算機(jī)應(yīng)用與軟件, 2020, 37(06): 9-13.
[2]張琪. 大數(shù)據(jù)背景下軟件測(cè)試的挑戰(zhàn)與展望[J]. 軟件, 2018, 39(6): 181-183.
[3]尹榕慧, 馮軼華. 信息軟件自動(dòng)化性能測(cè)試方法關(guān)鍵技術(shù)研究[J]. 電子世界, 2020(12): 208-209.
[4]薛巖, 姜鑫, 陳坤喬. 指揮信息系統(tǒng)軟件測(cè)試研究[J]. 工業(yè)控制計(jì)算機(jī), 2020, 33(06): 25-27.
[5]楊燕, 劉釗, 蔡久濤. 基于探索性測(cè)試的軟件測(cè)試研究與實(shí)踐[J]. 計(jì)算機(jī)應(yīng)用與軟件, 2020, 37(06): 29-33.
[6]許禛, 王勇利. 淺談裝備軟件測(cè)試[J]. 甘肅科技, 2015, 31(14): 11-13.
[7]劉飛. 航空電子系統(tǒng)MIL-STD-1553通信網(wǎng)絡(luò)接口驗(yàn)證測(cè)試[J]. 航空電子技術(shù), 2006(02): 31-37.
[8]Lutz M. Programming Python[M]. 3rd ed. New York, USA:? O'Reilly Press, 2006.
[9]王聰穎. 基于Python的自動(dòng)化測(cè)試框架的分析與設(shè)計(jì)[D]. 北京郵電大學(xué), 2017: 7-8.
[10]楊小凡. TCP/IP相關(guān)協(xié)議及其應(yīng)用[J]. 通訊世界, 2019, 26(01): 27-28.
[11]王麗. 運(yùn)用Python進(jìn)行網(wǎng)絡(luò)編程[J]. 電腦編程技巧與維護(hù), 2010(12): 86-87.