-
您的位置:
- 網(wǎng)站首頁
- > 新聞動態(tài)
- > 行業(yè)資訊
您的位置:
近年來隨著各類新技術、新架構、新開發(fā)模式(如DevOps、敏捷開發(fā)、Paas云平臺等)大規(guī)模的研究和應用,測試工作面臨著更高的質量要求和更短的時間挑戰(zhàn)。尤其DevOps要求代碼庫每次更新都需進行測試并保存測試結果。因此,推進自動化測試迫在眉睫。近年來,我行在功能測試自動化方面取得了很大的進展,已經(jīng)從組織級層面完成了功能自動化測試平臺的建設,自動化測試案例的積累和定期回歸。但在性能測試方面,部分任務還依賴于手工開展各項工作。當前業(yè)內關于性能測試自動化的研究較少,僅局限于自動化發(fā)起與執(zhí)行測試腳本。
本文嘗試對性能測試自動化成熟度進行分層定義,用于指導性能測試自動化的實施推進。本文將通過剖析性能測試的各個工作環(huán)節(jié),詳細分析性能測試各環(huán)節(jié)自動化可行性并給出可實踐方案。根據(jù)自動化程度劃分等級,形成一套針對性能測試自動化成熟度的評估模型,用于評估各系統(tǒng)性能測試的自動化程度。最后通過分析我行性能測試自動化的現(xiàn)有實踐,給出未來的發(fā)展方向。
一、工作流程
整個工作流程:需求分析->測試模型設計->性能測試腳本開發(fā)->性能場景配置->測試執(zhí)行與數(shù)據(jù)采集->結果分析與性能優(yōu)化->測試模型優(yōu)化。
1. 需求分析
通過分析系統(tǒng)性能需求,圈定性能測試的范圍,確定系統(tǒng)各項性能指標。如:TPS、并發(fā)數(shù)、資源使用率、響應時間等。
2. 測試模型設計
性能測試模型設計工作包含:設計性能測試用例和設計性能測試場景設計。用例設計主要決定哪些功能參與測試,如何參與;場景設計主要確定如何組織測試用例,如按業(yè)務分布、業(yè)務量、業(yè)務時段、業(yè)務角色來綜合配置并發(fā)用戶數(shù)、執(zhí)行時間、比例等。
3. 性能測試腳本開發(fā)
根據(jù)測試模型,生成性能測試腳本。測試腳本可以通過工具錄制生成,也可通過編碼生成。腳本用于模擬系統(tǒng)功能,是整個性能測試執(zhí)行的基礎。
4. 測試場景配置
根據(jù)所采用的工具,通過設置測試活動,實現(xiàn)測試模型中的場景。
5. 測試執(zhí)行與數(shù)據(jù)采集
執(zhí)行設置好的場景和測試腳本,并在運行過程中采集腳本執(zhí)行結果和資源消耗情況的數(shù)據(jù)。包括:響應時間、吞吐量、TPS、事務成功率、CPU、內存、存儲、網(wǎng)絡、數(shù)據(jù)庫、中間件、緩存、JVM的相關數(shù)據(jù)。
6. 結果分析與性能調優(yōu)
根據(jù)采集的數(shù)據(jù),開展性能分析。本步驟一般需要由團隊完成,需要測試人員、開發(fā)人員、運維人員、數(shù)據(jù)庫管理人員一起協(xié)作完成。對于遇到的問題進行分類,協(xié)助開發(fā)團隊完成問題定位與分析調優(yōu)。
7. 測試模型優(yōu)化
本步驟是可選環(huán)節(jié),本環(huán)節(jié)是根據(jù)最終性能測試的執(zhí)行結果,反向調整測試模型,以便支持性能問題的更好發(fā)現(xiàn)。比如調整測試場景設計及場景中各典型交易的占比。
二、自動化分層
自動化測試是指使用工具或者程序來代替人工完成預先定義的測試活動。性能測試可自動化的環(huán)節(jié)有:需求分析、測試模型設計、性能測試腳本開發(fā)、測試場景配置、測試執(zhí)行和數(shù)據(jù)采集、測試模型優(yōu)化。
參考功能測試自動化實現(xiàn)的層級,性能測試按自動化測試成熟度可以分為五個級別:
無人值守的測試框架
——測試執(zhí)行和數(shù)據(jù)采集的自動化
1.自動化測試的最低級別。
2.人工進行性能需求分析。
3.人工進行模型設計,包括性能用例的編寫和場景設計。
4.性能測試腳本通過人工錄制生成或是由測試人員在項目早期根據(jù)需求完成設計和編寫程序實現(xiàn)。
5.人工進行場景配置。
6.采用CI技術實現(xiàn)自動化測試執(zhí)行和數(shù)據(jù)采集。
7.人工根據(jù)性能測試結果對測試模型進行優(yōu)化。
8.人工進行結果分析和性能調優(yōu)。
級別2
數(shù)據(jù)驅動的測試框架
——測試腳本參數(shù)化
1.人工進行性能需求分析。
2.人工進行模型設計,包括性能用例的編寫和場景設計。
3.性能測試腳本通過人工錄制生成或是由測試人員在項目早期根據(jù)需求完成設計和編寫程序實現(xiàn)。性能測試腳本中的測試數(shù)據(jù)和測試操作分離,輸入數(shù)據(jù)的地方采用參數(shù)代替,將測試輸入數(shù)據(jù)寫入配置文件。測試數(shù)據(jù)變動無需人工重新開發(fā)測試腳本,只需修改配置文件。
4.人工進行性能場景配置。
5.采用CI技術實現(xiàn)自動化測試執(zhí)行和數(shù)據(jù)采集。
6.人工根據(jù)性能測試結果對測試模型進行優(yōu)化。
7.人工進行結果分析和性能調優(yōu)。
級別3
關鍵字驅動的測試框架
——性能測試腳本和場景配置自動化
1.人工進行性能需求分析。
2.人工進行模型設計,包括性能用例的編寫和場景設計。將性能測試用例按照關鍵字進行分解,形成用例數(shù)據(jù)文件。主要關鍵字包括:被操作對象(Item)、操作(Operation)和值(Value)。將場景設計按照關鍵字進行分解,形成場景配置文件。
3.性能測試腳本通過測試框架生成,測試框架可根據(jù)用例數(shù)據(jù)文件生成大量的不同功能的性能測試腳本。
4.測試框架還可根據(jù)場景配置文件完成場景配置。
5.采用CI技術實現(xiàn)自動化測試執(zhí)行和數(shù)據(jù)采集。
6.人工根據(jù)性能測試結果對測試模型進行優(yōu)化。
7.人工進行結果分析和性能調優(yōu)。
級別4
結果驅動的測試框架
——測試模型優(yōu)化的自動優(yōu)化
1.人工進行性能需求分析。
2.人工進行模型設計,包括性能用例的編寫和場景設計。將性能測試用例按照關鍵字進行分解,形成用例數(shù)據(jù)文件。主要關鍵字包括:被操作對象(Item)、操作(Operation)和值(Value)。將場景設計按照關鍵字進行分解,形成場景配置文件。
3.性能測試腳本通過測試框架生成,測試框架可根據(jù)用例數(shù)據(jù)文件生成大量的不同功能的性能測試腳本。
4.測試框架還可根據(jù)場景配置文件完成場景配置。
5.采用CI技術實現(xiàn)自動化測試執(zhí)行和數(shù)據(jù)采集。
6.采用機器學習技術(ML)根據(jù)執(zhí)行的結果反饋,不斷地調整規(guī)則和測試數(shù)據(jù),測試腳本以及測試場景的映射關系,從而使測試結果不斷逼近預期目標。包含了測試數(shù)據(jù)的持續(xù)改進,測試腳本的持續(xù)改進,測試場景的持續(xù)改進。
7.人工進行結果分析和性能調優(yōu)。
級別5
規(guī)則驅動的測試框架
——需求分析和模型設計自動化
1.采用自然語言處理(NLP)技術,分析系統(tǒng)非功能需求,圈定性能測試的范圍,確定系統(tǒng)各項性能指標。
2.人工進行模型設計,包括性能用例的編寫和場景設計。將性能測試用例按照關鍵字進行分解,形成用例數(shù)據(jù)文件。主要關鍵字包括:被操作對象(Item)、操作(Operation)和值(Value)。
3.通過大數(shù)據(jù)挖掘技術分析以往業(yè)務日志,按業(yè)務分布、業(yè)務量、業(yè)務時段、業(yè)務角色來綜合配置并發(fā)用戶數(shù)、執(zhí)行時間等參數(shù)。再將場景設計按照關鍵字進行分解,形成場景配置文件。
4.性能測試腳本通過測試框架生成,測試框架可根據(jù)用例數(shù)據(jù)文件生成大量的不同功能的性能測試腳本。
5.測試框架還可根據(jù)場景配置文件完成場景配置。
6.采用CI技術實現(xiàn)自動化測試執(zhí)行和數(shù)據(jù)采集。
7.采用機器學習技術(ML)根據(jù)執(zhí)行的結果反饋,不斷地調整規(guī)則和測試數(shù)據(jù),測試腳本以及測試場景的映射關系,從而使測試結果不斷逼近預期目標。包含了測試數(shù)據(jù)的持續(xù)改進,測試腳本的持續(xù)改進,測試場景的持續(xù)改進。
8.人工進行結果分析和性能調優(yōu)。
綜上所述,每個層級自動化的測試環(huán)節(jié)大致如下:
三、自動化現(xiàn)有實踐與未來發(fā)展
目前行業(yè)內的性能測試自動化進展:
級別1:
支持CI軟件,即“Jenkins+Ant”或“Jenkins+Maven”實現(xiàn)了測試自動化執(zhí)行和數(shù)據(jù)采集。該方式主要側重自動化測試執(zhí)行和數(shù)據(jù)采集。
級別2:
用“Jenkins+Ant+Jmeter+csv”或“Jenkins+Maven+Jmeter+csv”,即可實現(xiàn)測試腳本參數(shù)化和測試自動化執(zhí)行和數(shù)據(jù)采集。
級別3:
業(yè)內雖無成熟的性能自動化測試框架案例,但經(jīng)過調研可使用“Java+Ant/Maven+Jmeter+csv”實現(xiàn)。原因如下:
(1)Jmeter是業(yè)內成熟的性能框架,支持多種協(xié)議的壓力測試。
(2)Jmeter支持非GUI模式運行,在GUI模式運行下,主要依靠jmx文件中的信息進行相應的壓力測試。jmx文件是xml格式文檔,其中包含測試計劃、線程組(測試場景)、壓力請求(測試腳本)、變量定義(測試數(shù)據(jù)),結果采樣器等信息。
(3)Jmeter是基于Java開發(fā)的壓測工具,可使用Java對其進行二次開發(fā),非常便捷。
(4)Java編碼可實現(xiàn)關鍵字數(shù)據(jù)文件的解析,包括:用例數(shù)據(jù)文件和關鍵字配置文件。并將解析后的信息生成jmx文件,供Jmeter執(zhí)行。
級別4:
機器學習在軟件測試領域的應用,目前已經(jīng)取得了一定的進展。機器學習是一種能夠理解、感知和學習的技術,它可以解決通常需要人類智能和理解的問題。
上圖就是機器學習分支中有監(jiān)督學習的縮略圖。在歷史數(shù)據(jù)上訓練出模型,并發(fā)布一個預測服務。新的數(shù)據(jù)過來后,預測服務可以根據(jù)模型給出預測結果。
將該技術運用到自動化性能測試的優(yōu)化模型上,可分為如下幾步:
(1)在日常手工性能測試中,搜集可根據(jù)性能測試的執(zhí)行結果調整測試模型的數(shù)據(jù)。
(2)對搜集的數(shù)據(jù)進行學習,訓練出可根據(jù)測試結果調整測試模型的模型。
(3)對模型進一步開發(fā),產(chǎn)出一個配置文件生成服務。該服務可以根據(jù)采集的測試結果,舊的場景配置文件以及用例數(shù)據(jù)文件,生成新的場景配置文件和用例數(shù)據(jù)文件,同時新的場景配置文件和用例數(shù)據(jù)文件中的參數(shù)均來自于模型產(chǎn)生的預測數(shù)據(jù)。
級別5:
自然語言處理(NLP)是計算機科學領域以及人工智能領域的一個重要的研究方向,它研究用計算機來處理、理解以及運用人類語言(如中文、英文等)。簡單來說即是計算機接受用戶自然語言形式的輸入,并在內部通過人類所定義的算法進行加工、計算等系列操作,以模擬人類對自然語言的理解,并返回用戶所期待的結果。大致來說NLP主要應用于以下幾個領域:文本檢索、機器翻譯、文本分類/情感分析、信息抽取、序列標注、文本摘要、問答系統(tǒng)、對話系統(tǒng)、知識圖譜以及文本聚類。
NLP在軟件測試中也有些實踐。需求分析的自動化可采用NLP技術分析產(chǎn)品規(guī)格說明書,自動將說明書中的性能需求提煉成性能指標,無須人為干預。
大數(shù)據(jù)挖掘是從大量的、不完全的、有噪聲的、模糊的、隨機的數(shù)據(jù)中提取隱含在其中的,人們事先不知道的但又是潛在有用的信息和知識的過程。
采用大數(shù)據(jù)挖掘技術分析以往業(yè)務日志,找出業(yè)務分布、業(yè)務量、業(yè)務時段、業(yè)務角色對系統(tǒng)性能的影響。根據(jù)挖掘到的信息自動配置性能測試場景,設置測試并發(fā)用戶數(shù)、執(zhí)行時間等參數(shù)。
目前,我行性能測試自動化進展:已在主機的性能測試中完成了級別3的部分自動化實踐(腳本通過數(shù)據(jù)配置自動生成),現(xiàn)有測試框架支持通過配置報文信息和數(shù)據(jù)設置,自動生成BoEing交易測試腳本(LR測試腳本和Jmeter測試腳本也均有實現(xiàn))。
未來隨著測試資產(chǎn)和各項性能測試相關數(shù)據(jù)的積累,可以推動性能需求的自動化分析,測試設計模型的自動生成和優(yōu)化,實現(xiàn)級別4和5的可持續(xù)優(yōu)化改進的自動化測試框架。