顏碩彥 晉文明 李昌建
摘? 要:為保障線上軟件系統(tǒng)服務(wù)質(zhì)量的可靠性,有必要對(duì)其進(jìn)行有效的負(fù)載測(cè)試。隨著云計(jì)算技術(shù)的發(fā)展,基于云端資源發(fā)起的負(fù)載測(cè)試可以方便大規(guī)??蛻舳素?fù)載的生成,且容易實(shí)施。然而,目前研究缺少相關(guān)實(shí)現(xiàn)參考,導(dǎo)致這樣的云測(cè)試系統(tǒng)難以構(gòu)建。文章提出了一套基于OpenStack的云負(fù)載測(cè)試平臺(tái)實(shí)現(xiàn)方案,介紹了基于彈性伸縮集群的云負(fù)載測(cè)試技術(shù),為實(shí)現(xiàn)基于云的負(fù)載測(cè)試系統(tǒng)提供了實(shí)現(xiàn)參考。
關(guān)鍵詞:負(fù)載測(cè)試;云測(cè)試系統(tǒng);OpenStack;彈性伸縮;測(cè)試集群
中圖分類(lèi)號(hào):TP311? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):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? 引? 言
負(fù)載測(cè)試作為軟件測(cè)試的一種,是為了檢測(cè)系統(tǒng)在負(fù)載方面的相關(guān)問(wèn)題從而對(duì)系統(tǒng)進(jìn)行評(píng)估的過(guò)程[1],是保障大型線上軟件系統(tǒng)服務(wù)質(zhì)量可靠性的有效手段[2]。隨著云計(jì)算技術(shù)的發(fā)展,一些測(cè)試人員把負(fù)載測(cè)試遷移到云上[3],依托于云端資源發(fā)起負(fù)載測(cè)試可以方便大規(guī)??蛻舳素?fù)載的生成,同時(shí)降低負(fù)載測(cè)試的實(shí)施難度。文獻(xiàn)[4]設(shè)計(jì)了一種準(zhǔn)入控制和任務(wù)調(diào)度算法,實(shí)現(xiàn)云性能測(cè)試服務(wù)平臺(tái)資源的共享管理和動(dòng)態(tài)分配。文獻(xiàn)[5]為保證分布式系統(tǒng)測(cè)試的可靠性,提出了云測(cè)試環(huán)境D-Cloud,實(shí)現(xiàn)自動(dòng)化系統(tǒng)配置和測(cè)試流程。文獻(xiàn)[6]提出了一個(gè)用于Web服務(wù)的負(fù)載測(cè)試平臺(tái),使得負(fù)載測(cè)試過(guò)程盡可能接近實(shí)際運(yùn)行場(chǎng)景。文獻(xiàn)[7]提出的云測(cè)試平臺(tái)能夠?qū)崿F(xiàn)按需分配硬件資源,無(wú)需重新配置測(cè)試環(huán)境。
現(xiàn)有研究主要關(guān)注云測(cè)試系統(tǒng)的任務(wù)調(diào)度、測(cè)試自動(dòng)化、負(fù)載測(cè)試真實(shí)性等方面,對(duì)系統(tǒng)實(shí)現(xiàn)層面的研究較少,導(dǎo)致云測(cè)試系統(tǒng)的構(gòu)建缺乏實(shí)現(xiàn)參考。鑒于此,基于校內(nèi)的“基于云計(jì)算服務(wù)設(shè)施測(cè)試系統(tǒng)”項(xiàng)目的研究成果,本文提出了一套基于OpenStack的云負(fù)載測(cè)試平臺(tái)實(shí)現(xiàn)方案,介紹了基于彈性伸縮集群的云負(fù)載測(cè)試技術(shù),依托于測(cè)試云中彈性伸縮的測(cè)試集群來(lái)發(fā)起負(fù)載測(cè)試,保證用于發(fā)起客戶端負(fù)載的云測(cè)試主機(jī)數(shù)量總是彈性地根據(jù)實(shí)際測(cè)試需求動(dòng)態(tài)分配,避免了測(cè)試資源的浪費(fèi)。本文為構(gòu)建經(jīng)濟(jì)高效的云負(fù)載測(cè)試系統(tǒng)提供了一套實(shí)現(xiàn)參考。
1? 云負(fù)載測(cè)試平臺(tái)體系結(jié)構(gòu)
本文提出了一個(gè)面向云環(huán)境的云負(fù)載測(cè)試平臺(tái)體系結(jié)構(gòu),平臺(tái)按照CloudTest、TestAgent、WebAPP、VM Monitor等幾大物理模塊進(jìn)行組織,其總體物理結(jié)構(gòu)如圖1所示。
CloudTest為測(cè)試控制中心,控制整個(gè)測(cè)試的執(zhí)行流程,并提供各類(lèi)測(cè)試活動(dòng)的管理功能。TestAgent為測(cè)試執(zhí)行程序,是發(fā)起客戶端負(fù)載、具體實(shí)施負(fù)載測(cè)試的主要模塊。WebAPP為待測(cè)目標(biāo)應(yīng)用,用于模擬負(fù)載測(cè)試的服務(wù)器。VM Monitor為監(jiān)控程序,用于監(jiān)控云虛擬主機(jī)的資源使用。Dashboard為前端程序,它是一個(gè)基于ExtJS框架編寫(xiě)的Web頁(yè)面,提供用戶與平臺(tái)交互的視圖。
本文將測(cè)試云部署在以O(shè)penStack[8]為代表的底層云計(jì)算IaaS(基礎(chǔ)服務(wù)設(shè)施)上,通過(guò)在云虛擬主機(jī)上運(yùn)行TestAgent測(cè)試執(zhí)行程序,在IaaS云上構(gòu)建一個(gè)PaaS(平臺(tái)即服務(wù))層,對(duì)外提供統(tǒng)一的測(cè)試服務(wù)TaaS(測(cè)試即服務(wù))層。相關(guān)結(jié)構(gòu)的示意圖如圖2所示,底層通過(guò)OpenStack等軟件棧搭建一個(gè)包含物理主機(jī)和虛擬主機(jī)的IaaS云環(huán)境。測(cè)試系統(tǒng)在虛擬主機(jī)上安裝TestAgent測(cè)試執(zhí)行程序來(lái)發(fā)起測(cè)試,并通過(guò)一個(gè)TestManager調(diào)度各個(gè)TestAgent和向IaaS云發(fā)送控制命令,構(gòu)建一個(gè)專(zhuān)用于測(cè)試的服務(wù)層。TestAgent可完成虛擬用戶模擬、客戶端性能數(shù)據(jù)采集等工作。上層云測(cè)試平臺(tái)只需與TestAgent和IaaS控制中心溝通,而無(wú)需直接面對(duì)物理設(shè)備。對(duì)最終用戶而言,只需訪問(wèn)測(cè)試云的管理中心TestManager即可完成所有測(cè)試工作,而無(wú)需處理復(fù)雜的底層操作細(xì)節(jié)。
OpenStack是一個(gè)開(kāi)源的云計(jì)算管理平臺(tái)項(xiàng)目,提供了一套IaaS解決方案,通過(guò)計(jì)算組件(Nova)、對(duì)象存儲(chǔ)組件(Swift)、身份服務(wù)(Keystone)組件和鏡像服務(wù)組件(Glance)等主要組件來(lái)協(xié)同完成計(jì)算資源分配、調(diào)度和回收等工作。OpenStack使用Dashboard組件為用戶提供了如圖3所示的Web界面,管理員可以賦予用戶權(quán)限去操作這個(gè)Web界面來(lái)上傳鏡像、配置實(shí)例和創(chuàng)建虛擬實(shí)例等。在物理主機(jī)上搭建OpenStack需要部署不同組件,不同組件的功能如表1所示。
2? 基于云的彈性伸縮測(cè)試集群
云負(fù)載測(cè)試平臺(tái)通過(guò)在測(cè)試云中構(gòu)建云測(cè)試集群來(lái)發(fā)起客戶端負(fù)載,對(duì)待測(cè)目標(biāo)應(yīng)用進(jìn)行網(wǎng)絡(luò)調(diào)用。云測(cè)試集群由一定數(shù)目的云測(cè)試主機(jī)構(gòu)成,其中云測(cè)試主機(jī)是指部署在OpenStack上且安裝有測(cè)試執(zhí)行程序TestAgent的虛擬主機(jī)實(shí)例。OpenStack支持iso、qcow2、ova等多種類(lèi)型的鏡像,使用測(cè)試主機(jī)鏡像(qcow2鏡像)來(lái)創(chuàng)建云測(cè)試主機(jī)。如圖4所示的流程提供了制作測(cè)試主機(jī)的OpenStack鏡像的主要流程,該鏡像主要由測(cè)試執(zhí)行程序Linux操作系統(tǒng)、TestAgent測(cè)試執(zhí)行程序以及測(cè)試執(zhí)行環(huán)境三部分構(gòu)成,其中Linux操作系統(tǒng)提供鏡像程序運(yùn)行的平臺(tái),測(cè)試執(zhí)行環(huán)境用于提供TestAgent運(yùn)行的環(huán)境支撐。云測(cè)試主機(jī)的創(chuàng)建除了需要鏡像的支撐,還需要一系列基礎(chǔ)資源的支持,如網(wǎng)絡(luò)、路由、Flavor、安全組等。本文定義云測(cè)試主機(jī)為一個(gè)五元組
為保證測(cè)試云靈活地生成各類(lèi)不同規(guī)模的客戶端負(fù)載,同時(shí)避免資源浪費(fèi),本文提出了一種測(cè)試集群的彈性伸縮機(jī)制,來(lái)更好地利用基礎(chǔ)測(cè)試資源。該彈性伸縮機(jī)制需要事先估計(jì)負(fù)載測(cè)試任務(wù)在目標(biāo)負(fù)載規(guī)模下所需要的云測(cè)試主機(jī)數(shù)量,并對(duì)云測(cè)試主機(jī)進(jìn)行自適應(yīng)的申請(qǐng)、釋放控制等,以適應(yīng)實(shí)際的測(cè)試需要。
首先根據(jù)負(fù)載測(cè)試所需云測(cè)試主機(jī)的數(shù)量在測(cè)試云中分配虛擬測(cè)試主機(jī),構(gòu)建用于發(fā)起負(fù)載的客戶端集群。該步驟中,將按需進(jìn)行虛擬測(cè)試主機(jī)分配。假設(shè)需要K個(gè)虛擬主機(jī)來(lái)作為客戶端發(fā)起負(fù)載測(cè)試,而當(dāng)前測(cè)試云中僅有少于K的活躍云測(cè)試主機(jī),則測(cè)試過(guò)程將要求測(cè)試云彈性地分配更多云測(cè)試主機(jī),確保可用的云測(cè)試主機(jī)數(shù)量大于K。而如果當(dāng)前云測(cè)試主機(jī)數(shù)量大于K,且有L個(gè)云測(cè)試主機(jī)已經(jīng)相當(dāng)長(zhǎng)時(shí)間內(nèi)未被使用,則測(cè)試云將自動(dòng)釋放這些虛擬測(cè)試主機(jī)以減少當(dāng)前的資源占用。如此,用于發(fā)起客戶端負(fù)載的云測(cè)試主機(jī)的數(shù)量總是彈性地根據(jù)實(shí)際測(cè)試需要來(lái)控制,而不用像傳統(tǒng)的性能測(cè)試需要事先構(gòu)建一個(gè)規(guī)模固定的測(cè)試集群。
在實(shí)施負(fù)載測(cè)試的過(guò)程中,測(cè)試云始終對(duì)各個(gè)云測(cè)試主機(jī)的實(shí)際資源使用情況進(jìn)行監(jiān)控。一旦發(fā)現(xiàn)某云測(cè)試主機(jī)上的CPU、內(nèi)存等占用達(dá)到上限閾值,則自動(dòng)調(diào)用測(cè)試云的API來(lái)分配更多的云測(cè)試主機(jī)。如此,即使測(cè)試起初所判定需要的云測(cè)試主機(jī)數(shù)量不夠準(zhǔn)確,也能夠自適應(yīng)地對(duì)云測(cè)試主機(jī)數(shù)量進(jìn)行調(diào)整,始終保證當(dāng)前擁有的云測(cè)試主機(jī)能夠滿足指定規(guī)模負(fù)載的發(fā)起需要??蛻舳藴y(cè)試主機(jī)的分配和彈性伸縮過(guò)程如圖5所示。云測(cè)試主機(jī)的彈性分配和釋放最終通過(guò)底層云環(huán)境的控制接口實(shí)現(xiàn)。在OpenStack云中,Nova模塊提供虛擬主機(jī)的申請(qǐng)和釋放REST接口,通過(guò)發(fā)送REST服務(wù)調(diào)用命令為Nova后臺(tái)服務(wù),即可實(shí)現(xiàn)測(cè)試云的主機(jī)控制功能。對(duì)于虛擬測(cè)試主機(jī)而言,其彈性伸縮是通過(guò)測(cè)試云的相關(guān)控制邏輯來(lái)實(shí)現(xiàn)的,而不是通過(guò)云自身直接提供的彈性伸縮機(jī)制。
3? 云負(fù)載測(cè)試的執(zhí)行
云負(fù)載測(cè)試平臺(tái)按照測(cè)試腳本、測(cè)試用例的概念體系來(lái)管理負(fù)載測(cè)試活動(dòng)。在每個(gè)測(cè)試腳本中,使用testBegin()和testEnd()原語(yǔ)調(diào)用標(biāo)識(shí)腳本的開(kāi)始和結(jié)束,該原語(yǔ)對(duì)的執(zhí)行時(shí)間范圍也是腳本的執(zhí)行時(shí)間,可用該時(shí)間來(lái)了解被測(cè)應(yīng)用的性能。FunkLoad測(cè)試腳本基于Python的WebUnit框架來(lái)描述用戶對(duì)Web應(yīng)用的訪問(wèn),該腳本主要記錄對(duì)Web應(yīng)用進(jìn)行訪問(wèn)過(guò)程中的HTTP報(bào)文,通過(guò)重放這些HTTP報(bào)文,實(shí)現(xiàn)回歸測(cè)試。以圖6所示的FunkLoad腳本為例,一個(gè)腳本可用actionBegin()和actionEnd()原語(yǔ)切分為若干不同的子活動(dòng),即一個(gè)較大的腳本可能包含一系列相對(duì)獨(dú)立的活動(dòng)。例如,對(duì)Web應(yīng)用的訪問(wèn)可能包括login、view、submit等多個(gè)不同步驟。如此,可以為每個(gè)步驟搜集執(zhí)行時(shí)間、數(shù)據(jù)通信量的統(tǒng)計(jì)信息,更具細(xì)粒度地考查被測(cè)應(yīng)用的執(zhí)行表現(xiàn)。
測(cè)試用例表達(dá)對(duì)待測(cè)目標(biāo)應(yīng)用的測(cè)試配置,此處的測(cè)試用例主要是負(fù)載測(cè)試,包含負(fù)載測(cè)試的相關(guān)環(huán)境和執(zhí)行配置選項(xiàng),包以及負(fù)載測(cè)試過(guò)程中的負(fù)載變化策略等。每個(gè)測(cè)試用例包含一個(gè)或多個(gè)測(cè)試腳本,這些測(cè)試腳本描述了對(duì)待測(cè)目標(biāo)應(yīng)用的不同訪問(wèn)方式,多個(gè)測(cè)試腳本構(gòu)成了對(duì)云應(yīng)用的測(cè)試剖面,反映一個(gè)負(fù)載測(cè)試主要關(guān)注待測(cè)目標(biāo)應(yīng)用中哪些功能的性能表現(xiàn)。用戶選取測(cè)試腳本、創(chuàng)建測(cè)試用例來(lái)完成負(fù)載測(cè)試活動(dòng)的配置。
用戶配置好的負(fù)載測(cè)試活動(dòng)被提交至測(cè)試控制中心,控制中心根據(jù)負(fù)載測(cè)試活動(dòng)中的負(fù)載規(guī)模在測(cè)試云上請(qǐng)求分配一定數(shù)目的云測(cè)試主機(jī),并將負(fù)載測(cè)試活動(dòng)分配到對(duì)應(yīng)的云測(cè)試主機(jī)上執(zhí)行。云測(cè)試主機(jī)在接收到負(fù)載測(cè)試活動(dòng)后,解析配置的負(fù)載變化策略的信息,按照負(fù)載變化策略在指定的時(shí)間節(jié)點(diǎn)上生成預(yù)設(shè)規(guī)模的客戶端負(fù)載,每個(gè)負(fù)載依賴(lài)于相應(yīng)的腳本執(zhí)行引擎,發(fā)起對(duì)待測(cè)目標(biāo)應(yīng)用的網(wǎng)絡(luò)調(diào)用,待測(cè)目標(biāo)應(yīng)用執(zhí)行客戶端負(fù)載中的動(dòng)作并給出響應(yīng),由云測(cè)試主機(jī)收集測(cè)試執(zhí)行數(shù)據(jù)并匯總給測(cè)試控制中心,形成對(duì)待測(cè)目標(biāo)應(yīng)用性能的分析與評(píng)估。在測(cè)試執(zhí)行過(guò)程中,測(cè)試控制中心會(huì)收集測(cè)試集群中每個(gè)云測(cè)試主機(jī)匯報(bào)的監(jiān)控?cái)?shù)據(jù),分析監(jiān)控?cái)?shù)據(jù)來(lái)判斷云測(cè)試主機(jī)的資源是否達(dá)到閾值上限,從而進(jìn)行動(dòng)態(tài)的伸縮。
4? 結(jié)? 論
本文提出了一套基于OpenStack的云負(fù)載測(cè)試平臺(tái)實(shí)現(xiàn)方案,分別介紹了云負(fù)載測(cè)試平臺(tái)體系結(jié)構(gòu)、測(cè)試集群的構(gòu)建和負(fù)載測(cè)試活動(dòng)的執(zhí)行,實(shí)現(xiàn)了一種基于彈性伸縮集群的云負(fù)載測(cè)試技術(shù),在測(cè)試過(guò)程中保證用于發(fā)起客戶端負(fù)載的云測(cè)試主機(jī)數(shù)量,彈性地根據(jù)實(shí)際測(cè)試需求動(dòng)態(tài)分配,避免了測(cè)試資源的浪費(fèi),為構(gòu)建經(jīng)濟(jì)高效的云負(fù)載測(cè)試系統(tǒng)提供了實(shí)現(xiàn)參考。
參考文獻(xiàn):
[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應(yīng)用性能測(cè)試服務(wù)平臺(tái) [J].計(jì)算機(jī)系統(tǒng)應(yīng)用,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,F(xiàn)rance,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的云測(cè)試平臺(tái)及其性能分析研究 [J].軟件,2015,36(1):6-10.
[8] 李知杰,趙健飛.OpenStack開(kāi)源云計(jì)算平臺(tái) [J].軟件導(dǎo)刊,2012,11(12):10-12.
作者簡(jiǎn)介:顏碩彥(1994-),男,漢族,江蘇淮安人,碩士研究生,研究方向:軟件分析與測(cè)試;晉文明(1994-),男,漢族,安徽當(dāng)涂人,碩士研究生,研究方向:軟件分析與測(cè)試。