ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:181.98KB ,
资源ID:4682108      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4682108.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(云计算服务 UI 性能测试的全自动化框架解决方案.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

云计算服务 UI 性能测试的全自动化框架解决方案.docx

1、云计算服务 UI 性能测试的全自动化框架解决方案云计算服务 UI 性能测试的全自动化框架解决方案简介:性能是云计算产品极为关键的一个质量区域。作者所在的项目 IBM Smart Cloud Enterprise(以下均简称 SCE)是 IBM 云计算战略基于企业级的一款庞大而复杂的公有云产品,通过为用户提供可视化的网络平台接口,充分和快捷地帮助客户部署高灵活度的云方案。一直以来,无论从股东,客户,合作伙伴还是产品各团队,交互端的性能始终都是一个重要的议题。在过去的的半年里,产品的前端性能遇到了很大的挑战,提升用户体验之需求已迫在眉睫。作为性能团队,亟待解决的任务是如何搭建一套综合的全面的自动化

2、框架,不仅可获得交互端应用程序性能的详细数据,甚至还包括客户机服务器的资源监控,网络环境模拟,多参数融合控制等在内的一整套的集成化自动解决方案,从而为战略决策和技术调优提供第一手的真实的科学的数据。这套解决方案不仅已应用于该项目本身,其设计思路,功能模块也适用于云工程领域的一般项目,并已在 IBM 云项目组里得到了一定程度的推广和使用。无论您是架构师,还是性能测试或开发人员,如果您想部署一套 UI 性能测试的方案,阅读此文相信会有所裨益。这套综合的解决方案至少包括以下优点和功能:1. 紧凑,灵活 2. 可重用,易部署 3. 易配置,方便而友好的用户界面 4. 实现了互联网平台交互端的自动化驱动

3、 5. 实现了产品环境,测试环境以及多数据中心的覆盖和全兼容 6. 实现了浏览器缓存控制,更充分的体现测试的归类 7. 实现了网络带宽的模拟和控制 8. 实现了多轮基准测试的控制,可以方便地定制集合级别的一次性调度 9. 实现了客户测试端和产品服务器端资源数据的自动捕获和数据集成 10. 实现了基准测试独一化、整合化输出的封装 11. 实现了无论集合测试还是单一测试共用数据管道的输出统一 设计架构没有直接相关的成功经验可以借鉴,从零开始搭建一套综合的多功能的满足需求的云工程交互端性能解决方案是一项任务更是一个挑战。如何从专业而周密的角度做全局设计,我们面临诸多技术要素要去解决,例如1. 如何有

4、效利用第三方引擎,设计、实现终端用户的自驱动和控制? 2. 如何设计、实现一款合适的前端应用程序性能捕获工具? 3. 如何设计、集成客户端服务器端系统数据的自动捕获和定向输出? 4. 如何设计、实现公用数据管道的输出统一? 5. 如何设计、实现基准测试独一化、整合化输出的封装? 6. 如何设计、实现多轮基准测试的控制,可以方便地定制集合级别的一次性调度? 7. 如何设计、实现网络带宽的模拟和控制? 8. 如何设计友好的用户界面,简单易用,同时可配置多参数? 为便于您理解设计的脉络,以及内部模块之间的相互联系,我们给出此解决方案的整体开发架构图,如下图所示,图 1. 总体开发架构图(查看大图)由

5、此架构图可以看出,整个框架是一个全面的端到端的自动化解决方案。自动化测试程序部署在测试机(client hosts),测试对象即产品服务部署在服务器(servers)。方案一共包括两个独立的大功能模块,其中 MainStream(baseline)顾名思义是基准测试,MainStream(run2run)则是多轮基准测试,如果把基准测试作为一个单元,那么 run2run 可以理解为可定制的重复单元测试集合。基准测试和多轮基准测试的实现本身都是互相独立的,区别在于后者调用了前者并重点在于调度控制。基准测试是非常重要的,可以看到除多轮测试的虚线框之外的绝大部分都是在描述基准测试的设计和工作方式。测

6、试的执行者只需要编辑好 properties 文本文件,通过这个唯一的接口传达给主程序必要的配置信息,剩下的就是程序自己全权运行了。那么程序本身究竟融合了哪些功能模块呢? client capturing 是主程序自动捕获测试端的系统信息,比如在测试运行过程中 CPU 的数据,以及对此测试配置文件 baseline.properties 的拷贝。 Network/Server capturing 是程序自动触发和捕获从测试端到产品服务器端之间的网络时延,以及 IP 路由数据。 除此之外,程序一开始就会根据配置文件的信息去实施带宽控制,在图中叫做 Automated Bandwidth Cont

7、rol Model,是否开启此功能以及如果开启的话上行和下载速率分别是多少均可以在 properties 中设置键值进行精确控制。 既然是 UI 的测试,必然需要触发 UI 操作,在图中叫做 Web Driver,我们基于 AutoIT 的 IE.au3 库作为 web 引擎写了完整的代码来控制页面操作。可以看到项目中我们一共关注了 6 个页面,分别是 Home, Login, Control Panel, Account, Overview, Logout。 在触发和访问每个页面的时候并不是简单的点击操作,这就是为什么我们叫做”Intelligent Timing Control Model

8、”。如果此页面无法访问或者由于其他原因导致页面元素无法触发,我们统一定义为 Error;如果该页面已经触发但是长久没有结束全载,我们定义为 Timeout;如果成功触发并成功全载,我们成为 Success。无论 Timeout 还是 Error,程序都会走向消亡处理,比如逐步关闭 CPU 的采集,关闭带宽的模拟,输出相应日志,关闭 IE,主程序退出。只有在 Success 的情况下,主程序才会继续前行,当且仅当最后访问的 Logout 也是 Success 的状态,才会输出标记此基准测试为 Success 的日志,并消亡整个程序。 刚才谈到了日志,我们有必要再次细解。从图中可以看到伴随每个基准

9、测试都有两种日志生成。”unique combined single baseline dataset”是包含一次基准测试的所有详细数据,它是独有的按照时间戳命名的文件夹。 “unique formatted log in shared bed”是将任何一次基准测试都简要记录在案的一个自动生成的共享文件,只要有基准测试进行过,就会有对应该测试的摘要性日志作为一行而生成,并且该文件被所有的测试共享,我们定义了其统一的格式,这个格式请见正文部分之”公用数据管道输出统一”。 多轮基准测试是我们提到的对基准测试的调度控制。如果我们把每个基准测试叫做 session 的话,多轮基准控制就称作 sessi

10、on control。用户可以通过编辑 properties 配置文件来设置自己想要跑出几轮成功的基准测试,并且设定最大的允跑轮数。因为多轮基准是对基准的调度,所以一切在基准测试中所提到的环节,包括操控和日志等等所有的一切都不会被改变,一切都会井然有序的运作。回页首解决之道这一部分,我们将按如下主题为序进行逐一讲解, 终端自驱动和控制 应用程序性能捕获 系统数据捕获与定向输出 公用数据管道输出统一 基准测试独立整合封装 多轮基准测试控制与调度 网络带宽模拟与控制 用户界面多参数配置 终端自驱动和控制终端自驱动和控制其实就是实现针对需求的界面自动化和控制,这也是 UI 性能测试的必要条件。实现这

11、一要求就是实现一个驱动引擎。可以基于企业级的工具平台,如 Rational Functional Tester、Quick Test Professional,亦可以使用开源第三方工具或者类库,如 Selenium, waitR, waitN, AutoIT,进行上层二次开发,进而搭建个性化的自动化驱动平台。具体到本方案,我们优先考虑了 AutoIT,因为主框架中会有一些与 Windows 平台对象的交互,而这方面 AutoIT 有丰富而稳定的接口。其次,其优势虽在交互端自动化功能一般,但其提供了专门控制 IE 浏览器行为的 IE.au3 类库接口,足够应付我们的项目需求。综合上述,基于 Au

12、toIT 在桌面和系统级都有良好的支持,我们的主框架代码将基于此来实现。为了进一步说明自动化的内涵,这里将共享一段完整的代码片段来说明终端自驱动和控制,此片段完成的功能可以大概表述如下:触发 IE 浏览器,访问 SCE 起始页面,之后寻找并触发 IE 浏览器上的 pagetest 开关,回到页面域判断是否需要处理 https certification,接着等待页面全载,巧妙通过判断 pagetest tab 数目判断页面是否完成全载,如果全载则输出文本性能数据,关闭 pagetest,进入下一个页面处理阶段;如果在规定的 3 分钟内没有成功,则认定为 Timeout,进入程序消亡过程(详情如

13、架构图总论所述);如果触发 pagetest 开关之后都没有机会处理 certification,那么程序认定此页面为 Error,进入程序消亡过程。后续 5 个页面的处理机制将与此雷同,故不再赘述于此。清单 1. 终端自驱动与控制 - Home 访问处理实例 ; 浏览器对象初始化,激活,等待 $oIE = _IECreate (about:blank) WinActivate(CLASS:IEFrame,) WinSetState(CLASS:IEFrame, , SW_MAXIMIZE) WinWaitActive(CLASS:IEFrame) Sleep(5000) ;pagetest

14、插件对象初始化和捕获 $hToolbar = ControlGetHandle(CLASS:IEFrame, , CLASS:ToolbarWindow32; INSTANCE:1) ;- 开始 Home 页面访问和处理 - ; 判定不同的测试环境,处理 https certification 问题,达到访问同一化 If 0 StringInStr($URL, ) Then _GUICtrlToolbar_ClickButton($hToolbar, $BtnCmdID, left, True) Sleep(2000) _IENavigate ($oIE,$URL,0) Else _IENav

15、igate ($oIE,$URL) $oSSL = _IEGetObjByName ($oIE, overridelink) If $oSSL =0 Then ; 将状态置为 Error $status=Error ; 重置本机网络带宽为默认值 ResetBW() ; 停止 perfmon,并将 CPU 数据拷贝至本轮基准测试所创建的输出所在 Run(ComSpec & /c & logman stop test, , SW_HIDE,$STDERR_CHILD + $STDOUT_CHILD) FileCopy(C:PerfLogscpu.tsv, $configDir & *.*) ; 计

16、算总输出 $output= $runId & |& $env & | & $USER & |& $baselineName & | & $status & | & $CCcomment & | & $BWcomment & | & $comment & | ; 将该输出写入 execution.log loging($logFile,$output) AppendResponse2Log() loging2line($sessionFile,$Indicator & $status,1) loging2line($sessionFile,$Target & $baselineName,2) ;

17、 截屏并存为图片,存贮到本轮基准测试所创建的输出所在 Sleep(5000) $hBmp = _ScreenCapture_Capture () Sleep(500) _ScreenCapture_SaveImage ($rDir & Screen_home_error.jpg, $hBmp) _IEQuit ($oIE) Exit EndIf ; 触发 pagetest _GUICtrlToolbar_ClickButton($hToolbar, $BtnCmdID, left, True) Sleep(2000) ; 绕过 certification _IEAction ($oSSL, c

18、lick) EndIf ; 通过检测 pagetest 的 tab 控件数量来判定是否结束页面的捕获,并处理 Timeout 情况 $hPagetestTabs = ControlGetHandle(AOL Pagetest, , CLASS:SysTabControl32; INSTANCE:1) If $hPagetestTabs = Then Exit EndIf $i = 0 While 1 _GUICtrlTab_FindTab($hPagetestTabs, Checklist) Sleep(500) $i = $i + 1 If $i = 360 Then ; 将状态置为 Tim

19、eout $status=Timeout ; 重置本机网络带宽为默认值 ResetBW() ; 停止 perfmon,并将 CPU 数据拷贝至本轮基准测试所创建的输出所在 Run(ComSpec & /c & logman stop test, , SW_HIDE,$STDERR_CHILD + $STDOUT_CHILD) FileCopy(C:PerfLogscpu.tsv, $configDir & *.*) ; 计算总输出 $output= $runId & |& $env & | & $USER & |& $baselineName & | & $status & | & $CCco

20、mment & | & $BWcomment & | & $comment & | ; 将该输出写入 execution.log loging($logFile,$output) AppendResponse2Log() loging2line($sessionFile,$Indicator & $status,1) loging2line($sessionFile,$Target & $baselineName,2) ; 截屏并存为图片,存贮到本轮基准测试所创建的输出所在 $hBmp = _ScreenCapture_Capture () Sleep(500) _ScreenCapture_

21、SaveImage ($rDir & Screen_home_timeout.jpg, $hBmp) _IEQuit ($oIE) Exit ExitLoop EndIf WEnd ; 强制前端化显示 pagetest WinActivate(AOL Pagetest,) WinWaitActive(AOL Pagetest) Sleep(1500) ; 调用 ptExport 将 pagetest 的详尽数据和优化策略进行保存,输出到基准测试输出所在 ptExport(home) ; 关闭 pagetest WinClose(AOL Pagetest, ) 应用程序性能捕获应用程序的性能捕获

22、,从本质上来讲就是获得所有页面活动的性能数据,具体到每一个请求量级。我们考虑两点要素:第一要轻量级,不引入额外性能噪音;其次要有丰实的数据,达到我们的基本要求。调研发现可以借助 YSlow、pagetest,、dynatrace 等作为应用程序前端性能的捕捉引擎。pagetest 数据丰富,详实有效,支持文本和图形化,可以满足我们的数据要求;其在浏览器上作为插件存在,轻量级,且便于被控制。基于这两大优点,我们的主代码将会实现与 pagetest 的全方位交互,包括节奏判定,输出控制以及各集成调用。便于读者直观上对 pagetest 的界面有所了解,示图如下,图 2. pagetest 界面示例

23、(查看大图)因为代码的强耦合,无法剥离独立的片段来专门解释。能够表征这一节要义的代码片段在上一小节”终端自驱动和控制”中已经全被包括,可以了解 pagetest 于何时、何种条件下,被触发、被操控、被关闭,以及如何被巧妙用作全载动态智能判断的方法。系统数据捕获与定向输出系统数据涉及到测试机、服务器相关系统数据。我们的解决方案希望集合各类数据,以提供足够完备的调优支持。比如现阶段我们对测试机的 CPU 使用、网络延时、IP 路由等感兴趣,我们需要实现主代码自动获取这些数据的可能性。从策略上讲,CPU 数据可以通过自动触发 perfmon 获得,网络延迟数据可以通过即时 ping 重定向获得,路由

24、数据可以通过初始化 tracert 重定向获得。图 3,4,5 分别是给出一个直观印象。但我们要重申的是,这不是我们要的结果。我们所谓的数据捕获是基于代码的自动实现以及自动定向输出,即通过 AutoIT 主代码中调用 Dos 命令,并且获得该调用的进程句柄,从而访问其子进程 IO 管道拿到文本数据信息。图 3. perfmon 交互上图是 perfmon 的界面示意,在主程序中,我们是这样交互 perfmon 的:在每个基准测试里,程序进入 web driver 之前强制停止 perfmon 数据搜集动作,并强制删除已有的旧数据: ;stop cpu and remove cpu and st

25、art perfmon Run(ComSpec & /c & logman stop test, , SW_HIDE,$STDERR_CHILD + $STDOUT_CHILD) FileDelete(C:PerfLogscpu.tsv) Run(ComSpec & /c & logman start test, , SW_HIDE,$STDERR_CHILD + $STDOUT_CHILD) 无论任何一个页面有异常出现(Error、Timeout)或者整个基准测试全程无异常成功完成时,均调用 Dos 命令停止 perfmon,并且拷贝由其产生的 CPU 数据: ;stop perfmon &

26、 copy file to sys_metric Run(ComSpec & /c & logman stop test, , SW_HIDE,$STDERR_CHILD + $STDOUT_CHILD) FileCopy(C:PerfLogscpu.tsv, $configDir & *.*) 图 4. Dos Ping上图是 Dos ping 的界面示意,在主程序中通过调用 Dos 命令,获得该调用的进程句柄,从而访问其子进程 IO 管道拿到文本数据信息。也就是说通过下述方法,在基准测试的 sys_metrics 文件夹里将自动生成 ping.log, 文件内容为上图红色所框注的内容一致。

27、下面代码详细说明了这个过程。清单 2. 网络延迟数据捕获与定向输出 ; 自动创建 sys_metrics 文件夹,ping.log 文件作为此次基准测试的定向输出所在 $configDir=$rDir & sys_metrics $networkFile=$configDir & ping.log DirCreate($configDir) ; 获取延迟数据并定向输出 $network=getLatency($ADDRESS) loging($networkFile,$network) ; 函数 getLatency() 实现 - 获取延迟数据 Func getLatency($address

28、) Local $mycmdline = ping & $address Local $foo = Run(ComSpec & /c & $mycmdline, , SW_HIDE,$STDERR_CHILD + $STDOUT_CHILD) ; Local $line2= While 1 $line = StdoutRead($foo) $line2 = $line2 & $line If error Then ExitLoop EndIf Wend Return $line2 EndFunc ; 函数 loging() 实现 定向输出 Func loging($fileName,$info

29、) Local $file $file = FileOpen($fileName, 1) If $file = -1 Then MsgBox(0, Error, Unable to open file.) Exit EndIf FileWriteLine($file, $info) FileClose($file) EndFunc 图 5. Dos tracert上图是 Dos tracert 的界面示意,其代码处理原理与 ping 一致,唯一只是将 ping 替换为 tracert。不再赘述。公用数据管道输出统一提出公用数据管道是基于一个需求:针对每一轮基准测试,我们都需要一个综合性输出,而

30、且此输出有一致的格式,并且被基准测试共享。无论是什么样的基准测试,比如有时您可能叠加了带宽控制,可能您施加了缓存管理,在这里,公用数据管道都是通用的。便于直观,我们设计了统一的文件规范,每一行对应一个单元测试输出,并附样式如下4000030|stagenv_40|D:pagetestBase_01-24-2011-16-51-55_N|Success|CleanCachefalse|BW(false)()()|N/A|Home, 25.254 second,Login, 23.036 second,Account, 7.938 second,Control_Panel, 18.019 second,Overview, 7.210 second,Logout, 5.085 second| 注:自左到右依次是独立标识、web 对象地址、用户、单元统一化集成输出存储位、测试结果标

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1