WebTest的常见问题与解决
录制好一个WebTest,加上各种规则,编辑后运行并不会像我们想象的那么顺利成功,往往会碰到很多问题,运行不成功的情况比较多,这样我们就遇到了如何解决这些问题的情形。
1、使用 Web Test Viewer 验证 Web 测试

•为了确保一个WebTest在添加到一个负载测试中能够长期运行,需要保证WebTest能够按预期的方式正常工作
•Web Test Viewer能够提供在运行WebTest时对其监视,并查看测试运行时的所有动作。
•要验证一个新建的 Web 测试是否过载,只需查看该测试运行的结果并查明它是否通过。 *
对于一个不具有验证规则的 Web 测试而言,通过只意味着没有引发异常,没有规则失败,而且没有出现 HTTP 错误。对于验证而言,除了确保无错误执行外,还包括确保 Web 测试在目标 Web 应用程序上表现出正确的行为。重要的是查看每个请求的响应以确保它是正确的。
•下表列出验证 Web 测试时需要查看的项,以及有关每种问题类型的附加信息。
 
2、常见的 Web 测试问题
WebTest的弱点
      简单的记录和回放不适用某些网站
      不能记录Javascrīpt请求(Ajax、图片等)
      不能记录胖客户端的Web应用请求
      不能测试客户端代码
因此界面测试推荐手工测试
导航测试
      导航直观、清晰
      整体结构、页面结构
图形测试
      图片、动画、颜色、边框、字体、背景、按钮
      风格、大小、用途
表格测试
      表格风格、布局、一致性

常见问题
1、Web 服务器在执行过程和记录过程中的不同响应

      在理想情况是:您会将一组请求记录到 Web 应用程序,运行该 Web 测试,从服务器接收您在记录过程中看到的相同响应。但遗憾的是,Web 应用程序有时在 Web 测试的执行与记录过程中的行为表现完全不同。
     出现这种问题的原因有多种,通常导致如下所示的错误:
      Request failed: $HIDDEN1.__VIEWSTATE not found in test context.
     当 Web 测试尝试在它无法定位的 Web 测试上下文中使用隐藏字段,并从它接收的前一响应页进行提取操作时,会发生该错误。 

•服务器之所以在执行过程和记录过程中有不同的响应,有以下原因:
Ø一次性数据
当一个 Web 应用程序创建一个唯一的用户名时。在不添加数据绑定或随机值的情况下运行这种 Web 测试,可能导致 Web 应用程序在该测试尝试创建重复的用户名时显示错误。 
解决:数据绑定
ØJavascrīpt 重定向
使用 Javascrīpt 重定向(设置 window.location)的 Web 应用程序可能在执行中和记录中进行不同的响应,因为Web 测试引擎不运行脚本代码。
解决:插入该脚本重定向到的 URL,并从执行重定向的页将所需的提取规则移到新请求

Ø重定向到错误页
当出现服务器错误时,Web应用程序可能重定向到错误页,但并不返回一个HTTP 400或500级别响应代码。
错误原因:Web应用程序自身有问题,或者Web测试发出的请求有问题。 

上图两次请求登陆页面

Ø处理视图状态和其他动态参数
•在ASP.NET 1.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测试时,隐藏字段自动与窗体和查询字符串参数匹配。当发现匹配时,ExtractHiddenFields规则应用于生成隐藏字段源的请求。此时,上下文绑定应用于该请求的参数,从而利用隐藏字段。
•ExtractHiddenFields是一个特殊的提取规则,因为与将值提取到上下文的规则不同,它将页上的每个隐藏字段值提取到Web测试上下文。普通的提取规则使用ContextParameter属性确定用于上下文参数的名称,但是,ExtractHiddenFields使用该属性仅用于区分可能同时存在于上下文中的多组隐藏字段。例如,其ContextParameter设置为1的ExtractHiddenFields规则将提取__VIEWSTATE作为“$Hidden1.__VIEWSTATE”。 

Ø修复__EVENTTARGET以及其他由Javascrīpt修改的隐藏窗体字段

•当隐藏字段由Javascrīpt在OnClick事件处理程序中修改时,可能会错误地应用自动隐藏字段绑定。这是Visual Studio 2005发布版本中的一个已知的错误。
•对于ASP.NET站点,该问题通常在Web控件调用__doPostBack() Javascrīpt方法设置如上所示的__EVENTTARGET隐藏字段时发生。自动隐藏字段绑定让窗体参数具有诸如{{$HIDDEN1.__EVENTTARGET}}这样的值,而不是实际值—btnNext。要更正该问题,必须将参数值设置为要在Javascrīpt中设置的值(例如,btnNext)。

3、辅助工具Fiddler 
由于某些请求(例如,AJAX 请求和一些弹出窗口)不可能由 Web Test Recorder 进行记录 ,Eric Lawrence 编写了一个称为 Fiddler 的 工具。
Fiddler 用作代理服务器,可以截获所有 HTTP 通信量(仍不具有 SSL 支持,不过从2.0版本开始支持了),使用 Fiddler 可以更正一个无法用标准 Web Test Recorder 进行记录的 Web 测试。
http://www.fiddlertool.com
http://www.fiddler2.com  2.0版本开始支持SSL
Fiddler使用说明
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/IETechCol/dnwebgen/IE_IntroFiddler.asp?frame=true
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/IETechCol/dnwebgen/IE_Fiddler2.asp?frame=true

从 Fiddler 保存 Web 测试
      当 Web Test Recorder 丢失一些 AJAX、ActiveX 或弹出窗口请求时,一个选项用于使用 Fiddler 记录整个测试。Fiddler 可以将一系列捕获的请求保存为可以添加到 Visual Studio 2005 测试项目的 .webtest 文件。
      当无法使用 Web 测试记录器记录大量请求时,该选项最为适用。该选项的主要限制是,Fiddler 创建的 Web 测试不使用自动隐藏字段跟踪(例如,针对 __VIEWSTATE),而且不筛选诸如图像、CSS 和 Javascrīpt 的依赖请求。
      缺点:录制所有的信息,没有清晰的结构

将保存的WebTest文件加入到测试项目中,可以发现结构没有使用记录器录制的清晰

最后可以考虑使用录制的WebTest和使用Fidder录制后手动添加请求相结合的方式来完善WebTest
从 Fiddler 手动添加请求
      对于丢失请求的另一个选项是:使用 Fiddler 确定需要将哪些请求手动添加到 Web 测试。当 Web Test Recorder 丢失少量请求时,该方法最适用,因为您仍然可以受益于诸如自动隐藏字段跟踪和依赖请求筛选这样的功能。
     在本例中,最好同时使用 Fiddler 和 Web 测试记录器记录 Web 测试。这使您能够比较这两个记录来发现丢失的请求。如果明显丢失了一个请求(例如,如果您知道发生了一个 AJAX 请求),则在记录过程中插入一个注释也是很有帮助的。该注释作为手动创建请求的占位符。
      注意:需要将任何所需的提取规则、用于参数值的上下文绑定以及 ThinkTime 添加到手动创建的请求。

4、使用编码的WebTest
可以通过生成编码的WebTest来编程调试解决问题,关于编码的WebTest在前面已经提到过,比如使用分支,循环等控制

转:WebTest的常见问题与解决的更多相关文章

  1. NHibernate常见问题及解决方法

    NHibernate常见问题及解决方法 曾经学过NHibernate的,但是自从工作到现在快一年了却从未用到过,近来要巩固一下却发现忘记了许多,一个"in expected: <end ...

  2. WebView加载本地html、js文件常见问题及解决办法

    声明:基于android studio平台,php语言搭建服务器 目录: 一.JavaScript脚本语言没有反应 二.alert无法弹出 三.html页面之间不能跳转 四.屏幕缩放没有达到预期效果 ...

  3. WordPress源代码压缩优化及常见问题的解决

    先来看看效果: 意思就是让你的源代码看起来都挤在一起,这样如果别人想看你的源代码的话就不容易看懂了,(当然如果别人实在想看的话也可以通过某些软件的整理代码的功能来实现,比如IDEA的Ctrl+alt+ ...

  4. FineUIMvc 常见问题及解决办法

    Ø  简介 FineUIMvc 是基于 jQuery 的专业 ASP.NET MVC/Core 控件库,本文主要介绍 FineUIMvc 的常见问题及解决办法. 1.   View 中无法调用 Htm ...

  5. rsync @ERROR: auth failed on module backup 解决思路及附录rsync常见问题及解决办法

    昨晚小版本上线,使用rsync往服务器上传文件时,client报如下异常: @ERROR: auth failed on module backup rsync error: error starti ...

  6. fetch使用的常见问题及其解决办法

    摘自: https://segmentfault.com/a/1190000008484070 fetch使用的常见问题及其解决办法 javascript wonyun 2月25日发布 |   0 收 ...

  7. C#用ado.net访问EXCEL的常见问题及解决方法

    C#用ado.net访问EXCEL的常见问题及解决方法,除了像sql server,access常见的数据库,其实Excel文件也可以做为数据库访问. ado.net访问excel的实例: OleDb ...

  8. PHPmailer发送邮件时的常见问题及解决办法

    来源:http://www.chinastor.com/a/jishu/mailserver/0G392262014.html 使用PHPmailer发送邮件时的常见问题总结: 一,没有定义发送邮箱$ ...

  9. 【小梅哥SOPC学习笔记】SOPC开发常见问题及解决办法集锦

    SOPC开发常见问题及解决办法集锦 一.Symbol 'NULL' could not be resolved 近期在评估使用NIOS II处理器进行项目的开发,我使用的软件是Quartus II 1 ...

随机推荐

  1. 详细理解servlet实现的几种方式和生命周期

    现在很多的开发都是用的框架,然后很多同学学习的时候又是直接接触的框架,对于底层的一些开发,完全没有任何的了解.虽然对于业务上面来说,没有什么问题.但是很多时候当你被面试问到,或者是想要了解框架底层原理 ...

  2. Github建站全攻略

    本系列为原创,发表在我的github主页,详细介绍了如何在github上建立个人网站,还包括域名绑定.评论功能.站内搜索等辅助功能的介绍,欢迎交流.   一步步在GitHub上创建博客主页(6) 本篇 ...

  3. UI篇—UITableview

    一.基本介绍 在众多移动应⽤用中,能看到各式各样的表格数据 . 在iOS中,要实现表格数据展示,最常用的做法就是使用UITableView,UITableView继承自UIScrollView,因此支 ...

  4. centos6.5中gitlab的搭建

    使用gitlab官网给的源码进行安装,步骤如下: Install a GitLab CE Omnibus package on CentOS 6 (and RedHat/Oracle/Scientif ...

  5. EF中用Newtonsoft.Json引发的循环引用问题

    描述: 1.双向关系表a->b b->aList 2.在查询a引用b以后 3.用Newtonsoft.Json 去tojsonstring 4.一个只有6条数据的json串 出现了一屏幕字 ...

  6. C陷阱与缺陷 第二章

    有关运算符优先级   1. "<<" 和 "+" data8 = data4H << 4 +data4L; 这里本意是让高四位的数据,左 ...

  7. QML之使用Loader加载QML组件

    呵呵,今晚是边看<裸婚时代>边敲代码,那电影看得...!钱真他妈不是个东西. 盼望Meego火起来. QML的Loader元素经常备用来动态加载QML组件.可以使用source属性或者so ...

  8. laravel使用多个数据库连接

    1.配置.env文件 DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=database_name DB_USERNAME= ...

  9. 笨方法学python--打印

    1 print 语句 尾端的逗号 end1 = "C" end2 = "h" end3 = "e" end4 = "e" ...

  10. iOS9以后 GDataXMLNode修改方式

    iOS9以后GDataXMLNode修改方式