您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 其它办公文档 > Web 测试的创作与调试技术
Web测试的创作与调试技术本文面向的测试人员和开发人员,是那些想丰富有关MicrosoftVisualStudio2005TeamEditionforSoftwareTesters中Web测试功能经验的人员。返回页首简介MicrosoftVisualStudio2005TeamEditionforSoftwareTesters引入了一个全新的用于Web和负载测试的强大工具集。Web应用程序的负载测试可跨多个计算机进行并模拟成千上万个用户,但其核心则是一个Web测试集合。本文针对的读者是这样一些测试和开发人员,他们想学习更多有关创建有效的Web测试并对它们进行调试,以确保按预期方式运行的技术。返回页首记录一个Web测试了解WebTestRecorderWebTestRecorder挂钩到InternetExplorer对象模型,侦听不同的导航事件。该类记录的主要优点是,可以记录安全套接字层(SSL)和已验证身份的Web站点,而没有任何特殊的配置要求。该记录方法的另一方面是,Web测试中不记录诸如图像、级联样式表(cascadingstylesheet,CSS)文件和JavaScript文件这样的依赖请求。相反,这些依赖请求在Web测试执行过程中从HTML页中被分析出来并进行自动请求。该功能有助于Web测试能更好地还原装饰性的Web站点更改,使测试更关注于Web应用程序的实际使用。如果需要,也可以禁用该功能,方法是将请求的ParseDependentRequests属性设置为false。该记录方法的一个不足是,它可能无法记录由JavaScript(例如,在AJAX站点上)、ActiveX控件和某些类型的弹出窗口发出的请求,因为InternetExplorer无法始终引发所需的事件。在多数情况下,可手动地将丢失的请求添加回Web测试来解决这些问题,稍后将阐述这一点。插入注释在记录过程中插入注释有助于创建有效的Web测试,特别是当Web测试包含很多请求时。您应该使用注释来说明在Web测试的不同点应该采用什么逻辑操作,例如,“登录”、“将项X添加到购物车”等。当您稍后在Web测试编辑器中修改Web测试时,这些注释是非常有用的。您也可以使用注释来说明需要添加什么样的验证规则以确保Web测试成功。较之于在Web测试编辑器中查看HTTP请求列表而言,在记录并查看页面时决定需要对每个请求进行哪些验证更容易进行。谨记要记录ThinkTimeWeb测试请求的ThinkTime属性是指用户在发出下一个请求之前花在当前页的“思考”时间。Thinktime延迟用于在负载测试过程中估算实际用户的行为。由于Thinktime对Web测试可以生成的负载量会产生巨大的影响,因此在负载测试中可全面禁用它,以便将更大的负载应用到目标服务器。禁用Thinktime使您能够尽快发出对服务器的请求,而不会产生请求间的延迟。Web测试记录器在针对Web应用程序的请求进行记录时自动记录Thinktime。在记录过程中,尝试估算用户通常在每个页面上将花费的时间。当记录完成后,查看针对每个请求记录的思考时间尤为重要。无意中造成的较长思考时间会极大地影响Web测试生成请求的速率。默认情况下,Thinktime在WebTestViewer中是关闭的。因此,较长的思考时间不可能立即体现出来。当Thinktime在WebTestViewer中打开时,您将看到HTTP状态栏中显示“Thinking…[n]”,直到下一请求开始。默认情况下,Thinktime在负载测试中打开。当暂停记录并输入注释时,Thinktime计数器停止。返回页首运行并验证Web测试了解Web测试引擎有关Web测试引擎需要了解的一个关键概念是,Web测试在HTTP层工作。Web测试包含一个HTTP请求列表;这些请求主要都是由查询字符串参数、窗体参数和针对Web服务器的URL组成的。Web测试引擎执行这些HTTP请求,从服务器(一个或多个)检索响应,以及收集计时数据。由于Web测试引擎在HTTP层起作用,因此它并不直接模拟客户端脚本,例如,JavaScript或ActiveX控件。Web测试关注在服务器上生成负载。因此,只影响Web页外观的客户端脚本对Web测试而言并不重要。那些在附加HTTP请求(例如,AJAX)中设置参数值或结果的客户端脚本影响服务器上的负载,而且可能需要手动修改Web测试来模拟该脚本。本文稍后将描述这些修改类型。一个常见的误解是,由于记录发生在InternetExplorer中,因此认为Web测试必须使用InternetExplorer执行。事实并非如此。所有请求直接使用Web测试引擎执行;不发生与InternetExplorer或其他任何浏览器的交互。Web测试引擎使用标准HTTP请求/响应消息直接与目标Web服务器通讯。同样,在WebTestViewer的WebBrowser选项卡上嵌入的InternetExplorer控件只显示由Web测试引擎接收的响应页。Web测试引擎将响应写入磁盘的临时位置,然后将临时文件加载到WebTestViewer中的InternetExplorer控件。如果用于其他浏览器的页面没有在WebBrowser选项卡上中正确显示,则使用Response选项卡对其进行验证。另一个容易令人混淆的方面是,运行Web负载测试时可以选择不同的浏览器模板。这些浏览器模板只影响随每个请求发送的默认HTTP标头集。Web服务器用于确定浏览器类型的关键标头是UserAgent标头。Web测试引擎直接使用标准HTTP协议发出请求,而无论选择哪个浏览器模板。使用WebTestViewer验证Web测试在将Web测试添加到一个负载测试并进行长期运行之前,重要的是确保该测试按预期方式正常工作。这就是引入WebTestViewer的原因。WebTestViewer使您能够在运行Web测试时对其进行监视,并查看前一测试运行的所有方面。图1要验证一个新建的Web测试是否过载,只需查看该测试运行的结果并查明它是否通过。例如,对于一个不具有验证规则的Web测试而言,通过只意味着没有引发异常,没有规则失败,而且没有出现HTTP错误。对于验证而言,除了确保无错误执行外,还包括确保Web测试在目标Web应用程序上表现出正确的行为。重要的是查看每个请求的响应以确保它是正确的。下表列出验证Web测试时需要查看的项,以及有关每种问题类型的附加信息。表1要检查的问题附加信息/解决方案HTTP请求错误HTTP错误由400-599范围内的一个响应状态代码表示。通常,一个HTTP错误包含一个指示该问题原因的响应体。例如,“401Unauthorized”错误可能指示用户名和密码需要在Web测试的根节点进行配置。“404NotFound”错误可能指示Web应用程序从开始记录以来已经发生了更改。“500InternalServerError”通常指示Web应用程序中有错误。未找到依赖请求顶级请求可能由于它其中的一个依赖请求未被发现而导致失败。这可能指示Web应用程序的HTML有问题。可以通过禁用针对该请求的ParseDependentRequests属性避免这些错误。这样就防止依赖请求(例如,图像、CSS和javascript)被自动地分析为HTML并进行请求。提取和验证规则失败提取和验证规则失败在Details选项卡中显示。造成失败的原因通常是Web服务器返回了包含意外内容的页,例如,重定向到一个登录页或错误的页。提取规则失败通常引起关于后续请求的错误,例如,“XwasnotfoundintheWebtestcontext.”。测试级异常在WebTestViewer中,测试级异常显示为最后一次成功请求后的节点。测试级异常包括WebTestPlugins、PreWebTest和PostWebTest事件处理程序中的异常,以及非特定于编码Web测试中具体请求的异常。请求级异常请求级异常导致单个请求失败,但允许Web测试继续。这些异常包括从WebTestRequestPlugins、PreRequest和PostRequest事件处理程序,以及提取和验证规则引发的异常。异常消息以及堆栈跟踪(如果可用)在WebTestViewer中Details选项卡的底部显示。服务器返回的错误页内容要验证Web服务器返回正确的内容,通常在WebTestViewer的WebBrowser和Response选项卡中以可视化方式检查每个页面。在验证Web测试工作正常之后,验证规则可用于自动处理该过程。返回页首解决常见的Web测试问题Web服务器在执行过程和记录过程中的不同响应在理想情况是:您会将一组请求记录到Web应用程序,运行该Web测试,从服务器接收您在记录过程中看到的相同响应。但遗憾的是,Web应用程序有时在Web测试的执行与记录过程中的行为表现完全不同。出现这种问题的原因有多种,通常导致如下所示的错误:Requestfailed:$HIDDEN1.__VIEWSTATEnotfoundintestcontext.当Web测试尝试在它无法定位的Web测试上下文中使用隐藏字段,并从它接收的前一响应页进行提取操作时,会发生该错误。以下屏幕快照显示该问题由服务器错误引发时的情况。在倒数第二个请求中,服务器错误导致下一请求依赖的隐藏字段不存在于该页上。图2服务器之所以在执行过程和记录过程中有不同的响应,有很多原因。以下几节汇总了较为常见的几个原因。在所有情况中,验证规则可以添加到请求以自动验证服务器响应正确的内容。一次性数据该问题的一个常见原因是一次性数据,例如,当一个Web应用程序创建一个唯一的用户名时。在不添加数据绑定或随机值的情况下运行这种Web测试,可能导致Web应用程序在该测试尝试创建重复的用户名时显示错误。JavaScript重定向使用JavaScript重定向(设置window.location)的Web应用程序可能在执行中和记录中进行不同的响应,因为该Web测试引擎不运行脚本代码。要轻松地解决这种问题,可以插入该脚本重定向到的URL,并从执行重定向的页将所需的提取规则移到新请求。由于记录之后该问题会立即出现在Web测试中,因此,唯一可用的提取规则可能是ExtractHiddenFields。重定向到错误页当出现服务器错误时,Web应用程序可能重定向到错误页,但并不返回一个HTTP400或500级别响应代码。这指示或者Web应用程序自身有问题,或者Web测试发出的请求有问题。有关该问题的详细讨论,请参阅该网络日记发布。处理视图状态和其他动态参数甚至在ASP.NET1.0引入__VIEWSTATE隐藏窗体字段之前,Web应用程序就已经使用动态生成的窗体和查询字符串参数在页面间传递信息了。这些动态参数在Web测试中需要特殊考虑,因为每次Web测试运行时,它们都可能更改。具有硬编码参数值的Web测试在记录后不可能长时间工作,甚至根本无法工作。Web测试使用提取规则和上下文绑定启用具有动态参数的测试。提取规则位于包含动态值的页面请求中。当提取规则运行时,它使用诸如“myparam”这样的可配置名将动态值提取到Web测试上下文中。然后,后续请求包含一个具有值{{myparam}}的查询字符串或窗体参数。当Web测试运行时,Web测试上下文中的值替换为{{myparam}}。提取规则的事件序列如下所示:Web测试引擎开始执行Request1。Request1发送到目标服务器。从目标服务器接收一个响应。针对Request1的提取规则在响应页上运行。提取规则在Web测试上下文中放置一个项。Web测试引擎开始执行Request2。查询字符串参数、窗体参数和Request2上其他任何上下文绑定的值从Web测试上下文替换。Request2发送到目标服务器。自动隐藏字段跟踪Web测试包含用于处理动态隐藏字段(例如,__VIEWSTATE)的特殊支持。当记录一个Web测试时,隐藏字段自动与窗体和查询字符串参数匹配。当发现匹配时,Extr
本文标题:Web 测试的创作与调试技术
链接地址:https://www.777doc.com/doc-6203922 .html