李丹霞 劉舒婷 董欣



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