65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 StresStimulus 进行网站负载测试,第 2 部分 - 高级功能

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.88/5 (7投票s)

2011年12月12日

CPOL

21分钟阅读

viewsIcon

32917

downloadIcon

286

讨论 StresStimulus 的高级功能,包括参数化和 NTLM 授权

本系列

引言

本两部分系列中的第 1 部分展示了 StresStimulus 1.0 的功能以及如何开始运行负载测试。在第 2 部分中,我们将深入探讨 StresStimulus 的更高级功能,例如参数化。

目录

如果您喜欢本文,请投它一票

分步增加负载

在负载测试期间,分步增加负载通常很有用。这样可以更容易地找出您的站点在何种负载下开始出现问题。您会先施加少量负载一段时间,然后以更大的负载运行一段时间,依此类推,直到达到最大负载。

要实现这一点

  1. 点击 测试配置 下的 负载模式
  2. 选择 分步负载
  3. 选择测试应开始的虚拟用户数量,每个步骤虚拟用户的增加量,每个步骤应持续的秒数,以及最大虚拟用户数量。

    设置这些数字时,请记住达到最大负载所需的时间。如果您有 9 个步骤,每个步骤 5 秒,那么 StresStimulus 最终开始施加最大负载之前将需要 9 x 5 秒 = 45 秒。

  4. 点击 开始调试开始测试 按钮开始测试。

思考时间

当真实用户访问您的站点时,他们会花时间阅读您的说明,决定下一步做什么等等。为了模拟这种情况,您可以让虚拟用户暂停一段时间,包括在页面请求之间和迭代之间。

要设置思考时间,展开 测试配置,然后点击 思考时间

您会获得以下选项来设置页面请求之间的思考时间(全部以秒为单位)

  • 使用记录的思考时间 - 虚拟用户使用的思考时间与您记录测试用例时相同。如果您认为您的思考时间代表了您网站访问者的典型思考时间,这是一个不错的选择。或者您可以在录制时稍微暂停更长时间,以模拟那些不熟悉您网站的访问者。此选项的优点是您可以为每个页面改变思考时间。
  • 使用恒定思考时间 (仅限 Pro 14 天试用版和 Pro 付费版) - 如果您决定您的访问者平均在测试用例的每个页面上花费相同的思考时间,这将是最简单的选项。
  • 不使用思考时间 (仅限 Pro 14 天试用版和 Pro 付费版) - 允许您尽可能多地向您的网站发送流量。您将使用此选项来查找由高负载引起的错误,而不是模拟预期流量。

还有两个与思考时间相关的选项

  • 迭代之间的思考时间 (秒) - 允许您在迭代之间添加额外的思考时间。
  • 总迭代时间 (秒) (仅限 Pro 版本) - 这个巧妙的功能使比较您网站不同版本的性能变得更容易。

    假设您已经测试了您网站的原始版本,现在您正在测试一个更快的新版本。您想知道它对虚拟用户的请求响应速度有多快。问题在于,由于网站响应速度更快,虚拟用户会发送更多请求,从而对网站造成更大的负载。结果,性能改进似乎比实际的要小。

    为了解决这个问题,将 总迭代时间 (秒) 设置为第一个较慢版本的平均迭代时间。这样,较快版本将接收与较慢版本相同的负载,因此您可以比较两者之间的平均响应时间。

设置预热期

在负载测试开始时,您的网站不太可能以最高速度运行,因为 Web 服务器仍在填充其缓存。您希望将这种暂时的缓慢排除在测试结果之外,否则它们会低估您的网站在正常运行期间的性能。

为了实现这一点,您可以为测试设置一个预热持续时间。这样,当您开始测试时,StresStimulus 首先会在您设置为预热持续时间的秒数内施加负载,而不跟踪您网站的性能。预热期结束后,它才开始真正的测试,此时它会跟踪您网站的性能。

要设置预热持续时间

  1. 测试配置 下,点击 测试持续时间
  2. 测试完成标准 设置为 运行持续时间达到最大用户数
  3. 您现在可以将 预热持续时间 设置为预热期应持续的秒数。

旧浏览器,慢速网络

如果您的许多访问者仍然使用旧版浏览器,例如 IE6,或慢速网络连接,例如拨号上网,您需要在确定您网站的响应时间时考虑到这一点。

设置模拟浏览器

当 StresStimulus 运行负载测试时,每个虚拟用户实际上都使用模拟浏览器访问您的网站。它模拟的浏览器类型会影响您的网站在负载测试期间的性能。例如,当 IE6 加载页面上的图像时,它每个域只并发加载 2 张图像。更现代的浏览器至少并发加载 6 张图像,这可能意味着更快的页面加载时间。

要设置 StresStimulus 模拟的浏览器类型

  1. 测试配置 下,点击 浏览器类型
  2. 选择要模拟的浏览器。

设置模拟网络

要模拟慢速拨号连接

  1. 测试配置 下,点击 网络类型
  2. 选择要模拟的网络连接。局域网 将是最快的,拨号 56k 将是最慢的。

参数化

您的网站可能有在线表单,例如注册表单或登录表单。您的服务器必须处理这些表单。当您对包含这些表单的页面进行负载测试时,您会希望虚拟用户在这些表单中输入真实的值,以便您获得反映您的网站上线后性能的测试结果。

当您通过访问页面和提交表单来创建测试用例时,Fiddler 不仅会记录您访问了哪些页面,还会记录您提交的表单值(如果您留空字段,则值为一个空字符串)。但是,如果您依赖此功能,在负载测试期间,所有虚拟用户将始终在表单中输入完全相同的值,这不是很真实。在一个用户必须输入唯一用户名的注册表单中,这将根本不起作用。

为了解决这个问题,StresStimulus 支持参数化。这允许您设置一个文件,其中包含您希望虚拟用户在多次表单提交中输入到表单字段中的值。让我们一步一步地看看这是如何工作的。

单页面,多值

为了简化起见,让我们从一个包含单个表单的测试用例开始。它有一些文本框、单选按钮和一个复选框。我们将让单个虚拟用户提交该表单 10 次。它将从输入文件中获取要放入表单中的值。

步骤 1:创建输入文件

StresStimulus 要求输入文件是 CSV(逗号分隔值)文件。这是一个文本文件,所有值都用逗号分隔——因此得名。要查看它的样子,请查看本文附带的下载文件中的 parameterization1.csv 文件,并用您喜欢的文本编辑器打开它。

如果您有 Microsoft Excel 或其他电子表格程序,例如免费的 OpenOffice 中的程序,您可以使用它来创建 CSV 文件。将以下数据输入到电子表格中,然后使用 另存为 将其保存为 CSV 文件

文本框1 文本框2 单选 复选框1
值1a 值2a    
值1b 值2b 单选按钮1
值1c 值2c 单选按钮2  
值1d 值2d 单选按钮3
值1e 值2e    

此文件的第一行是标题。您可以使用任何您喜欢的标题,但实际上,使用虚拟用户将输入值的控件名称是最简单的。

在这个简单的第一个例子中,每一行都包含要输入到表单中的所有值。它们将按顺序使用 - 虚拟用户第一次提交表单时,将使用第一行中的值。虚拟用户第二次发送表单时,将使用第二行,依此类推。当行用完后,将再次使用第一行,依此类推。

步骤 2:创建测试用例

执行以下步骤以创建一个提交单个表单的新测试用例

  1. 关闭所有经常产生流量的网站,例如您最喜欢的报纸、Gmail 等。这样,它们就不会干扰测试用例的创建。
  2. 切换到 Fiddler 并删除左侧窗格中的所有会话:点击 编辑 | 删除 | 所有会话
  3. 运行本文下载中找到的测试站点。您会在主页上找到一个表单。您可以将文本框留空,但请选中一个单选按钮和复选框。否则,当您提交表单时(根据 HTML 标准),浏览器不会发送它们,StresStimulus 也不会知道它们在那里。
  4. 点击 发送表单 按钮将表单提交到服务器。
  5. 切换回 Fiddler。您会在左侧窗格中看到两个会话:您第一次打开页面时的初始请求,以及您点击 发送表单 按钮提交表单的后续请求。参数化仅适用于表单提交,因此您需要将第二个请求转换为测试用例。
  6. 点击左侧窗格中的第二个会话以将其选中。
  7. 在 StresStimulus 窗格中,点击 测试用例(在功能树的顶部)。
  8. 点击 设置测试用例 按钮中的下拉菜单,然后选择 设置包含选定会话的测试用例
  9. 如果 StresStimulus 询问是否覆盖现有测试用例,请确认。您现在已经创建了一个包含单个在线表单的测试用例。

步骤 3:加载输入文件

在使用输入文件中的值之前,您必须先加载它。

  1. 展开 测试用例,展开 参数化,然后点击 数据源
  2. 点击 添加 按钮添加文件 parameterization1.csv - 您可以在本文下载中找到该文件。您会看到文件内容出现在底部窗格中。

步骤 4:将输入文件绑定到表单字段

要将输入文件中的值与表单上的文本框、单选按钮和复选框相关联,请执行以下步骤

  1. 点击 请求(紧邻 数据源 下方)。
  2. 您应该会看到一个带有表单字段的网格。如果没有,请确保您在左侧窗格中选择了第二个会话。
  3. 选择数据源 列中,为文本框、单选按钮和复选框选择 parameterization1。如您在此处所见,您可以加载多个 CSV 文件(使用上一步中的 添加 按钮),并将不同的字段绑定到不同的 CSV 文件。您可能希望稍后尝试一下。
  4. 选择字段 列中,选择包含每个表单字段值的列的标题。
  5. 最后,在 数据绑定 列中,将所有输入字段设置为 顺序。这样,虚拟用户第一次提交表单时,将使用输入文件中的第一行。虚拟用户第二次提交表单时,将使用第二行,依此类推。如果您选择 随机,则将随机选择行。VU_Bound 选项将在下文讨论。
  6. 完成!您现在已将输入文件绑定到在线表单,从而创建了一个参数化负载测试。请务必点击 StresStimulus | 保存测试 来保存您的工作。

步骤 5:运行参数化负载测试

为了更容易解释结果,让我们使用一个虚拟用户和 10 次迭代来运行这个第一个参数化负载测试

  1. 展开 测试配置 并点击 负载模式。选择 恒定负载 并将虚拟用户数设置为 1。
  2. 同样在 测试配置 下,点击 测试持续时间。选择 迭代次数 并将其设置为 10。
  3. 点击 开始测试 按钮开始负载测试。

步骤 6:检查跟踪

是时候检查 StresStimulus 是否真的使用了输入文件中的值了

  1. 返回测试站点,点击页面底部的 打开跟踪日志 链接。跟踪页面将在新窗口或选项卡中打开。这会跟踪服务器收到的所有请求。
  2. 您会看到跟踪页面为 StresStimulus 发送的每个请求都有一行。点击每个请求的 查看详细信息 链接。
  3. 比较服务器为每个表单字段收到的值与输入文件中的值。它们应该相同。

多页面参数化

现在我们已经了解了如何使用仅包含单个页面的测试用例进行参数化,接下来让我们将其扩展到多个页面。为了简单起见,以下示例仅使用两个页面,即默认页面和一个非常简单的登录页面,其中包含用户名和密码文本框。然而,无论您的测试用例中有多少个页面,其原理都是相同的。

步骤 1:创建附加输入文件

之前的输入文件 parameterization1.csv 包含默认页面的值。为了方便起见,本文的下载中包含一个名为 parameterization2.csv 的登录页面输入文件。它有这些值

用户名文本框 密码文本框
用户名-a 密码-a
用户名-b 密码-b

这个输入文件只有 2 行数据,而前一个文件有 5 行!没关系。这只是意味着 StresStimulus 每 2 次迭代后返回文件开头,而第一个输入文件是每 5 次迭代后返回。每个输入文件不需要有相同的行数。

步骤 2:创建测试用例

创建包含多个页面的测试用例与创建包含单个页面的测试用例类似

  1. 清理工作台 - 关闭所有经常产生流量的网站。然后切换到 Fiddler 并删除左侧窗格中的所有会话:编辑 | 删除 | 所有会话
  2. 再次运行测试站点。在主页上,选中一个单选按钮和复选框。点击 发送表单 按钮将表单提交到服务器。
  3. 现在点击 Login.aspx 链接打开登录页面。点击 登录 按钮提交表单。字段留空也没关系,因为它们将由虚拟用户使用 parameterization2.csv 中的值填充。
  4. 切换回 Fiddler。查看左侧窗格中的会话,您会看到
    1. 默认页面的初始请求
    2. 提交表单时默认页面的第二个请求
    3. 登录页面的初始请求
    4. 提交表单时登录页面的第二个请求

    在前面的示例中,您只将提交表单的请求包含在测试用例中,而在这里,我们将同时包含初始请求。这使得它更真实一些,也更容易。

  5. 在 StresStimulus 窗格中,点击 测试用例
  6. 点击 设置测试用例 按钮中的下拉菜单,然后选择 设置包含所有会话的测试用例。当被询问时,确认您要覆盖现有测试用例。

步骤 3:加载输入文件

您已经了解了这是如何工作的。唯一的区别是这里您加载了两个文件

  1. 展开 测试用例,展开 参数化,然后点击 数据源
  2. 如果 parameterization1.csv 不再加载,点击 添加 按钮再次加载它。然后点击 添加 加载 parameterization2.csv

    您可以通过在上部窗格(文件列表中)选择任一文件来显示其内容。

步骤 4:将输入文件绑定到表单字段

要将输入文件中的值与两个页面的表单字段关联

  1. 点击 请求(紧邻 数据源 下方)。
  2. 在左侧窗格中,选择 Default.aspx 的第二个请求(您提交表单的那个)。这将再次显示您上次看到的输入元素网格。以与上次相同的方式填写它,使用 parameterization1.csv 中的值。

    为什么要选择 Default.aspx 的第二个请求而不是第一个?在第一个请求期间,没有向服务器发送表单值——它只是一个页面本身的请求。然而,StresStimulus 只有在表单字段作为请求的一部分提交时才能发现它们,因此如果您选择第一个请求,它将找不到任何字段。但是,第二个请求确实包含表单字段(即使大多数为空),因此 StresStimulus 可以识别表单字段。

  3. 在左侧窗格中,点击登录页面的第二个请求。您会看到一个带有登录页面上表单字段的网格。在 选择数据源 列中输入 parameterization2.csv,并在 选择字段 列中输入其标题。还要设置 数据绑定 列中的字段。

  4. 完成!您现在已将两个输入文件绑定到测试用例中的两个在线表单。请务必点击 StresStimulus | 保存测试 来保存您的工作。

步骤 5:运行参数化负载测试

  1. 确保当前跟踪为空,以便在负载测试后更容易检查跟踪。在测试站点上,点击 打开跟踪日志 链接打开跟踪页面并清除当前跟踪。
  2. 在 StresStimulus 中,点击 开始测试 按钮开始负载测试。

步骤 6:检查跟踪

返回测试站点并刷新跟踪页面。点击每个请求的 查看详细信息 链接,您应该会发现登录页面确实从 parameterization2.csv 获取了其值。

为每个虚拟用户设置值

请求 页面(在 测试用例 | 参数化 下)将表单字段绑定到输入文件中的值时,您会注意到 StresStimulus 在 数据绑定 列中为您提供了三个选项

  1. 顺序 - StresStimulus 在开始新的迭代时转到输入文件中的下一行。
  2. 随机 - StresStimulus 随机选择行。
  3. VU_Bound - 行绑定到虚拟用户。

在本节中,我们将了解为什么要将行绑定到特定的虚拟用户,并了解 VU_Bound 选项的作用。

VU_Bound 选项

VU_Bound 选项对于每个用户独有的表单字段(例如用户名和密码)很有意义。在现实世界中,如果您有 21 个用户在您的网站上下订单,有些人可能会订购相同的产品,但他们都使用自己的用户名和密码。因此,告诉 StresStimulus 始终为给定虚拟用户使用相同的值是有意义的。VU_Bound 选项允许您这样做。

这在实践中是如何工作的?假设您的网站销售 10 种产品,您想模拟 21 个用户持续购买随机产品的情况。那么您可以这样设置您的参数化

  • 为产品创建一个输入文件,每个产品一行,总共 10 行(例如,下载中的 parameterization3.csv)。
  • 为用户创建第二个输入文件,每个用户一行,总共 21 行(例如,下载中的 parameterization4.csv)。
  • 在 StresStimulus 中加载这两个文件:测试用例 | 参数化 | 数据源 | 添加 按钮。
  • 在允许用户选择产品的表单中,使用 顺序随机 数据绑定将表单字段绑定到产品相关的输入文件。
  • 在允许用户输入自己信息(例如登录或注册表单)的表单中,使用 VU_Bound 数据绑定将表单字段绑定到用户相关的输入文件。

确保用户数量不能被产品数量整除。例如,20 可以被 10 整除,但 21 不能。否则,如果您使用 顺序 数据绑定,相同的虚拟用户可能会一次又一次地购买相同的产品,这不太真实。

将输入文件行分配给虚拟用户

您如何将虚拟用户分配给包含用户特定值的输入文件中的行?

答案是 StresStimulus 进行分配——第一个启动的虚拟用户获得第一行,第二个虚拟用户获得第二行,依此类推。所以您不必担心这个问题。

创建匹配的用户账户

如果您有虚拟用户使用从输入文件中获取的用户名和密码访问网站,那么在测试网站上设置具有相同用户名和密码的帐户是有意义的。

您可以手动执行此操作,但如果您使用数百个虚拟用户,这会变得有点费力。一种更简单的方法是在您的用户注册页面上运行负载测试。使用您将用于其他负载测试的包含用户名和密码的输入文件,并扩展注册表单所需的其他信息,例如姓名、电子邮件等。

在这种特殊情况下,您希望为输入文件中的每一行提交一次注册表单。如果您有 21 行,您希望将注册表单提交到服务器 21 次,每次使用不同的行。

您可以这样实现

  1. 创建一个单独的测试用例,将注册信息一次发送到服务器(在浏览器中打开注册表单,填写虚假数据并点击提交)。如果新用户注册后自动登录,您需要告知服务器作为测试用例的一部分将您注销。例如,点击注销按钮会生成一个新请求到服务器,Fiddler 会记录下来。
  2. 为确保输入文件中的每一行只使用一次,请在 测试配置 | 测试模式 页面上将 虚拟用户数 设置为 1。
  3. 测试配置 | 测试持续时间 页面上将 迭代次数 设置为输入文件中的行数。这样,一个虚拟用户将为输入文件中的每一行访问一次注册页面。
  4. 测试用例 | 参数化 | 请求 页面上将输入文件绑定到注册表单中的字段时,请使用 顺序 数据绑定。这样,一个虚拟用户将在每次迭代中转到输入文件中的下一行。

身份验证

如果您的网站位于内网,它可能使用集成 Windows 身份验证来允许用户使用其 Windows 帐户登录。为了适应这种情况,StresStimulus 虚拟用户可以使用 NTLM(一种执行集成 Windows 身份验证的常用方法)登录您的网站(仅限 Pro 版本)。

为了实现这一点,您可以在 StresStimulus 中输入一个或多个域、用户名和密码。虚拟用户在负载测试期间以循环方式使用这些信息登录您的网站。

如果您的网站使用基本身份验证,您可以使用相同的功能允许虚拟用户登录(StresStimulus 将选择正确的协议)。如果您使用表单身份验证,用户名和密码通过标准 HTML 文本框输入,因此您可以使用参数化让虚拟用户登录您的网站。

要输入域、用户名和密码列表

  1. 展开 测试用例 树并点击 身份验证
  2. 在网格中输入登录域、用户名和密码,或点击 导入 按钮从 CSV 文件导入它们。
  3. 不要忘记保存您的工作:从 Fiddler 屏幕左上角的 StresStimulus 菜单中,选择 保存测试

性能计数器

IIS(Web 服务器)和 SQL Server 有数十个性能计数器,可以显示可能出现瓶颈的地方。例如,ASP.NET/请求执行时间 计数器显示执行最近请求所需的时间(以毫秒为单位)。

您可以让 StresStimulus 在负载测试期间轮询一个或多个计数器,以便您可以看到服务器在负载下的行为。它以图形和数字形式报告计数器的值。

要实现这一点

  1. 测试配置 下,点击 其他选项
  2. 更改采样率,或者接受每 5 秒一次的默认设置。
  3. 点击 选择性能计数器 按钮选择您要跟踪的计数器。

© . All rights reserved.