李丹霞 劉舒婷 董欣
摘要:系統(tǒng)測試中測試數(shù)據(jù)構(gòu)造階段,人工構(gòu)造尤其是需要批量構(gòu)造時過程往往重復且煩瑣,遇到需要大量測試數(shù)據(jù)時工作量更加巨大,為了提升測試效率,開發(fā)基于Python語言的數(shù)據(jù)定制軟件(Data Customization Software,DCS)。DCS支持不同系統(tǒng)中多種常見類型的數(shù)據(jù)定制自動批量生成,并支持寫入到結(jié)果文件和可視化展示,圖形用戶界面開發(fā)基于wxPython包,界面簡潔友好,使用方法簡單。可應用于不同類型的系統(tǒng)測試,尤其在性能測試參數(shù)化數(shù)據(jù)準備階段,極大地提升了相關(guān)測試人員的數(shù)據(jù)準備工作效率。
關(guān)鍵詞:Python;wxPython;自動批量;數(shù)據(jù)定制
一、引言
移動互聯(lián)網(wǎng)的飛速發(fā)展,促進了各類系統(tǒng)或軟件的廣泛應用,保證系統(tǒng)質(zhì)量顯得尤為重要,系統(tǒng)測試則是質(zhì)量保證的重要手段。由于系統(tǒng)開發(fā)中接口設(shè)計場景化、請求參數(shù)復雜化、服務端數(shù)據(jù)動態(tài)化[1]等趨勢愈發(fā)明顯,針對不同系統(tǒng)或軟件的特點定制相應的數(shù)據(jù)進行測試,是系統(tǒng)測試中必不可少的重要環(huán)節(jié)。系統(tǒng)測試在程序執(zhí)行的方式上可分為人工測試和自動化測試[2],人工測試中手動構(gòu)造測試數(shù)據(jù)過程往往重復煩瑣,遇到需要大量測試數(shù)據(jù)時工作量更加巨大,必然會導致測試效率不高,且存在構(gòu)造有誤影響整個系統(tǒng)測試結(jié)果的風險。自動化測試將以人驅(qū)動的測試行為轉(zhuǎn)化為機器執(zhí)行[3],節(jié)省測試時間和人力成本。若系統(tǒng)測試中數(shù)據(jù)構(gòu)造尤其是需要批量構(gòu)造的手動行為轉(zhuǎn)為數(shù)據(jù)自動構(gòu)造按需生成,將大大提高系統(tǒng)測試效率。
為此,本文設(shè)計開發(fā)了DCS數(shù)據(jù)定制軟件,基于Python語言的DCS支持不同系統(tǒng)中多種常見類型的數(shù)據(jù)定制自動批量生成,并寫入到結(jié)果文件中進行可視化展示,圖形用戶界面開發(fā)基于wxPython包,界面簡潔友好,使用方法簡單。DCS可應用于不同類型的系統(tǒng)測試,尤其是應用于性能測試參數(shù)化數(shù)據(jù)準備階段,極大地方便了相關(guān)測試人員的數(shù)據(jù)準備工作。利用Pyinstaller將程序打包成可執(zhí)行程序,打包后的程序可在32/64位微軟Windows操作系統(tǒng)、大多數(shù)Unix或類Unix系統(tǒng)、蘋果Mac OS X等主流系統(tǒng)上運行[4],即使沒有安裝Python相關(guān)的依賴包或沒有Python環(huán)境也可以運行DCS。
二、數(shù)據(jù)構(gòu)造方式介紹
測試人員在進行系統(tǒng)功能測試時,往往需要針對接口進行單獨測試,每個接口參數(shù)的校驗規(guī)則不盡相同,且不一定有規(guī)律,為覆蓋不同的處理邏輯,需要構(gòu)造不同的測試數(shù)據(jù)。性能測試中,為模擬高并發(fā)及高負載場景,也時常需要構(gòu)造大規(guī)模的參數(shù)化數(shù)據(jù)。目前主要可通過手工或者工具兩種方式來完成測試數(shù)據(jù)的構(gòu)造,以下針對兩種不同的數(shù)據(jù)構(gòu)造方式進行簡要介紹和對比。
(一)手工構(gòu)造方式
對于性能測試中需要批量構(gòu)造的數(shù)據(jù),傳統(tǒng)的手工構(gòu)造方式一般是利用文本工具比如notepad++對數(shù)據(jù)進行復制再修改操作,如果要求每條數(shù)據(jù)都不能重復,簡單的復制操作則達不到測試要求,每條逐個修改還存在易失誤或遺漏的風險,若涉及千萬級別以上的數(shù)據(jù)則涉及龐大冗余的重復工作,更要耗費大量時間和人力成本。
(二)工具構(gòu)造方式
通過梳理主流數(shù)據(jù)類型,歸納系統(tǒng)測試中各項數(shù)據(jù)類型共同點和不同點,基于Python開發(fā)的DCS運行后,輸入需要產(chǎn)生的數(shù)據(jù)相關(guān)配置,DCS可根據(jù)用戶輸入配置信息靈活生成指定數(shù)目和類型的數(shù)據(jù),極大節(jié)省構(gòu)造時間和人力成本,方便測試人員提升系統(tǒng)測試效率。
在性能測試中經(jīng)常會對某個接口的輸入?yún)?shù)進行參數(shù)化處理,并發(fā)和壓力測試等也通常需要一次性輸入大批量的數(shù)據(jù)來驗證預期結(jié)果,如果涉及查重校驗,簡單的數(shù)據(jù)復制不能滿足性能測試的要求,此時通過DCS定制并一鍵生成性能測試所需的大批量不重復數(shù)據(jù),即可滿足查重校驗和數(shù)據(jù)快速生成的雙項要求,令性能測試的參數(shù)化準備工作事半功倍。
三、軟件代碼結(jié)構(gòu)及打包流程
DCS采用開發(fā)語言基于Python,適用性高,可跨平臺使用和部署。DCS的圖形用戶界面(GUI)開發(fā)基于wxPython,wxPython作為優(yōu)秀的跨平臺GUI庫wxWidgets的Python封裝和Python模塊的方式提供給開發(fā)者[5],支持大多數(shù)操作系統(tǒng),具有較高的適配性和可移植性。本文使用Python3.8版本在Eclipse中編寫程序,代碼目錄結(jié)構(gòu)如圖1所示。
圖1? ? 代碼目錄結(jié)構(gòu)圖
DCS.py是可視化圖形界面具體代碼實現(xiàn),Pro_Random.py是具體后臺處理邏輯功能實現(xiàn),result目錄存放每次生成指定數(shù)據(jù)的結(jié)果文件,按不同數(shù)據(jù)類型進行編號和時間組合命名,整體功能架構(gòu)圖如圖2所示。
圖2? ? 整體功能架構(gòu)圖
DCS開發(fā)及打包主要步驟如下:
1.安裝開發(fā)DCS主要用到的包,對應功能在表1中列出。
2.軟件開發(fā),設(shè)計DCS可視化界面各種控件,涉及單選框、文本框、按鈕等控件,設(shè)置按鈕響應事件,實現(xiàn)各類型數(shù)據(jù)靈活定制生成等具體功能。
3.軟件打包,使用Pyinstaller相關(guān)命令將程序打包成可執(zhí)行程序,打包后生成的DCS.exe文件可在無Python環(huán)境運行。
四、軟件實現(xiàn)與應用
(一)軟件實現(xiàn)流程
在系統(tǒng)測試中經(jīng)常涉及大小寫字母、特殊字符、數(shù)字、標點符號、手機號、郵箱等類型的數(shù)據(jù),上面提到這些數(shù)據(jù)類型根據(jù)有無規(guī)律可歸類為隨機數(shù)、有序數(shù)兩大類。大多數(shù)情況下有序數(shù)是數(shù)字加一遞增的,大小寫字母、特殊字符、數(shù)字和標點符號等可歸類為隨機數(shù),可定長或非定長,手機號根據(jù)中國手機號碼格式固定為十一位數(shù)字,郵箱的后綴也不盡相同,可以設(shè)置不同的后綴范圍。對于有序數(shù)主要針對需要遞增的序列數(shù)生成,本質(zhì)也是字符串,可以是字符和數(shù)字的組合,也可以是純數(shù)字,有序數(shù)根據(jù)用戶配置有序數(shù)開頭生成以配置字符串開頭的用數(shù)字0補齊的遞增序列數(shù),長度和開頭均可配置,實現(xiàn)純數(shù)字或字符與數(shù)字的靈活組合。每種數(shù)據(jù)對應的配置項如圖3所示。
DCS數(shù)據(jù)定制軟件主要功能模塊包含:讀取配置信息、字符串格式隨機數(shù)構(gòu)造、郵箱格式隨機數(shù)構(gòu)造、手機號格式隨機數(shù)構(gòu)造、字符串有序數(shù)構(gòu)造、生成指定格式數(shù)據(jù)結(jié)果文件,針對不同規(guī)范要求各類數(shù)據(jù)規(guī)則,保留擴展接口,支持獨立開發(fā)新的數(shù)據(jù)格式,實現(xiàn)功能快速擴展,滿足不同業(yè)務系統(tǒng)或軟件的多種類型的測試數(shù)據(jù)構(gòu)造需求。DCS實現(xiàn)的處理流程如圖4所示。
1.選擇隨機數(shù)再選擇字符類型時,用戶只需編輯隨機數(shù)位數(shù)范圍和字符范圍兩項配置,隨機位數(shù)范圍默認是全閉區(qū)間,表示非定長隨機數(shù),用戶只需填寫區(qū)間最小值和最大值,用逗號隔開即可,也可以是定長,當該配置項只填單獨一位數(shù)字表示生成隨機數(shù)長度為填寫數(shù)字的定長。字符范圍默認是數(shù)字0至9和英文字母大小寫的集合,用戶可以根據(jù)實際測試需要隨意修改范圍適配。
2.選擇隨機數(shù)再選擇郵箱類型時,郵箱格式@符號前面的字符對應在字符范圍配置項編輯,郵箱類型不包括后綴的長度,長度和字符類型一樣在位數(shù)范圍配置項編輯,郵箱后綴范圍填寫實際需要的郵箱后綴,多個郵箱后綴之間用逗號分隔。
3.選擇隨機數(shù)再選擇手機類型時,默認為11位數(shù)字,位數(shù)范圍配置對該類型數(shù)據(jù)無效,用戶可以指定手機號碼開頭,號碼開頭不限位數(shù),多個號碼開頭之間用逗號分隔,手機號碼開頭后面的數(shù)字為隨機數(shù)字生成,位數(shù)為11減去號碼開頭的位數(shù)。
4.選擇有序數(shù)時,編輯有序數(shù)開頭和有序數(shù)字長度,有序數(shù)開頭不限位數(shù),可以是任意字符和數(shù)字的自由組合,有序數(shù)字長度包含有序數(shù)開頭的位數(shù),生成的有序數(shù)加1遞增,不足位數(shù)的用0自動補齊。
(二)可視化界面設(shè)計
為了達到更好的用戶交互體驗,設(shè)計了可視化圖形用戶界面[6],為用戶提供數(shù)據(jù)定制配置窗口,用戶只需根據(jù)提示填好需要生成的數(shù)據(jù)類型,即可一鍵生成所需數(shù)據(jù),操作方便快捷。
運行打包后的可執(zhí)行程序DCS.exe,軟件主界面設(shè)計如圖5所示。
DCS主界面總體結(jié)構(gòu)分為左右兩個面板,左面板主要放置各項數(shù)據(jù)配置對應控件,提供給用戶靈活配置,實現(xiàn)個性化定制數(shù)據(jù)。右面板主要是展示生成數(shù)據(jù)結(jié)果,默認不可編輯,可以復制,主要作為結(jié)果直觀展示,同時把生成的數(shù)據(jù)寫入到結(jié)果文件方便測試人員后續(xù)根據(jù)需要靈活處理使用。
DCS初始界面默認選擇隨機數(shù),用戶可自由切換數(shù)據(jù)類型。個數(shù)是指生成定制數(shù)據(jù)的總量,默認100,用戶可以根據(jù)實際需要的數(shù)量大小靈活調(diào)整。
選擇隨機數(shù)時,有序數(shù)相關(guān)的有序數(shù)開頭和有序數(shù)長度置灰,不可編輯。選擇有序數(shù)時,只有個數(shù)、有序數(shù)開頭和有序數(shù)長度可編輯,其他配置項置灰,不可編輯。根據(jù)用戶選擇動態(tài)變化界面需要編輯的配置項,防止用戶誤會,從根源上減少操作冗余。例如選擇隨機數(shù)字符類型數(shù)據(jù)生成時,軟件執(zhí)行結(jié)果界面如圖6所示,可視化定制數(shù)據(jù)結(jié)果的同時會在指定result目錄下生成相同定制內(nèi)容的結(jié)果文件,方便測試人員直接使用或進行個性化二次處理。
(三)軟件在性能測試中的應用
1.有序數(shù)構(gòu)造的應用
在進行虛擬運營商計費系統(tǒng)的性能測試時,需要構(gòu)造大批量話單對計費系統(tǒng)進行并發(fā)測試和壓力測試[7],計費話單每條記錄均有查重校驗,如果每條記錄相同,則不能準確地測試系統(tǒng)的正向計費能力,因此需要對每條話單進行個性處理。
進行計費系統(tǒng)并發(fā)測試時,根據(jù)計費系統(tǒng)不同類型的話單規(guī)范,話單的最后一個字段為查重字段,并且可以是數(shù)字格式,保證最后一個字段不同即可。應用DCS可以快速構(gòu)造符合要求的話單,為了便于測試,將每條話單記錄該字段取值設(shè)置為遞增有序數(shù),每個有序數(shù)與行號一一對應,方便測試人員性能測試后對結(jié)果進行查看和問題定位。比如對于國際流量話單構(gòu)造的配置項如圖7所示,只需輸入單條話單長度和最后一個字段之前的數(shù)據(jù),即可自動批量生成指定條數(shù)10000條記錄的話單,數(shù)據(jù)定制生成結(jié)果在右面板以文本可視化展示,同時在結(jié)果目錄生成按時間戳命名的結(jié)果文件,文件內(nèi)容和可視化界面展示的定制內(nèi)容一致。
進行計費系統(tǒng)壓力測試時,根據(jù)需求文檔得知,為了保證話單文件能被正常的接收處理,要求單個文件大小不能超過200M(200 x 1024 x 1024 bytes),否則文件無法處理。所以需要構(gòu)造一個200M的話單文件驗證系統(tǒng)處理能力,按照一條記錄133字節(jié)計算,向上取整,200M的話單需要構(gòu)造1576807條記錄,對于百萬級別的話單記錄,每條話單對應的號碼需要在計費系統(tǒng)中有對應用戶資料,根據(jù)客戶敏感數(shù)據(jù)保護要求,不能在測試環(huán)境直接使用現(xiàn)有生產(chǎn)系統(tǒng)的真實話單,此時人工構(gòu)造可行性極低并且會耗費大量時間和人力成本?;诖耍瑧肈CS可以一鍵生成滿足壓力測試要求的話單,自動化批量快速構(gòu)造話單極大地提高了性能測試效率。
2.隨機數(shù)構(gòu)造的應用
開展區(qū)塊鏈業(yè)務數(shù)據(jù)加解密[8]的不同加解密算法的性能測試中,需要對ECC、AES+ECC兩種加密方式進行性能摸底,分別制定三種業(yè)務場景模擬生產(chǎn)業(yè)務交易,對加解密SDK分別做基線測試[9]、負載測試、并發(fā)測試。基于這三種類型的性能測試,均需要構(gòu)造滿足不同要求的待加密數(shù)據(jù)。
在進行基線測試時,經(jīng)過前期需求調(diào)研,加密數(shù)據(jù)方式分為兩種,單個請求多個字段的加密(所有字段的總大小不超過2KB)、文件加密(一個文件中包含多條記錄,一般不超過20K,預估不超過1MB級別),分析設(shè)計三個基線場景(單字段加解密、普通文件加解密、超大文件加解密),對于單字段加解密,最大不超過2KB,此場景可通過512B、1KB、2KB的字段加解密處理時間體現(xiàn)性能;對于普通文件加解密,則是10KB、20KB、30KB;對于超大文件加解密則是512KB、1MB。不同系統(tǒng)待加密數(shù)據(jù)字段要求不同,待測的加解密算法不會對字段做校驗,性能測試時需要對待加密的數(shù)據(jù)做參數(shù)化處理,采用構(gòu)造不同大小的字符串類型的隨機數(shù)即可滿足基線測試需求,應用DCS分別構(gòu)造512B、1KB、2KB、10KB、20KB、30KB、512KB、1MB不同大小的數(shù)據(jù)。
例如構(gòu)造1MB的隨機數(shù),配置項設(shè)置如圖8所示,1MB對應1048576字節(jié)長度的數(shù)據(jù),一個字符等于一個字節(jié),字符范圍可以不修改,保持默認的數(shù)字和大小寫英文字母的范圍,其他手機號開頭或郵箱后綴不涉及,維持默認值即可,無需修改,對生成結(jié)果無影響,其他數(shù)據(jù)大小的隨機數(shù)只需修改長度即可構(gòu)造滿足數(shù)據(jù)大小要求的數(shù)據(jù)。
在進行負載測試和并發(fā)測試時,需要驗證5分鐘是否能達到預計的12.5萬筆加解密或僅加密操作,還需驗證以一定的梯度遞增并發(fā)數(shù),獲取到不同加解密算法加解密或僅加密的性能指標。以上性能測試均需要大批量構(gòu)造測試數(shù)據(jù),需要達到10萬級別以上的數(shù)據(jù),應用DCS快速批量定制待加密的測試數(shù)據(jù),構(gòu)造方式簡單快捷,滿足不同并發(fā)量和負載量的批量定制,自動化一鍵生成測試數(shù)據(jù)和文件,有力支撐大數(shù)據(jù)量的負載測試和并發(fā)測試,經(jīng)過驗證DCS運行結(jié)果滿足性能測試需求。
基于ECC或AES+ECC兩種加密方式的并發(fā)測試中,一開始以1千的遞增并發(fā)量構(gòu)造生成測試數(shù)據(jù),通過監(jiān)控系統(tǒng)資源使用情況發(fā)現(xiàn)未達到瓶頸,逐步加大至1萬的遞增并發(fā)量,探測性能曲線,此時系統(tǒng)資源仍未消耗過多,將遞增并發(fā)量設(shè)置到10萬,在此次性能并發(fā)測試中,最大驗證到30萬的并發(fā)量,滿足不同并發(fā)量測試要求。DCS支持各個數(shù)量級的數(shù)據(jù)定制自動化批量生成,為性能測試參數(shù)化數(shù)據(jù)準備提供了有效的強力支撐。
五、結(jié)束語
本文基于wxPython工具包,使用Python語言開發(fā)的輕量級數(shù)據(jù)定制生成軟件DCS,能夠方便快捷地實現(xiàn)系統(tǒng)主流類型數(shù)據(jù)的靈活配置和一鍵生成,有序數(shù)和隨機數(shù)構(gòu)造功能在計費系統(tǒng)和區(qū)塊鏈系統(tǒng)性能測試中得到了廣泛的應用,大大提升了性能測試效率。并且該軟件在接口測試、自動化測試等不同類型的測試中也具有較高的普適性。同時,DCS被打包成通用的可執(zhí)行程序,降低了對環(huán)境和庫包的依賴,可以快速實現(xiàn)跨平臺遷移和部署,能夠為測試人員在系統(tǒng)測試的數(shù)據(jù)構(gòu)造環(huán)節(jié)提供極大的便利。
參? 考? 文? 獻
[1]劉國慶,汪興軒.基于Charles錄制會話的HTTP接口自動化測試框架設(shè)計與實現(xiàn)[J].計算機應用與軟件,2019,36(6):8.
[2]路曉麗,葛瑋,龔曉慶,等.軟件測試技術(shù)[M].北京:機械工業(yè)出版社,2009:112-113.
[3]王大偉.基于Python的Web API自動化測試方法研究[J].電子科學技術(shù),2015,2(5):573-581.
[4]吳春波,陳偉,趙振華,等.基于PyQt的SHPB試驗數(shù)據(jù)處理程序開發(fā)[J].計算機應用與軟件,2021,38(12):12.
[5]賀平.軟件測試教程[M].3版.北京:電子工業(yè)出版社,2014:63-65.
[6]劉衛(wèi)國.Python語言程序設(shè)計[M].北京:電子工業(yè)出版社,2016:45-53.
[7]張永清.軟件性能測試、分析與調(diào)優(yōu)實踐之路[M].北京:清華大學出版社,2020:54-63.
[8]李悅,李瑋,曹艷琴,等.幾種輕量級分組密碼算法的性能分析[J].計算機應用與軟件,2016,33(10):320.
[9]胡通.大話性能測試JMeter實戰(zhàn)[M].北京:人民郵電出版社,2021:124-127.
作者單位:李丹霞? ? 劉舒婷? ? 董欣? ? 中移信息技術(shù)有限公司
李丹霞(1986-),女,漢族,河南周口,碩士,軟件測試工程師,研究方向:區(qū)塊鏈技術(shù)、自動化測試技術(shù)等;
劉舒婷(1993-),女,漢族,廣東興寧,學士,軟件測試工程師,研究方向:測試開發(fā)技術(shù)、自動化測試技術(shù)等;
董欣(1981-),女,漢族,山西平遙,碩士,中級工程師,研究方向:移動通信,軟件測試,項目管理等。