三、load测试
1)概述
1、负载测试的主要目标是要模拟许多用户同时访问一台服务器的情况。
2、向负载测试添加 Web 测试时,会模拟多个用户同时连接到一台服务器并发出多个 HTTP 请求的过程。可以在负载测试上设置广泛应用于各个 Web 测试的属性。
3、向负载测试添加单元测试时,会测试非基于 Web 的服务器组件的性能。负载下单元测试的一个示例应用程序用于测试数据访问模型组件。
4、负载测试可用于一组称为 rig 的计算机,rig 由多个代理和一个控制器组成。其中Rig需要额外组件Visual Studio 2008 Test Load Agent 支持
负载测试可用于几种不同的测试类型:
—冒烟测试
确定在短时间内负载较小时应用程序如何执行。
生成 Web 测试和负载测试时,在运行任何时间长、工作量大的测试之前运行冒烟测试是一种很好的做法。在 Web 测试和负载测试中,冒烟测试时间短,工作量也小。使用冒烟测试是为了在运行性能测试或压力测试之前,确保一切都已正确配置并可按预期运行。
—压力测试
确定在较长时间内负载较大时应用程序是否能成功运行。
—性能测试
确定应用程序的响应能力。
—容量计划测试
确定在各种容量下应用程序如何执行。
负载测试由一系列 Web 测试或单元测试组成,这些测试在存在多个模拟用户的情况下运行一段时间。
2)方案
l
l
l
例如,您可能正在测试某电子商务站点,其 Internet 前端由数百位客户同时访问,这些客户的访问连接速度和浏览器都各不相同。该站点还可以具有管理功能,由内部员工用于产品更新和查看统计信息。这些内部用户通常会使用相同的浏览器和高速 LAN 连接访问该站点。您可能希望将这两种不同用户组的属性封装到不同方案中。每个方案可包含一个虚拟用户类型。在此示例中,可使一个负载测试方案表示虚拟客户,另一个方案表示网站的内部虚拟用户。在此示例中,虚拟用户表示正在浏览网站的单个用户。虚拟用户还可以是 Web 服务的使用者。
3)模式
负载模式属性指定在负载测试过程中如何调整模拟用户负载。Team Edition for Testers 提供三种内置负载模式:恒负载模式、单步负载模式和基于目标的负载模式。根据负载测试目标,选择负载模式并将属性调整到合适的级别。
负载模式
l
l
l
恒负载模式
恒负载模式用于指定在负载测试期间不发生变化的用户负载
对 Web 应用程序运行冒烟测试时,可以设置一个较小的、10 个用户的恒负载
单步负载模式
单步负载模式用于指定随时间不断增加到定义的最大用户负载的用户负载。对于单步负载,指定“初始用户计数”、“最大用户计数”、“单步持续时间(秒)”和“单步用户计数”。
注意:如果总的测试持续时间比逐步增加到最大用户负载所需的时间短,则经过测试持续时间后,测试将停止,并且不会达到“最大用户计数”目标。
基于目标的负载模式
基于目标的负载模式与单步模式相似,但它基于相对于定期用户负载调整的性能计数器阈值调整用户负载。
用户计数限制 :1-100
性能计数器的目标范围 :70-90
4)组合
应如何对测试组合进行建模
基于总测试数
测试组合模式确定在虚拟用户启动测试迭代时运行的测试。在负载测试结束时,特定测试的运行次数与分配的测试分布情况相符。当您将组合测试基于IIS日志或生产数据中的事务百分比时,请遵循此模型。
基于虚拟用户数
此测试组合模式确定将运行特定测试的虚拟用户的百分比。在负载测试的任何时候,运行特定测试的用户数都与分配的分布情况相符,当您将测试组合基于运行特定测试的用户的百分比时,请遵循此模型。
基于用户节奏
负载测试的过程中,每个测试每小时都会针对每个用户运行指定的次数。当您希望虚拟用户在整个负载测试期间以特定的节奏运行测试时,请遵循此模型。
l
l
l
1、
测试组合指定虚拟用户在负载测试方案中运行指定测试的概率。这样可以更逼真地模拟负载。应用程序中可以有多个工作流而不是仅有一个,这可以更接近最终用户与应用程序交互的方式。
向负载测试中添加一组测试之后,测试组合可像其他组合选项一样工作。虚拟用户根据在组合中指定的概率随机选择测试。例如,如果有两个测试,在组合中各占 50% 的概率,则一个新虚拟用户基本上通常会选择运行第一个测试。在 50/50 组合中,如果一个测试较长,另一个较短,则负载更多来自于较长的测试。
2、
浏览器组合指定虚拟用户在负载测试方案中运行给定浏览器类型的概率。创建一个负载测试时,可能希望模拟通过多个浏览器生成负载的情况。
浏览器组合为您提供了一种更真实地模拟负载的方法。负载使用异类浏览器组合而非单一种类的浏览器生成。这样便创建了一种与您的应用程序所用浏览器更为接近的浏览器使用情形。
3、
网络组合指定了运行某个给定的网络配置的虚拟用户的出现概率。网络配置是在应用层对网络带宽的一种模拟,但它不模拟网络延迟。
网络组合为您提供了一种更加真实地模拟负载的手段。负载是使用不同种类的网络类型组合生成的,而不仅仅是一种单一的网络类型。这样可建立更加贴近于最终用户实际的应用程序连接情况的模拟行为。
5)其他设置
l
l
l
l
一、计数器集
计数器集是一组可在负载测试运行期间用于监视的性能计数器。计数器集是负载测试的一部分,可应用于负载测试中的所有方案。计数器集按不同的技术组织在一起,例如 ASP.NET 计数器集或 SQL 计数器集。
默认情况下,在控制器和代理上收集性能计数器。
应将正在测试的服务器添加到需要收集其计数器的计算机的列表中,这样就可以在负载测试期间收集和监视任何重要的系统数据
计数器阈值是在某个特定的性能计数器上设置的一个警报,用于在负载测试运行期间通报系统资源的使用情况
有两种类型的阈值:警告和危急
计数器集定义中包含有许多关键的性能计数器的预定义阈值
负载测试工具会不断地使用计数器收集性能数据并绘制相应的图形
三种计数器类别:百分比、计数和平均数。
这三种计数器类别的例子分别为:“% CPU usage”(CPU 使用百分比)、“SQL Server lock counts”(SQL Server 锁计数)和“IIS requests per second”(每秒的 IIS 请求数)。
各个 HTTP 请求的性能数据由运行测试的计算机(如代理计算机)报告。对于请求,可以监视“Average Time to First Byte”(收到第一个字节的平均时间)、“Response Time”(响应时间)和“Requests per Second”(每秒请求数)等数据。
二、运行设置
“运行设置”是能影响负载测试的运行方式的一组属性。在“属性”窗口中,运行设置按类别进行组织。
根据负载测试的长度选择适当的采样速率。采样速率越小(如 5 秒),收集的每个性能计数器的数据就越多。长时间内收集大量的数据可能会引起磁盘空间错误。对于长的负载测试,可以提高采样速率以减少收集的数据量。性能计数器的数量也会影响收集的数据量。对于进行测试的计算机,减少计数器的数量将减少收集的数据量。
负载测试持续时间
1 - 8 小时
8 - 24 小时
> 24 小时
运行设置类别
Ø
Ø
Ø
Ø
Ø
常规
1、说明 -对运行设置的说明。
2、最多错误详细信息-已失败请求的请求与响应详细信息最大存储数。这很重要,因为详细的错误结果可能使用大量的数据库存储区。如果不想记录错误详细信息,则请使用 0 值。
3、名称 -运行设置显示在“负载测试编辑器”的“运行设置”节点中时使用的名称。
4、验证级别 -此类别定义了将在负载测试中运行的验证规则的最高级别。验证规则与 Web 测试请求相关联。每个验证规则都有关联的验证级别:高、中或低。此负载测试运行设置将指定在负载测试中运行 Web 测试时将运行哪些验证规则
结果
1、
存储在负载测试中获得的性能计数器的方式
“None”
“database” -- 需要具有负载测试结果存储区的 SQL 数据库。
2、
用于确定要在负载测试结果存储区中存储哪些详细信息
AllIndividualDetails - 在负载测试结果存储区中收集并存储在负载测试期间运行/发出的每个测试、事务和页的单个计时值。
“StatisticsOnly”- 在负载测试结果存储区中只收集并存储统计信息,而不是在负载测试期间执行/发出的每个测试、事务和页的单个计时值。
“None”- 不收集任何单个计时值。这是默认值。
SQL跟踪
1、
要由 SQL 跟踪捕获的 SQL 操作的最短持续时间。
2、
用于访问要跟踪的数据库的连接字符串。
3、
跟踪结束后放置 SQL 跟踪文件的位置。SQL Server 必须具有对该目录的写权限,控制器必须具有对它的读权限。
4、
这将启用 SQL 操作的跟踪。默认值为 off。
计时
1、
这是表示负载测试运行持续时间的值,以秒为单位。
2、
用于捕获性能计数器值的间隔。
3、
从测试开始到开始记录数据样本之间的时间段。这段时间通常用于在记录采样值之前使负载虚拟用户达到特定的负载级别。在预热期结束之前捕获的采样值将显示在“负载测试监视器”中
WebTest 连接
1、
对于在负载测试中运行的 Web 测试,此参数控制从负载测试代理到 Web 服务器之间的连接的用法
有两个 Web 测试连接模型选项
²
²
2、
这指定要在负载测试代理和 Web 服务器之间建立的最多连接数。此参数只适用于“ConnectionPool”模型。
三、思考时间
思考时间用于模拟人与网站执行的各种交互之间存在等待时间这种行为
三种设置:
Off -忽略思考时间。
如果希望生成最大负载以便对 Web 服务器进行高强度的压力测试,可使用此设置。如果试图更加真实地模拟用户与 Web 服务器的交互情况,请不要使用此设置。
On -根据记录使用思考时间。
完全根据记录模拟多个运行 Web 测试的用户。由于负载测试模拟多个用户,使用相同的思考时间会建立一种不自然的负载模式,似乎各个用户正在同步执行操作。
正态分布-使思考时间的变化情况符合正态分布曲线。
通过对不同请求间的思考时间略加修改,可更真实地模拟虚拟用户的操作。
四、结果存储区
计数器集和性能计数器数据之间有所不同。计数器集是元数据 -定义应从执行特定角色(如 IIS 或 SQL Server)的计算机收集的一组性能计数器。计数器集是负载测试定义的一部分。性能计数器数据是根据计数器集、计数器集到特定计算机的映射以及采样速率收集的数据。
查询和报告
—可以使用任何标准 SQL 查询工具对负载测试结果存储区进行查询
—可以使用任何 SQL 报告工具创建自定义报告
结果分析
—在测试运行时,可以使用负载测试监视器查看负载测试运行的结果
—完成测试之后,可以使用负载测试分析器查看负载测试运行的结果
6)运行LoadTest
负载测试可从三个位置运行
l
l
l
也可以从命令行运行负载测试
mstest /testcontainer:LoadTest1.loadtest
可以使用代理运行负载测试
通过远程控制器来运行代理机上的负载测试
7)监视与分析
l
l
l
l
l
l
监视器和分析器
—监视器用来实时查看负载测试结果
—分析器用于检查已经保存的所有负载测试结果
视图
Ø
Ø
Ø
1、
“有关测试运行的信息”一节包含有关运行的一般信息,包括测试的名称、开始时间和结束时间以及运行测试的控制器。此节还包含有关运行的可选说明,这些说明是您在运行负载测试时添加的。
整体结果
“整体结果”一节包含测试的摘要结果,包括每秒钟的请求数、失败请求的总数、平均响应时间以及平均页面时间。
关键统计信息: 最慢的 5 个页面
“最慢的页面”一节包含负载测试中最慢的 5 个页面。此节显示每个页面的 URL 和平均页面加载时间。这些页面按降序列出。您可以单击某个页面的 URL 打开“页”表,以查看该页面的更多详细信息。
关键统计信息: 最慢的 5 个测试
“最慢的测试”一节包含负载测试中最慢的 5 个测试。此节显示每个测试的测试名称和平均测试时间。这些测试按降序列出。您可以单击某个测试的名称打开“测试”表,以查看该测试的更多详细信息。
关键统计信息: 最慢的 5 个 SQL 操作
如果在负载测试中启用了 SQL 跟踪,“最慢的查询”一节将包含负载测试中最慢的 5 个查询。此节显示每个测试的操作名称和持续时间。持续时间以微秒 (SQL Server 2005) 或毫秒(SQL Server 2000 和更高版本)显示。这些测试按持续时间以降序列出。您可以单击某个操作的名称打开“SQL 跟踪”表,以查看该操作的更多详细信息。
测试结果
“测试结果”一节包含负载测试中所有测试和方案的列表。此节显示测试的名称、方案、运行的次数、失败的次数以及平均测试时间。您可以单击某个测试的名称打开“测试”表,以查看该测试的更多详细信息。
页结果
“页结果”一节包含负载测试中所有网页的列表。此节显示 URL、方案、测试的名称、平均页面时间以及计数。您可以单击某个页面的 URL 打开“页”表,以查看该页面的更多详细信息。
事务结果
“事务结果”一节包含负载测试中所有事务的列表。此节显示事务名称、方案、测试、响应时间、运行时间和计数。您可以单击某个事务的名称打开“事务”表,以查看该事务的更多详细信息。
测试中系统的资源
“测试中系统的资源”一节包含一个计算机列表,这些计算机是为其生成负载的一组目标计算机。除代理或控制器之外,这些计算机还包括您从中收集计数器集的任何计算机。此节显示计算机名称、处理器时间百分比 (%) 和可用内存。您可以单击某个计算机名称打开“测试中的系统”图形,以查看不同时间的资源使用量。
控制器和代理资源
“控制器和代理资源”一节包含用于运行测试的计算机列表。此节显示计算机名称、处理器时间百分比 (%) 和可用内存。您可以单击某个计算机名称打开“控制器和代理”图形,以查看不同时间的资源使用量。
错误
“错误”一节包含负载测试期间发生的所有错误的列表。此节显示错误类型和子类型、计数以及最后一条消息。您可以单击某个错误打开“错误”表,以查看该错误的更多详细信息。
2、
关系图名称 | 说明 |
关键指示器 | 用于描述测试性能的基本情况(如用户负载、吞吐量和响应时间)的计数器。 |
测试响应时间 | 有关运行测试所用时间的数据。 |
页响应时间 | 负载测试期间访问的网页的平均响应时间。 |
测试中的系统 | 有关运行所测试的应用程序的计算机的信息。其中包括有关内存使用、处理器、物理磁盘和进程的数据。 默认情况下,只收集“Available Mbytes”(可用的兆字节数)和“Processor Time”(处理器时间)计数器。 |
控制器和代理 | 有关运行负载测试的计算机的信息。其中包括有关内存使用、处理器、物理磁盘和进程的数据。 默认情况下,只收集“Available Mbytes”(可用的兆字节数)和“Processor Time”(处理器时间)计数器。 |
事务响应时间 | 负载测试期间发生的事务的平均响应时间。 |
3、
表选项:
错误-显示在运行期间创建的错误列表。
页 -显示在运行中使用的页列表。
请求 -显示在运行期间发送的所有 HTTP 请求。其中包括从属请求,如图像。
测试 -显示负载测试中使用的测试列表。
阈值 -显示运行期间超过的阈值的列表。
事务 -显示运行中的事务列表。
SQL 跟踪 -只有在使用 SQL 跟踪时,才可在运行后的分析器中看到该选项。
例如,阈值表
阈值设定
在负载测试中显示阈值冲突时,可以在两种阈值规则中进行选择:
比较常数-将性能计数器的值与一个常数值进行比较。
例如下图:
比较计数器-将一个性能计数器的值与另一个性能计数器的值进行比较。
可以设置一个“警告阈值”级别,当达到该警告级别时,负载测试监视器和分析器中便会出现一个指示此警告的黄色符号。
可以设置一个“致命阈值”级别,当达到该警告级别时,负载测试监视器和分析器中便会出现一个指示此警告的红色符号。
新建比较常数
阈值结果分析
阈值表信息
计数器树显示了阈值冲突。如果当前的采样间隔内发生了阈值冲突,则除了节点名称外,您还会看到一个红色的符号或一个黄色的符号
阈值网格显示了前 1,000 个阈值冲突,包括发生冲突的时间。
可以找到一个超出阈值的计数器,并通过把符号拖动到关系图上的方式来绘制该计数器。
通过该图,我们可以知道,FSI系统的用户添加功能的GC(垃圾回收)存在严重超时问题。可能原因是对象实例没有及时释放。举一反三,其他模块可能也存在类似的功能。
SQL跟踪
设定如下:
通过收集跟踪数据,可以识别出在所测试的 SQL 数据库中运行速度最慢的查询和存储过程。单击“表”按钮。从“表”列表框中选择“SQL 跟踪”。
SQL 跟踪面板将列出运行速度最慢的 SQL 操作,并根据持续时间按照最慢的操作放在最上面的方式来排序。
此面板上可以显示的 SQL 跟踪输出中的数据列:
²
²
²
²
²
²
²
²
²
²
²
²
设定的d:\根目录下生成对应的文件,见下图:
可以通过SQL Profiler 工具打开该文件,见下图。
添加负载测试类功能
负载测试提供了命名空间,Microsoft.VisualStudio.TestTools.LoadTesting
我们完全可以通过编程,来实现自己想要添加的功能。
例如:我们可以在完成负载测试后发送邮件通知测试者。