微软 Silverlight 是一项功能强大的技术,用于在 web 上创建和发布富因特网应用程序以及多媒体信息。Silverlight 的功能类似于 Adobe Flash,它将多媒体图像、动画以及交互整合到单一的运行环境中。Silverlight 最初致力于提供富媒体体验,让设计师和开发人员能够为他们的站点添加丰富的交互行为、媒体和动画。其后的 Silverlight 版本增加了许多对业务系统非常重要的新特性。
对于在企业级环境中使用 web 形式业务系统的组织来说,世界已经发生了巨大变化。基于多层全局分布式架构、SOA 以及其它新技术的现代应用程序变得越来越复杂,这导致企业开发、测试和管理 web 形式业务应用程序的方式也发生了很大变化。像 Silverlight 之类的富因特网应用程序(RIA)技术能使我们创建的浏览器应用程序和服务具备更加快速而迷人的交互体验。使用这些技术开发扩展应用程序非常吸引人,而这些 RIA 技术同时给需要在有限时间和低成本情况下部署应用程序功能特性的企业组织带来新的挑战。
为了做好准备,企业组织必须调整他们的测试方法。考虑到把新技术部署到因特网或内部网应用程序中的运行方式,在选用 Silverlight 应用程序测试方法时应该小心谨慎。在关键的应用程序平台上开发下一代应用程序时,你必须确信应用系统表现良好。负载测试是正式启用 web 应用程序前最后的关键任务之一,通常是在紧缩的时间限制和其他压力之下完成。在讨论能使你成功进行 Silverlight 应用程序负载测试的建议之前,先让我们来看一下 Silverlight 应用程序有多么独特。
Silverlight 应用程序和你之前接触过的应用程序可能有些不同。对于经典 HTML Web 应用程序,服务器会负责所有的处理,进一步说,即 HTML 渲染要求整个页面刷新。Silverlight 应用程序的不同之处在于内容的分发不需要重新加载页面,服务器会不断地异步更新应用程序。正因为如此,IIS 服务器负载显示出了很不一样的评测数据。
在进行 web 应用程序性能测试时,所有测试人员都知道测量事务响应时间的重要性。而 Silverlight 技术会导致后台产生的浏览器到服务器的 HTTP 请求次数不断增长。这种传输量的增长会对性能产生深远的影响。虽然用户可能不会意识到浏览器和远程服务器之间的双向通信,但如果因为负载增加而导致应用程序运行缓慢或抛出异常,用户必然会知道性能出现了问题。知道部署的可扩展性制约是很关键的。
使用革新的 RIA 技术,比如 Silverlight,在试图模拟实际负载时会碰到新的挑战。如果你计划使用这项新技术开发或部署应用程序,要想成功战胜这些挑战需要思考负载测试的新方法。
让我们来看看进行 Silverlight 应用程序负载测试的新挑战,以及提高应用程序性能和改善用户体验的三项建议。
建议 1:确保你能够支持 Silverlight 通信协议
Silverlight 应用程序能够使用多种协议和服务器通信。基于 WCF(Windows Communication Foundation),最常用的协议是使用经典 XML 或二进制 XML 的 REST 和 SOAP。为了精确模拟用户,你的负载测试工具必须能够支持 Silverlight 所使用的多种协议,因为这样你才能参数化请求、从响应中提取数据并验证响应。如果缺少这项功能,你的工具就不能根据实际用户提供真实的测试设计,导致测试的结果几乎没有价值。
REST 协议
REST 定义了一组架构原则,通过它你可以根据一些设计规则来设计 web 服务。这些规则隐式使用了各种 HTTP 动词,比如 GET、POST、PUT 和 DELETE。这意味着你的测试工具必须处理所有这些动词,以全面支持使用了 REST 的 web 服务。否则一些请求就无法重现,导致实际用户不能成功使用。
SOAP 协议
SOAP 是一个基于 XML 的简单协议,用于让应用程序在 HTTP 之上交换数据。测试人员可以以两种方式使用该协议来处理应用程序。第一种方式是使用 XML 操作,第二种方式是使用具有专门 SOAP 支持的负载测试工具。
相对于简单 XML 操作,有专门 SOAP 支持的测试工具具有以下优势:
- 它能够处理 WS-Security 之类的先进功能特性或附件。
- 它能在不需要记录来自现有客户端的流量的情况下设计性能测试用例。若没有辅助程序,从无到有设计一次 SOAP 请求是非常复杂的。而当你用包含了 web 服务正规描述的 WSDL 自动产生请求时,不仅生产力提高了,同时能保证请求的格式是正确的。
经典 XML
XML 是一种基于文本的格式,用于以机器可读的方式对文档进行编码。使用正规字符串操作很容易处理基本 XML 文档,而对复杂的文档进行数据抽取和验证则会是一项挑战。XPath 是用于在 XML 文档中对元素和属性进行导航的语言,它可用于在文档中精确定位数据。允许使用 XPath 的工具就确保你能使用任何 XML 文档,不管文档有多复杂。
二进制 XML
二进制 XML(MC-NBFX) 及其子协议,比如二进制 SOAP(MC-NBFS),以二进制格式对 XML 文档进行编码和解码,以减少处理时间,降低网络带宽。
许多负载测试工具都依靠 HTTP 传输数据,而不支持二进制协议。
因此,它们没有足够深入地分析客户端和服务端之间交换了什么数据。请确保你的负载测试工具对二进制 XML 进行解码,因为这是参数化请求、提取响应数据以及验证响应时所必须的。
建议 2:自动处理应用程序标识符
Silverlight 应用程序使用标识符做内部处理。有些标识符是特定用于某个应用程序的,其他的则通用于所有 Silverlight 应用程序。这些标识符被当作请求的参数,并在响应中使用,两者协同工作。例如,服务器响应某个请求并返回一个标识符,这个标识符会被作为后续请求的标识符发送。
每次客户端和服务端通信时,这些标识符会发生变化。按照原来的方式再现已记录的会话会因为错误的标识符值而导致错误产生。你必须在运行时为这些参数提取和重新注入恰当的值。因为标识符可以在很多请求中使用,手动处理它们意味着巨大的工作量。
为了避免痛苦地手动配置这些参数,需要确保你的负载测试工具能够自动检测和处理和所有 Silverlight 应用程序相关的标识符,并提供相关功能让你能够声明自定义的相关性规则,以自动处理自定义标识符。
建议 3:监测服务端
如果你的测试正在运行,而应用程序响应缓慢或者抛出异常,其根本原因会是什么呢?在进行负载测试时监测服务器能帮助你在服务器架构上找到这些问题的原因。
下面的例子是一个典型的性能计数器。该计数器用于监测某个典型微软应用程序的每个组件:
- Windows: Processor\% Processor Time, Memory\Available MBytes, System\Processor Queue Length, PhysicalDisk\% Idle Time, Network Interface\Output Queue Length…
- IIS: HTTP Service Request Queues\RejectionRate, Web Service Cache\File Cache Hits %, HTTP Service Url Groups\CurrentConnections…
- ASP.Net: ASP.NET\Requests Queued, ASP.NET\Requests Rejected, .NET CLR Exceptions\#Exceps Thrown / sec, .NET CLR Data\ SqlClient: Current # pooled connections…
- SQLServer: General Statistics\Logins/sec, SQL Statistics\ SQL Compilations/sec, Locks\Number of Deadlocks/sec…
我们需要什么样的计数器?什么样的值是糟糕的?除非你是一个系统专家,否则,你需要使用工具来自动选择合适的计数器,并根据预设的临界值设置警告。理想情况下,该工具不应只是能够根据行业标准设置计数器和临界值,而同时应该能够根据你的特定要求提供自定义设置。
结果相关性对有效结果分析很重要。利用该功能,对基础架构性能计数器提供的应用程序响应次数和错误数据进行相关性分析,你可以确定导致性能问题的原因。例如,如果你看到池容量占用率达到 100% 的警告,而同时发现响应次数陡增,你就找到了响应时间问题的根源:池的容量大小还是默认设置的值,并没有发生改变,所以应该上调容量限制。使用相同的工具分析你用于产生性能测试的监测数据,能保证在寻找性能问题的根源时更快速地找到相关性事件,最终提高工作效率。
随着越来越多的公司在因特网上发布关键型应用程序,在正式上线之前对这些 web 应用程序在不同负载下的性能测试已经变得愈发重要。因为 Silverlight 提供了扩展的能力,以帮助开发支持企业组织需求、功能强大的新型应用程序,该技术不同于其它技术,所以需要有新的负载测试方法。想要搞清楚的你应用程序在 Silverlight 生产环境中如何能够正常运行,以及如何优化它们以提高性能,你不能只是模拟单个用户的活动,还要能够模拟多个用户同时进行的活动。通过遵循本文中的建议,企业组织能够快速调整他们的测试方法论以应对 Silverlight 应用程序,比以前更加容易和快速地进入市场,提高生产力并节约成本。
关于作者
Rebecca Clinard 是来自 Neotys 的高级性能工程师,负责为 web 应用程序提供负载测试软件。在此之前,Clinard 在 Bowstreet、Fidelity Investments、Bottomline Technologies 以及 Timberland 公司担当 web 应用程序性能工程师。她的经验横跨零售、金融服务、保险以及制造业。Clinard 的专业技能在于根据行业标准创建实际的负载测试,再现生产环境性能场景,以及对多层部署进行性能调试。
Clinard 从 2001 年开始组织和领导性能测试。她毕业于新罕布什尔大学,获得理学士学位,并持有伍斯特理工学院 UNIX 认证。
查看英文原文: Three Tips to Successfully Load Test Microsoft Silverlight Applications
感谢侯伯薇对本文的审校。
给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。
评论