顏碩彥 晉文明 李昌建



摘? 要:為保障線上軟件系統服務質量的可靠性,有必要對其進行有效的負載測試。隨著云計算技術的發展,基于云端資源發起的負載測試可以方便大規模客戶端負載的生成,且容易實施。然而,目前研究缺少相關實現參考,導致這樣的云測試系統難以構建。文章提出了一套基于OpenStack的云負載測試平臺實現方案,介紹了基于彈性伸縮集群的云負載測試技術,為實現基于云的負載測試系統提供了實現參考。
關鍵詞:負載測試;云測試系統;OpenStack;彈性伸縮;測試集群
中圖分類號:TP311? ? ? 文獻標識碼:A 文章編號:2096-4706(2020)02-0098-04
Abstract:For online software systems,it is often necessary to conduct load testing to ensure the reliability of their services. With the development of cloud computing technology,launching load testing based on cloud resources can facilitate large-scale client-side load generation,and testing is easy conduct. However,existing research lack of relevant implementation reference,which results in these cloud testing systems are difficult to build. This paper proposes a set of cloud load testing platform implementation scheme based on OpenStack,introduces the cloud load testing technology based on elastic scaling cluster,and provides a reference for realizing the cloud-based load testing system.
Keywords:load testing;cloud testing system;OpenStack;elastic scaling;test cluster
0? 引? 言
負載測試作為軟件測試的一種,是為了檢測系統在負載方面的相關問題從而對系統進行評估的過程[1],是保障大型線上軟件系統服務質量可靠性的有效手段[2]。隨著云計算技術的發展,一些測試人員把負載測試遷移到云上[3],依托于云端資源發起負載測試可以方便大規模客戶端負載的生成,同時降低負載測試的實施難度。文獻[4]設計了一種準入控制和任務調度算法,實現云性能測試服務平臺資源的共享管理和動態分配。文獻[5]為保證分布式系統測試的可靠性,提出了云測試環境D-Cloud,實現自動化系統配置和測試流程。文獻[6]提出了一個用于Web服務的負載測試平臺,使得負載測試過程盡可能接近實際運行場景。文獻[7]提出的云測試平臺能夠實現按需分配硬件資源,無需重新配置測試環境。
現有研究主要關注云測試系統的任務調度、測試自動化、負載測試真實性等方面,對系統實現層面的研究較少,導致云測試系統的構建缺乏實現參考。鑒于此,基于校內的“基于云計算服務設施測試系統”項目的研究成果,本文提出了一套基于OpenStack的云負載測試平臺實現方案,介紹了基于彈性伸縮集群的云負載測試技術,依托于測試云中彈性伸縮的測試集群來發起負載測試,保證用于發起客戶端負載的云測試主機數量總是彈性地根據實際測試需求動態分配,避免了測試資源的浪費。本文為構建經濟高效的云負載測試系統提供了一套實現參考。
1? 云負載測試平臺體系結構
本文提出了一個面向云環境的云負載測試平臺體系結構,平臺按照CloudTest、TestAgent、WebAPP、VM Monitor等幾大物理模塊進行組織,其總體物理結構如圖1所示。
CloudTest為測試控制中心,控制整個測試的執行流程,并提供各類測試活動的管理功能。TestAgent為測試執行程序,是發起客戶端負載、具體實施負載測試的主要模塊。WebAPP為待測目標應用,用于模擬負載測試的服務器。VM Monitor為監控程序,用于監控云虛擬主機的資源使用。Dashboard為前端程序,它是一個基于ExtJS框架編寫的Web頁面,提供用戶與平臺交互的視圖。
本文將測試云部署在以OpenStack[8]為代表的底層云計算IaaS(基礎服務設施)上,通過在云虛擬主機上運行TestAgent測試執行程序,在IaaS云上構建一個PaaS(平臺即服務)層,對外提供統一的測試服務TaaS(測試即服務)層。相關結構的示意圖如圖2所示,底層通過OpenStack等軟件棧搭建一個包含物理主機和虛擬主機的IaaS云環境。測試系統在虛擬主機上安裝TestAgent測試執行程序來發起測試,并通過一個TestManager調度各個TestAgent和向IaaS云發送控制命令,構建一個專用于測試的服務層。TestAgent可完成虛擬用戶模擬、客戶端性能數據采集等工作。上層云測試平臺只需與TestAgent和IaaS控制中心溝通,而無需直接面對物理設備。對最終用戶而言,只需訪問測試云的管理中心TestManager即可完成所有測試工作,而無需處理復雜的底層操作細節。
OpenStack是一個開源的云計算管理平臺項目,提供了一套IaaS解決方案,通過計算組件(Nova)、對象存儲組件(Swift)、身份服務(Keystone)組件和鏡像服務組件(Glance)等主要組件來協同完成計算資源分配、調度和回收等工作。OpenStack使用Dashboard組件為用戶提供了如圖3所示的Web界面,管理員可以賦予用戶權限去操作這個Web界面來上傳鏡像、配置實例和創建虛擬實例等。在物理主機上搭建OpenStack需要部署不同組件,不同組件的功能如表1所示。
2? 基于云的彈性伸縮測試集群
云負載測試平臺通過在測試云中構建云測試集群來發起客戶端負載,對待測目標應用進行網絡調用。云測試集群由一定數目的云測試主機構成,其中云測試主機是指部署在OpenStack上且安裝有測試執行程序TestAgent的虛擬主機實例。OpenStack支持iso、qcow2、ova等多種類型的鏡像,使用測試主機鏡像(qcow2鏡像)來創建云測試主機。如圖4所示的流程提供了制作測試主機的OpenStack鏡像的主要流程,該鏡像主要由測試執行程序Linux操作系統、TestAgent測試執行程序以及測試執行環境三部分構成,其中Linux操作系統提供鏡像程序運行的平臺,測試執行環境用于提供TestAgent運行的環境支撐。云測試主機的創建除了需要鏡像的支撐,還需要一系列基礎資源的支持,如網絡、路由、Flavor、安全組等。本文定義云測試主機為一個五元組
為保證測試云靈活地生成各類不同規模的客戶端負載,同時避免資源浪費,本文提出了一種測試集群的彈性伸縮機制,來更好地利用基礎測試資源。該彈性伸縮機制需要事先估計負載測試任務在目標負載規模下所需要的云測試主機數量,并對云測試主機進行自適應的申請、釋放控制等,以適應實際的測試需要。
首先根據負載測試所需云測試主機的數量在測試云中分配虛擬測試主機,構建用于發起負載的客戶端集群。該步驟中,將按需進行虛擬測試主機分配。假設需要K個虛擬主機來作為客戶端發起負載測試,而當前測試云中僅有少于K的活躍云測試主機,則測試過程將要求測試云彈性地分配更多云測試主機,確保可用的云測試主機數量大于K。而如果當前云測試主機數量大于K,且有L個云測試主機已經相當長時間內未被使用,則測試云將自動釋放這些虛擬測試主機以減少當前的資源占用。如此,用于發起客戶端負載的云測試主機的數量總是彈性地根據實際測試需要來控制,而不用像傳統的性能測試需要事先構建一個規模固定的測試集群。
在實施負載測試的過程中,測試云始終對各個云測試主機的實際資源使用情況進行監控。一旦發現某云測試主機上的CPU、內存等占用達到上限閾值,則自動調用測試云的API來分配更多的云測試主機。如此,即使測試起初所判定需要的云測試主機數量不夠準確,也能夠自適應地對云測試主機數量進行調整,始終保證當前擁有的云測試主機能夠滿足指定規模負載的發起需要。客戶端測試主機的分配和彈性伸縮過程如圖5所示。云測試主機的彈性分配和釋放最終通過底層云環境的控制接口實現。在OpenStack云中,Nova模塊提供虛擬主機的申請和釋放REST接口,通過發送REST服務調用命令為Nova后臺服務,即可實現測試云的主機控制功能。對于虛擬測試主機而言,其彈性伸縮是通過測試云的相關控制邏輯來實現的,而不是通過云自身直接提供的彈性伸縮機制。
3? 云負載測試的執行
云負載測試平臺按照測試腳本、測試用例的概念體系來管理負載測試活動。在每個測試腳本中,使用testBegin()和testEnd()原語調用標識腳本的開始和結束,該原語對的執行時間范圍也是腳本的執行時間,可用該時間來了解被測應用的性能。FunkLoad測試腳本基于Python的WebUnit框架來描述用戶對Web應用的訪問,該腳本主要記錄對Web應用進行訪問過程中的HTTP報文,通過重放這些HTTP報文,實現回歸測試。以圖6所示的FunkLoad腳本為例,一個腳本可用actionBegin()和actionEnd()原語切分為若干不同的子活動,即一個較大的腳本可能包含一系列相對獨立的活動。例如,對Web應用的訪問可能包括login、view、submit等多個不同步驟。如此,可以為每個步驟搜集執行時間、數據通信量的統計信息,更具細粒度地考查被測應用的執行表現。
測試用例表達對待測目標應用的測試配置,此處的測試用例主要是負載測試,包含負載測試的相關環境和執行配置選項,包以及負載測試過程中的負載變化策略等。每個測試用例包含一個或多個測試腳本,這些測試腳本描述了對待測目標應用的不同訪問方式,多個測試腳本構成了對云應用的測試剖面,反映一個負載測試主要關注待測目標應用中哪些功能的性能表現。用戶選取測試腳本、創建測試用例來完成負載測試活動的配置。
用戶配置好的負載測試活動被提交至測試控制中心,控制中心根據負載測試活動中的負載規模在測試云上請求分配一定數目的云測試主機,并將負載測試活動分配到對應的云測試主機上執行。云測試主機在接收到負載測試活動后,解析配置的負載變化策略的信息,按照負載變化策略在指定的時間節點上生成預設規模的客戶端負載,每個負載依賴于相應的腳本執行引擎,發起對待測目標應用的網絡調用,待測目標應用執行客戶端負載中的動作并給出響應,由云測試主機收集測試執行數據并匯總給測試控制中心,形成對待測目標應用性能的分析與評估。在測試執行過程中,測試控制中心會收集測試集群中每個云測試主機匯報的監控數據,分析監控數據來判斷云測試主機的資源是否達到閾值上限,從而進行動態的伸縮。
4? 結? 論
本文提出了一套基于OpenStack的云負載測試平臺實現方案,分別介紹了云負載測試平臺體系結構、測試集群的構建和負載測試活動的執行,實現了一種基于彈性伸縮集群的云負載測試技術,在測試過程中保證用于發起客戶端負載的云測試主機數量,彈性地根據實際測試需求動態分配,避免了測試資源的浪費,為構建經濟高效的云負載測試系統提供了實現參考。
參考文獻:
[1] JIANG Z,HASSAN A. A Survey on Load Testing of Large-Scale Software Systems [J]. IEEE Transactions on Software Engineering,2015,41(11):1.
[2] SCHULZH,ANGERSTEINT,HOORN A V. Towards Automating Representative Load Testing in Continuous Software Engineering [C]//ICPE18:ACM/SPEC International Conference on Performance Engineering. Association for Computing Machinery,2018:123-126.
[3] HARIKRISHNA P,AMUTHANA. A survey of testing as a service in cloud computing [C]// 2016 International Conference on Computer Communication and Informatics (ICCCI). IEEE,2016.
[4] 李萱,王偉,張文博,等.基于云的Web應用性能測試服務平臺 [J].計算機系統應用,2013,22(10):33-38.
[5] HANAWA T,BANZAI T,KOIZUMI H,et al. Large-Scale Software Testing Environment Using Cloud Computing Technology for Dependable Parallel and Distributed Systems [C]// Third International Conference on Software Testing,Verification and Validation,ICST 2010,Paris,France,April 7-9,2010,Workshops Proceedings. IEEE Computer Society,2010.
[6] YAN M,SUN H,WANG X,et al. Building a TaaS platform for web service load testing [C]// 2012 IEEE International Conference on Cluster Computing. IEEE,2012:576-579.
[7] 丁小盼,周浩,賀珊,等.基于OpenStack的云測試平臺及其性能分析研究 [J].軟件,2015,36(1):6-10.
[8] 李知杰,趙健飛.OpenStack開源云計算平臺 [J].軟件導刊,2012,11(12):10-12.
作者簡介:顏碩彥(1994-),男,漢族,江蘇淮安人,碩士研究生,研究方向:軟件分析與測試;晉文明(1994-),男,漢族,安徽當涂人,碩士研究生,研究方向:軟件分析與測試。