对于一个多用户的应用程序,性能是非常重要的。性能不仅是执行的速度,它包括负载和并发方面。Visual Studio是可以用于性能测试的工具之一。Visual Studio Test版或Visual Studio 2010旗舰版为自动化测试提供了支持。
介绍
对于一个多用户的应用程序,性能是非常重要的。性能不仅是执行的速度,它包括负载和并发方面。性能测试是对以下问题的回答
- 我们如何确保我们的新的应用程序将支持预期的用户负载?
- 如何避免在实际负载条件下会出现的问题?
- 如何确定响应时间?
- 如何规划的容量?
Visual Studio是可以用于性能测试的工具之一。Visual Studio Test版或Visual Studio 2010旗舰版为自动化测试提供了支持。
这将是一系列文章的第二部分。
-
Part I: Web测试和配置
-
Part II:负载测试,RIG和负载测试术语。
-
Part III:性能,负载测试结果分析。
负载测试(Load Test)
Load test 用于执行程序的负载测试。它可以模拟多个虚拟用户并执行测试脚本,以模拟真实用户在不同的服务器,如应用服务器,数据库服务器和Web服务器的负载。Load test可以使用任何的测试脚本。
术语说明
Think Time
Think Time是两个请求之间的时间。这可能是用户填写表单,浏览页面,或阅读一些文字等时花费的时间。Think Time用于模拟在真实用户的场景下,系统如何和一个真实用户的交互。
Constant Load (恒定负载)
Constant Load是指从测试开始到结束,有恒定数量的用户不间断地操作该网站。比如在1个小时的时间内,有25个用户正在使用该系统。所有25个用户不断地访问该系统。这种测试类型主要用于压力测试。
Step Load(阶跃负载)
在Step Load中,用户将阶梯式地加入。就是说在不同时期有不同的用户操作系统,并且用户的数量也不是恒定不变的。在Step Load模式下需要指定如下参数:
-
- Start user count: - 测试开始时,有多少用户操作该系统
- Step duration:- 每隔多少秒后下一批用户将加入该系统
- Step user count:- 一个阶梯时间段后,多少个用户将加入系统
- Maximum user count:- 最大的用户数是多少。
测试组合(Test Mix)
测试组合指定不同的场景在系统中如何被执行或使用。不同的测试组合的设定是通过对系统使用情况的研究来形成的。
例如,如果我们在做某网站的负载测试,约60%的人会进行产品搜索,30%会买一些产品和10%会把产品保存为书签。根据这种使用情况的信息,就可以形成一个测试组合:60%的模拟用户将执行搜索脚本,30%将执行购买产品的脚本,其余的10%将执行把产品保存为书签的脚本。
负载测试的创建
在项目上点击鼠标右键,选择Add- >New Test - >Load test模板。这将打开新的负载测试向导
接下来,指定场景的名称,如"booking the ticket","searching a book"等。接下来指定Think Time profile。我们可以使用Web测试中记录的录制的的Think Time,也可以使用时间正态分布的Think Time。我们还可以使用第三个选项来避免使用Think Time。
接下来,指定负载模式。指定我们是否要使用constant load还是step load模式。在constant load模式中指定用户数。在step load的情况下,指定start user count,step duration,step user count和maximum user count。
接下来,指定测试组合模式。提供的不同的选项有:[下面的定义来自Visual Studio]
基于总测试数(Base on the total number of tests)确定虚拟用户启动测试迭代时运行哪个 Web 性能或单元测试。 在负载测试结束时,运行特定测试的次数与分配的测试分布相匹配。 使测试组合基于 IIS 日志或生产数据中的事务百分比时,可使用此测试组合模型。
基于虚拟用户数(Based on the number of virual users)
确定将运行特定 Web 性能或单元测试的虚拟用户的百分比。 在负载测试中的任何时候,运行特定测试的用户数都与分配的分布情况相符。 使测试组合基于运行特定测试的用户的百分比时,可使用此测试组合模型。
基于用户节奏(Based on user pace)
在负载测试过程中,每个用户每小时运行每个 Web 性能测试或单元测试指定的次数。 如果希望虚拟用户在负载测试过程中以特定节奏运行测试,则可使用此测试组合模型。
基于顺序测试顺序(Based on sequential test order)
每个虚拟用户按照在方案中定义测试的顺序运行 Web 性能测试或单元测试。 虚拟用户以此顺序持续循环进行测试,直到负载测试完成为止。
(译者:简单来说,第一种配置每个虚拟用户每次执行的脚本都是随机的,所有用户执行的脚本总数的比例是确定的;第二种配置每个用户都执行固定的一个脚本,所有用户执行的脚本的总数的比例是确定的;第三种指定每个脚本在一个小时内需要运行的次数,客户端只需要完成这些工作量;第四种每个用户都循环地顺序地执行每个脚本)
接下来,指定测试组合。在测试组合中,我们将添加多个Web测试脚本到负载测试中。如果我们只有一个脚本,所有用户都将执行相同的任务。如果我们有2个或更多的脚本,我们可以指定有多少用户需要执行特定的任务。
例如,我们有两个脚本,一个用于搜索一本书,另一个用于购买一本书。在我的负载测试中,我可以指定70%的用户做搜索,剩下的30%做另一个操作。
测试组合是模拟真实的用户体验。有些功能被很多用户用到而另一些则没有那么频繁第被使用。取决于功能的使用情况,来测试系统,这将提供一个真正的性能结果。
在下面的例子中,我们选择了两个Web测试脚本,并指定测试组合为65%的用户将执行Webtest1,35%将执行Webtest2。
接下来,指定网络组合(Network Mix)。在这里,我们可以模拟网络如局域网,广域网或互联网,并且对系统在不同网络中的性能进行比较。
接下来,指定浏览器的组合(Browser Mix)。这对于确定系统是如何在不同的浏览器中执行是非常有用的。
接下来,增加作为web服务器、应用程序服务器和数据服务器的计算机系统,用于收集性能计数。为每个系统添加所需的性能计数器。
(译者:确保你的帐号被添加到各个服务器的Performance Monitor Users组中,这样控制器才有权限访问各个服务器)
接下来,指定测试的持续时间或迭代次数。如果设置了一个预热期,负载测试会在预热期逐渐地自动增加负荷。
一旦您完成创建负载测试,它会创建一个象下面这样的.loadtest文件。从下面的界面中,我们可以直接编辑和添加的所有设置。
选择constant Load模式,并选择相应的属性。从属性面板中,我们可以改变负载模式为Constant, Step或者 Goal based。
Goal based load test(基于目标的负载测试)用于找到满足条件的最大用户负载。例如,在这里,我们设定的目标为平均响应时间应为8分钟,一旦系统达到的目标,将停止执行。同样的方法,我们可以通过使用基于目标的测试,以找到处理器利用率70%的最大负荷。
从Run Settings属性,我们可以改变的运行时间(Run Duration),网络测试连接池的大小(WebTest Connection Pool Size),网络测试连接模式(WebTest Connection Model),预热持续时间(Warm-up Duration)等。
我们可以指定计数器的阈值。一旦达到警戒水平时,它会显示警告。当它达到临界阈值时,请求将启动失败。
您可以添加自定义计数器和计数器集到计数器集合。
从Scenario的属性中,我们可以改变的思考时间配置和对应的思考时间。
执行负载测试
选择“Run Test”来执行负载测试。
一旦测试开始,你可以在下面的屏幕中观察到不同的性能计数器和测试状态。您可以拖动左侧的计数器把它放置到图形区域,这将为相应的计数器显示图形。请求汇总和测试汇总下可以在概览部分中观察到。
我们可以从表格项中观察到的请求,错误,页面,事务和其他的细节,比如失败的次数,响应时间,内容长度。
您可以更改图形显示选项,如只显示一个图形,或两个垂直图,四纵板等结果
一旦执行负载测试完成后,显示如下的汇总报告。
我们可以可以使用”Create Excel Report”来将报表导出到Excel。它创建了一个Excel报表的多个工作表来描述平均响应时间,测试运行,页面时间等, 我们可以创建两种类型的报告:-
- 趋势 - 创建一个Excel报表为选定的运行结果创建趋势图。
- 比较 - 创建一个Excel报表来比较两个或更多运行结果。
- Detail选项将允许我们在点状图中研究的测试结果。我们可以在底部区域选择一段时间,研究在特定的时期的趋势。
Rig(远程测试机组)
有时,在性能测试中,我们需要对系统进行非常高负载的测试。每台机器能够产生的负载时有限的。在一个电脑系统中,我们可以产生最多500至800个用户的负载。如果你需要更多的负载,我们需要添加多个电脑系统来执行负载测试。如果我们从多个系统中运行它,那么测试结果的分析和综合报告的创建将是困难的。
Rig是在多个客户端系统运行负载测试的解决方案。我们需要在一个系统上安装负载控制器(Load Controller)并在其他系统上安装负载代理(Load agent)。VSTS的Rig的是一组系统,它包括一个控制器和一个或多个代理。控制器将工作分配给代理,并且收集所有代理的数据,并建立一个单一的报告。
负载控制器,负载代理的安装和配置,请参考
总结
Load test可用于在系统上执行不同的性能测试。我们可以通过设置不同的测试组合,用户负载,压力条件,网络组合,浏览器和负载模式来测试系统。通过查询下SQLEXPRESS中的LoadTest或者LoadTest2010数据库,Load test会生成一个详细的报告,此外,从结果中,我们可以创建一个Excel的趋势报告或比较报告。总结报告可以保存为HTML文件。
在PartIII中,我们将研究的重要性能计数器和性能测试结果分析。