Microsoft Application Center Test Web服务器负载测试软件 Microsoft Application Center Test
Microsoft Application Center Test 的用途 Application Center Test 是专门为对 Web 服务器进行应力测试和分析 Web 应用程序(包括 Active Server Pages (ASP) 及其所用的组件)的性能和可伸缩性问题而设计的。 Application Center Test 通过与服务器建立多个连接并快速发送 HTTP 请求来模拟成员众多的一组用户。 Application Center Test 支持多种不同的身份验证方案和 SSL 协议,非常适用于测试个性化的安全站点。 尽管 Application Center Test 的主要用途是进行持续时间长、高负载的应力测试,但可编程的动态测试对功能测试同样非常有帮助。 Application Center Test 与所有使用 HTTP 协议的 Web 服务器和 Web 应用程序兼容。
Microsoft Application Center Test 的功能 允许创建并管理用户和 cookie 信息 是 与 Visual Studio .NET IDE 集成 支持 SSL 安全性和多种身份验证方案 存储测试数据供以后比较和绘图 创建到 Web 服务器的可配置同时连接数 支持通过录制 Microsoft Internet Explorer 浏览器会话创建测试 支持在测试运行过程中使用不限数量的协同 ACT 客户端 否 复制实际网络通信量的速度和错误
压力测试环境 若要获得最准确一致的测试结果,请考虑下列建议: 测试环境应只包含开发或测试用 Web 服务器。 所有与测试无关的网络活动都应降到最低程度。避免在同一测试环境中同时运行多个测试。 对于应力测试,应创建足够的负载,使 Web 服务器的处理器使用率至少达到 80%。 应使用速度快的网络组件,并避免使用 HTTP 代理服务器。应力测试依赖于负载级别的增加,直到 Web 服务器或 Web 应用程序成为瓶颈并阻止负载级别进一步增加为止。如果系统的任何部分比 Web 服务器或 Web 应用程序速度慢,则不可能度量 Web 服务器或 Web 应用程序的最大容量。即使增加测试负载级别也不会解决这个问题。
设置全局 ACT 属性 配置用户和用户组 创建用户组 创建用户并将其添加到组 从数据文件导入用户 编辑 Cookie
创建 ACT 项目并设置其属性 创建项目 设置项目属性 设置测试服务器选项 设置项目的代理选项 设置项目的套接字超时选项 设置项目的调试选项
创建测试 使用新建测试向导创建测试 创建动态测试 创建空动态测试 录制浏览器活动 Test 对象模型参考
动态测试 动态测试由在运行测试期间向 Web 服务器发送请求的脚本组成。由于请求顺序、被请求的 URL 以及其他属性是在测试运行时确定的,因此这些测试称为“动态测试”。测试中的代码可以先检查服务器的前一响应,再创建下一请求的属性。 必须具有 VBScript 或 JScript 语言的编程技巧。由于大多数请求的行为由脚本控制,因此需要了解 HTTP 协议。如果您的测试要模仿某一特定的 HTTP 用户代理(而不是运行在个人计算机上的公用 Web 浏览器)的行为,需要了解该用户代理是如何工作的。 注意,动态测试必须在 Application Center Test 用户界面内运行。这是必需的,因为负责跟踪和管理请求属性(如 HTTP 头和用户 cookie)的是程序而不是测试脚本。
动态测试请求特征、测试特性 动态测试中每个请求的所有属性几乎都可以进行设置。 请求顺序由测试的源代码确定。某些情况下,可以根据服务器的先前响应或在测试运行过程中可监控的其他条件,来决定根本不发送特定请求。 尽管大多数连接、请求和用户属性由脚本进行控制,但在“测试”属性对话框中设置动态测试的测试属性的方法与设置其他测试类型的方法相同。 注意,动态测试的负载级别是通过更改浏览器的同时连接数来控制的。所以无法指定动态测试每秒所使用的目标请求数。
设置测试属性 设置负载级别 设置测试持续时间 添加用户组 添加和配置性能计数器 设置高级动态测试属性
设置负载级别 Application Center Test 可以打开多个与 Web 服务器的连接,并可以在每个连接上发送请求。使用多个连接可以模拟同时有多个用户访问 Web 服务器的情况。
设置测试持续时间 准备时间 测试运行持续时间 迭代运行特定次数
添加用户组 必须在项目级别创建新用户组和用户
添加和配置性能计数器 性能计数器数据用于确定测试客户端或 Web 服务器到达其 CPU 最大使用率的时间。如果 Web 应用程序的性能瓶颈并非服务器 CPU,则使用性能计数器是确定瓶颈位置的最佳方式。
ACT 客户端的性能计数器 对象 性能计数器 说明 Processor % Processor Time/_Total 测试客户端的处理器使用情况 Memory Available Bytes 测试客户端的可用内存量。 Network Interface Bytes Total/sec 进出测试客户端的网络流量。
Windows 2000 和 IIS 5 的性能计数器 对象 计数器 说明 Active Server Pages Requests Queued 该计数器应保持接近 0。超过 IIS 队列长度会出现“服务器太忙”错误。 Memory Available Bytes 可用的剩余物理内存量。IIS 基本占用 2.5 MB,每个附加连接将在此基础上占用 10 KB 左右。 Network Interface Bytes Total/sec 将该值与总可用带宽进行比较便能清楚地看到潜在的网络瓶颈。一般要求保持在总可用带宽的 50% 以下。 Processor % Processor Time (_Total instance) 这是查看处理器饱和状况的最佳计数器。显示所有 CPU 的线程处理时间。如果一个或多个处理器的该数值持续超过 90%,则表示此测试的负载过于沉重。
设置高级动态测试属性 如果使用详细结果选项,报告中将包括有关测试中所请求的每个页面的信息。如果不使用详细结果选项,将计算并保存测试运行的平均值,但报告中不保存页面级别信息。
关于用户 自动生成的用户 为测试分配的用户组中的用户 如果不需要存储测试运行过程中创建和使用的 HTTP cookie,Application Center Test 在测试过程中可以根据需要自动生成用户。 如果测试的用户数太少,为测试运行创建的负载无法达到指定的负载级别,会导致一些潜在的问题,而自动创建用户可以避免这类潜在问题。 为测试分配的用户组中的用户 如果要求身份验证,或者希望查看或再次使用 cookie,必须在“测试属性”对话框中创建并选中用户和用户组。 可以分别设置这些用户的名称、域和密码。
动态测试中的用户 用户信息可以来自与测试属性关联的用户和用户组。每次调用 Test.GetNextUser 方法时都会检索新用户。 使用上述两种方法中的任何一种方法获得 User 对象之后,可以明确修改可读/写的 User.Name 属性和 User.Password 属性。名称和密码的更改将只在 User 对象的生存期内有效。并且不会更改通过其所属的用户组进行下次迭代、或者测试的下次迭代所采用的用户的名称和密码。
运行测试 启动测试 查看和解释实时图表 在测试完成之前停止测试 完善与修改测试
启动测试 手动启动测试 启动和计划无人参与的测试
术语表 每秒请求数 (RPS) 末字节响应时间 (TTLB) 首字节响应时间 (TTFB) 每秒发送的请求数,不包括多次发送的请求(例如,由于 Web 服务器要求身份验证)。 末字节响应时间 (TTLB) 度量末字节的响应时间,指向服务器发送请求与接收到响应的最后一个字节之间的时间。 首字节响应时间 (TTFB) 度量首字节的响应时间,指向服务器发送请求与接收到响应的第一个字节之间的时间。
动态测试 使用 Test 对象模型编写脚本进行的测试。 Test 对象模型是 Application Center Test 用于向 Web 服务器发送请求的 HTTP 客户端的接口。 与其他 HTTP 客户端不同,该对象模型允许脚本使用编程逻辑来控制测试的细节。动态测试可以根据服务器的响应或服务器性能的度量数据采取相应的措施。
Test 对象模型 Test 对象 Connection 对象 Cookie 对象 Cookies 对象 Header 对象 Headers 对象 Request 对象 Response 对象 User 对象
Test 对象 方法 说明 CreateConnection 新建与服务器的连接。 CreateRequest 创建可以使用 Connection.Send 方法发送的新 Request 对象。 GetCurrentUser 获取测试的当前用户。 GetGlobalIndex 获取在测试的两次迭代之间存储的全局索引变量的值。 GetGlobalVariable 获取先前分配的全局变量或新建全局变量(如有必要)。 GetNextUser 获取测试的下一用户对象,并使其成为活动帐户。 IncrementGlobalIndex 增加或减小全局索引变量的值。 SendRequest 向服务器发送 URL 请求,并返回服务器响应。 SetGlobalIndex 设置在测试的两次迭代之间存储的全局变量的值。 SetGlobalVariable 设置在测试的两次迭代之间存储的全局索引变量。 Sleep 将测试暂停指定的毫秒数。 StopTest 停止当前测试。 Trace 向 ACTTrace.log 文件中添加条目。
Connection 对象 属性 说明 IsOpen 检查连接是否打开。 Port 获取连接所用的端口号。 RedirectDepth 获取或设置后续的 HTTP 头重定向数目。 Server 获取客户端所连接服务器的主机名或 IP 地址。 UseSSL 检查客户端和服务器之间的 HTTP 连接是否使用 SSL 协议 (https://)。 方法 说明 Close 断开打开的连接。如果连接已断开,不会返回错误。 Send 向服务器发送 HTTP 请求。
Cookie 对象 属性 说明 Expires 获取 cookie 的失效时间。 Name 获取 cookie 的名称。 Path Value 获取或设置 cookie 的值。
Cookies 对象 方法 说明 Add 向集合添加 Cookie。 Remove 从集合中删除 Cookie。 RemoveAll 属性 说明 Count 获取集合中 Cookie 对象的数目。 Item 从集合中返回 Cookie 对象。
Header 对象 属性 说明 Name 获取或设置头名称。 Value 获取或设置头值。
Headers 对象 方法 说明 Add 向集合添加新头。 Remove 删除集合中的 Header 对象。 RemoveAll 属性 说明 Count 获取集合中头的数目。 Item 获取集合中的某个 Header 对象。
Request 对象 属性 说明 Body 获取或设置 HTTP 请求正文。 CodePage 获取或设置请求正文的代码页。 EncodeBody 获取或设置 ACT 是否自动对请求正文进行 URL 编码。 EncodeQueryAsUTF8 获取或设置 ACT 是否自动对请求的查询字符串进行 UTF-8 码。 Headers 获取 HTTP Headers 集合对象。 HTTPVersion 获取或设置 HTTP 版本。 Path 获取或设置 HTTP 路径。 ResponseBufferSize 获取或设置用于存储响应正文的缓冲区大小。 Verb 获取或设置 HTTP 方法动作。
Response 对象 属性 说明 Body 获取 HTTP 响应的正文。仅返回存储在响应缓冲区中的正文部分。 BytesRecv 获取客户端接收到的响应中的字节数。 BytesSent 获取在 HTTP 请求中发送的字节数。 CodePage 获取或设置用于设置 HTTP 响应正文的代码页。 ContentLength 获取响应正文的大小(以字节为单位)。 Headers 获取响应中头的集合。 HeaderSize 获取所有响应头合并后的大小(以字节为单位)。 HTTPVersion 获取发出该响应的服务器使用的 HTTP 版本。 Path 获取请求的路径。 Port 获取请求所用的服务器端口。 ResultCode 获取服务器的响应状态代码。 Server 获取发送响应的服务器名称。 TTFB 获取在接收到响应的第一个字节前花费的毫秒数。 TTLB 获取在接收到响应的最后一个字节前花费的毫秒数。 UseSSL 检查服务器和客户端是否使用 SSL 连接进行请求和响应。
User 对象 属性 说明 Cookies 获取指定域的用户的 Cookies 集合。 Name 获取或设置用户的名称。 Password 获取或设置用户的密码。
举例 Exp1 exp2 exp3