摘" 要:性能測試是日常軟件測試過程中不可或缺的一個環(huán)節(jié),文章以實際項目通信運營商的資源管理系統(tǒng)中的家寬業(yè)務開通接口進行性能測試為案例,首先提出接口性能測試的可行性方案,同時借助接口測試工具SoapUI進行壓力測試和用Nmon工具進行服務器資源監(jiān)控,模擬用戶開通家寬業(yè)務的并發(fā)場景。在壓力測試過程中檢測軟件是否存在缺陷,并分析其產(chǎn)生的原因,最終達到預防或解決軟件性能問題的目標。同時,對性能測試的重要性進行分析,為相關(guān)測試人員提供一定的指導與借鑒。
關(guān)鍵詞:家寬業(yè)務開通;SoapUI;性能測試應用;性能測試重要性
中圖分類號:TP311.5" 文獻標識碼:A" 文章編號:2096-4706(2024)23-0005-06
Application and Importance Research on Performance Testing in Business Opening of Operators
DAI Guiqiong
(Shanghai Sincere Technology Co., Ltd., Shanghai" 201203, China)
Abstract: Performance testing is an indispensable part of the daily software testing process. This paper takes the performance testing of the home bandwidth-based business opening interface in the resource management system of an actual project communication operator as a case. Firstly, a workable solution for interface performance testing is proposed. At the same time, the interface testing tool SoapUI is used for stress testing and Nmon tool is used for server resource monitoring to simulate the concurrent scenario of users opening home bandwidth-based business. During the stress testing process, software is tested whether there are defects, and the causes of producing defects are analyzed, ultimately achieving the goal of preventing or solving software performance problems. Meanwhile, analyzing the importance of performance testing provides certain guidance and reference for related testers.
Keywords: home bandwidth-based business opening; SoapUI; performance testing application; importance of performance testing
0" 引" 言
隨著互聯(lián)網(wǎng)和人工智能的快速發(fā)展,軟件產(chǎn)品現(xiàn)在已經(jīng)滲透在各個領(lǐng)域的應用,用戶對軟件產(chǎn)品的質(zhì)量和效率提出了更高的要求[1-4]。除功能測試外,性能測試引起了客戶和軟件從業(yè)人員的重視。功能測試主要根據(jù)用戶的業(yè)務需求,模擬用戶操作來測試功能以確認功能是否能滿足用戶實際的需求。性能測試則是通過特定的方式和手段,借助壓力測試工具對軟件系統(tǒng)按照一定的測試方案進行負載測試,并獲取被測試系統(tǒng)的響應時間、事務運行效率、服務器的資源利用情況等各項性能指標,來評估系統(tǒng)是否滿足用戶性能需求的過程[5-6]。如何對系統(tǒng)進行性能測試,測試哪些功能點,關(guān)心哪些性能指標,已經(jīng)成為軟件企業(yè)中亟待解決的課題。本文以實際項目中的家庭客戶寬帶開通業(yè)務(簡稱家客)進行收單的壓力測試,對測試方案進行了分析,借助SoapUI測試工具模擬各種場景的收單請求,并使用Nmon工具對壓力測試過程中收集系統(tǒng)性能收集,最后根據(jù)測試結(jié)果進行分析,從而對性能測試的重要性進行評價[7-10]。
1" 性能測試方案
1.1" 測試需求
在某省運營商的資源管理系統(tǒng)中,家客工單需要在全省上線使用,預計高峰期1天約5.5萬張工單,需要驗證系統(tǒng)是否可以支持這個數(shù)據(jù)量的壓力以及家客收單的性能。通過前期調(diào)研和準備,決定先在現(xiàn)有的實驗室測試環(huán)境中,運用開源的接口測試工具SoapUI對家客收單接口進行模擬真實使用環(huán)境的壓力負載,并監(jiān)控服務器資源利用率,最終判斷系統(tǒng)是否可以承受大量并發(fā)收單的壓力。生產(chǎn)環(huán)境的配置比實驗室測試環(huán)境更高,如果測試環(huán)境性能達標,生產(chǎn)環(huán)境的性能會更優(yōu)。
1.2" 測試準備
1.2.1" 硬件配置
硬件配置如表1所示。測試所用機器并不是全部為壓力測試服務,受條件所致,數(shù)據(jù)庫服務器和中間件服務器同時跑著多個服務。
1.2.2" 測試工具(SoapUI)
SoapUI的主要特點有:
1)屬于開源工具,功能好用且強大、界面簡單易用。
2)支持功能測試、接口測試、負載測試、回歸測試等多種測試。
3)既支持基于簡單對象訪問協(xié)議(Simple Object Access Protocol, SOAP)的Web服務,還支持REST風格的Web服務。
SoapUI將測試分為三個級別,即TestSuite、TestCase和TestStep:
1)測試集(TestSuite):測試用例的集合,可以在項目中創(chuàng)建任意數(shù)量的測試集,用于支撐大量的測試用例。
2)測試用例(TestCase):測試某個特定功能或接口API,可以組合不同的測試步驟完成該功能測試流程。
3)測試步驟(TestStep):最基礎(chǔ)的單位,適用于控制、執(zhí)行測試步驟,以及驗證被測試服務返回。測試步驟是SoapUI的核心部分,靈活使用測試步驟,不僅可以提高測試的工作效率,還能節(jié)約腳本維護成本。
SoapUI支持使用自定義屬性(Property)在項目中存儲和共享數(shù)據(jù)。Property可以被 Groovy Script腳本、Property Transfer等引用,所有的屬性都被處理為字符串。
SoapUl允許在項目的各個層次中定義屬性,常用的層次包括:Project、TestSuite、TestCase、Property。
Project級別的屬性適用于整個項目,使用語法$。TestSuite級別的屬性適用于整個測試集,使用語法$。TestCase級別的屬性適用于整個測試用例,使用語法$。Property級別的屬性適用于測試步驟,使用語法$(Property 級別的語法有些特別,Properties 是測試步驟的名稱,可以修改)。屬性的變量引用如圖1所示。
要使用SoapUI進行測試,首先要準備好工作空間,用來后續(xù)存放文件。其次,創(chuàng)建項目,項目可以存在多個測試集,而測試集包含多個測試用例,比如不同的接口或API。在測試用例中的測試步驟中,包括如請求、變量設置、數(shù)據(jù)源、Groovy腳本等。最終項目可以導出為xml格式存儲,測試流程如圖2所示。
1.2.3" 監(jiān)控工具(Nmon)
Nmon(Network Monitor)是一個性能監(jiān)視工具。它主要用于在Unix和Linux系統(tǒng)上實時監(jiān)視系統(tǒng)性能和資源利用率。Nmon可以提供有關(guān)CPU使用率、內(nèi)存使用情況、磁盤活動、網(wǎng)絡流量等系統(tǒng)性能指標的詳細信息。
如圖3所示,Nmon以交互式的方式運行,用戶可以通過終端界面顯示實時數(shù)據(jù),同時也支持將數(shù)據(jù)寫入文件中,以供后續(xù)分析。該工具可以協(xié)助系統(tǒng)管理員、性能分析師和其他用戶深入了解系統(tǒng)的運行狀況,從而更好地優(yōu)化和調(diào)整系統(tǒng)性能。
如圖4所示,執(zhí)行收集指令后,查詢后能看到生成的.nmon結(jié)尾的結(jié)果文件,該文件將記錄時間段內(nèi)的系統(tǒng)性能指標,從而可以發(fā)現(xiàn)在壓測過程中,程序?qū)Ψ掌鞯馁Y源占用情況,有沒有引起異常,壓測后指標有沒有下降等。
若要查看和使用所收集到的數(shù)據(jù),就要引入分析工具Nmon Analyser,Nmon Analyser是一個專門用于分析和可視化Nmon監(jiān)控數(shù)據(jù)的工具,提供了一個圖形用戶界面,可以加載Nmon數(shù)據(jù)文件并以圖表和表格的形式顯示性能指標。用戶可以通過直觀的圖形化界面輕松地查看系統(tǒng)的CPU使用率、內(nèi)存使用情況、磁盤I/O、網(wǎng)絡流量等信息,以及在不同時間段內(nèi)這些指標的變化趨勢。Nmon Analyser工具的界面如圖5所示。
點擊Analyze nmon data按鈕后,會彈出一個文件選擇對話框,我們選中之前記錄的Nmon文件即可。如圖6所示,生成數(shù)據(jù)圖表,可以更直觀的查看服務器性能變化。
1.2.4" 測試場景與用例設計
根據(jù)某省家客工單的實際使用的場景,該省下面有11個地市,每個地市有多個營業(yè)廳,營業(yè)廳下面有不同的終端,并且在不同的工作時間段內(nèi)進行不同并發(fā)派單,派單間隔的時長等不同場景,設計如表2所示的測試用例。
2" 性能遇到的問題和解決方法
2.1" 資源爭用問題
在負載測試的過程中,發(fā)現(xiàn)了一個問題:對同一個客戶的開通動作會出現(xiàn)資源繁忙的情況,導致收單失敗。后來通過與用戶、需求、開發(fā)多方溝通發(fā)現(xiàn),在實際使用場景中,同一個客戶不會存在多并發(fā)的情況。通過對工具研究發(fā)現(xiàn),優(yōu)化壓測腳本,在接口發(fā)送請求時,讓客戶對象使用隨機數(shù)生成,如圖7所示,最后順利地解決了這個問題:
Random rand = new Random()
result = \"20240528\" + rand.nextInt(10000) +rand.nextInt(10000)
2.2" 隊列收單和狀態(tài)機改造
在家客業(yè)務上線一段時間之后,發(fā)現(xiàn)工單數(shù)量比之前預計的有增多,之前預計全省1天約有22 000張工單,后來發(fā)展比較快,約1天有50 000張工單。這對當時的軟件架構(gòu)和流程引擎是有一定的沖擊。為了大力支持和保障家客業(yè)務的順利運行,通過開發(fā)的家客接口架構(gòu)調(diào)整,使用隊列收單代替之前的實時收單,使用狀態(tài)機代替流程引擎。隊列收單是通過一個中間表,將第三方系統(tǒng)送過來的接口請求緩存到中間表,并設置最大緩存工單的數(shù)目,如500,然后通過隊列中的線程,設置最大線程數(shù)為10,則有10個線程對中間表的記錄進行收單到系統(tǒng)。通過壓測結(jié)果表明,實時收單與隊列收單的響應時間相比,從秒級上升到毫秒級,收單速度實現(xiàn)了質(zhì)的飛越。
2.3" 回歸壓測發(fā)現(xiàn)的問題
2.3.1" 缺索引導致的壓測變慢
在回歸測試中,發(fā)現(xiàn)響應時間比以往的慢了接近2倍。之前平均時間在0.28 s,最近一次壓測竟然達到0.79 s,速度慢了接近3倍。通過在數(shù)據(jù)庫的報告,發(fā)現(xiàn)壓測過程中有1條查詢SQL有問題,執(zhí)行計劃顯示了這條SQL對家客的E表做了全表掃描。于是馬上通知開發(fā)和數(shù)據(jù)庫管理員,通過壓測提供的日志和數(shù)據(jù)庫報告及SQL語句,開發(fā)調(diào)查最近代碼方面是否做了邏輯改造,數(shù)據(jù)庫管理員查詢SQL語句是否有問題或是否缺少索引等方面展開排查。最后通過各方人員的努力,找到了問題的根源:家客E表的userid字段沒有索引。加上索引之后,重新進行壓力測試,響應時間提升到0.1 s,與以往相比,是平均收單響應最快的一次。在軟件研發(fā)平時的工作中,需要考慮數(shù)據(jù)庫字段索引的問題。
2.3.2" 收單隊列失效
在一次家客壓測回歸測試中,通過以往的壓測經(jīng)驗,發(fā)現(xiàn)了一個非常嚴重的缺陷。因為之前家客的工單通過隊列來收單,單子緩存到一個中間表,然后同過后臺進程并發(fā)處理,但是回歸壓測的時候,發(fā)現(xiàn)速度非常慢,而且中間表的數(shù)據(jù)并沒有生成,根據(jù)之前多次的壓測經(jīng)驗,立即定位到問題為緩存的功能失效了。第一時間與開發(fā)人員溝通,開發(fā)檢查了代碼后,發(fā)現(xiàn)是不小心修改了一處代碼引起,開發(fā)人員提供補丁之后,重新進行壓測,功能正常。如果沒有壓測回歸,單次收單發(fā)現(xiàn)不了該問題,一旦現(xiàn)場上線該版本,后果不堪設想。所以這次的壓測回歸,成功地避免了一次生產(chǎn)上的大事故。
3" 性能測試結(jié)果及分析
3.1" 測試結(jié)果指標解釋
測試結(jié)果指標的詳細說明如表3所示,由于測試工具問題,請求數(shù)不是特別精確,只作參考,具體以接口數(shù)和實際工單數(shù)為準。
3.2" 隊列改造前測試執(zhí)行結(jié)果
通過表4的數(shù)據(jù),可以看出,在隊列改造之前,實際工單數(shù)比接口數(shù)偏低,說明有丟單的情況,需要進行改造。
3.3" 收單隊列測試結(jié)果
如表5所示,系統(tǒng)進行改造后,即家客收單接口改造成通過隊列來收單,性能跟之前相比,有很大的提升,以下是最近一次家客收單壓力測試數(shù)據(jù),結(jié)果表明,沒有丟單情況,響應時間0.1 s,相比之下,性能提示非常明顯。
3.4" 結(jié)果分析
在家客場景1中,10并發(fā),持續(xù)30分鐘,接口數(shù)31 501,工單數(shù)31 501,平均響應時間0.1 s,沒有出現(xiàn)丟單情況。
家客場景1中的服務器資源利用率正常,在壓測結(jié)束后,服務器回落到正常的水平。
中間件服務器的CPU和IO使用情況如圖8所示,數(shù)據(jù)庫服務器的CPU和IO使用情況如圖9所示。
具體而言,從家客場景1可以看出,并發(fā)數(shù)10,持續(xù)30分鐘,沒有出現(xiàn)丟單情況。另外,從服務器資源利用情況可以看出:在前30分鐘的不斷請求中,中間件的CPU使用率相對比較高,IO中間有3次較高;但在場景結(jié)束后,CPU和IO恢復至較低水平。數(shù)據(jù)庫服務的CPU資源利用率在前30分鐘比較高,在工單請求結(jié)束后,利用率下降,由于緩存收單,后續(xù)在后臺還需要處理工單和產(chǎn)品,需要占用一定的資源,在這個區(qū)間,CPU使用相對平穩(wěn)。IO在前30分鐘的請求中比較平穩(wěn),之后恢復到較低水平。該功能點在并發(fā)場景下,不存在性能問題。
4" 結(jié)" 論
本文通過在通信運營商項目中對家客收單的性能測試,得出性能測試和性能回歸在軟件生命周期和質(zhì)量保證中起著重要的作用。隨著移動通信技術(shù)的飛速發(fā)展,通信行業(yè)產(chǎn)品在各個領(lǐng)域中廣泛應用,用戶量的增加,系統(tǒng)承擔的負荷也會隨著增加,系統(tǒng)軟件的質(zhì)量和性能的好壞將嚴重影響企業(yè)的自身利益。因此,在軟件企業(yè)中,特別是業(yè)務量龐大的生產(chǎn)系統(tǒng),性能測試的推廣和優(yōu)化必須重視。
參考文獻:
[1] 馬振蕓.API接口測試方法總結(jié)與綜述 [J].數(shù)字技術(shù)與應用,2024,42(1):10-13.
[2] 高靜.接口管理與自動化測試系統(tǒng)的設計 [J].廣播電視網(wǎng)絡,2024,31(1):85-88.
[3] 王順順.基于Selenium的Web應用系統(tǒng)自動化測試軟件的設計與實現(xiàn) [D].西安:西安石油大學,2023.
[4] 孫立哲.異步接口性能測試方案中關(guān)鍵技術(shù)設計優(yōu)化與實踐 [J].計算機應用與軟件,2023,40(8):13-16+103.
[5] 黃志輝,蔡杰峰,蔡漢釣.接口自動化測試的應用實踐 [J].廣播電視網(wǎng)絡,2023,30(7):103-105.
[6] 高文輝.軟件測試中接口測試概述與實踐 [J].數(shù)字技術(shù)與應用,2020,38(3):112+114.
[7] 代曉倩,高賽軍,張風玲,等.軟件接口測試的典型缺陷分析與測試設計優(yōu)化 [J].工業(yè)控制計算機,2024,37(9):25-27.
[8] 羅作民,朱燕,程明.Web服務測試工具SOAPUI及其分析 [J].計算機應用與軟件,2010,27(5):155-157.
[9] 陳霽.性能測試進階指南 [M].北京:電子工業(yè)出版社,2013.
[10] MYERS G J,BADGETT T,SANDLER C,等.軟件測試的藝術(shù):第3版 [M].張曉明,黃琳,譯.北京:機械工業(yè)出版社,2012.
作者簡介:戴桂瓊(1985—),女,漢族,廣東茂名人,中級工程師,本科,研究方向:計算機科學與技術(shù)。