发布新日志

  • 如何让缺陷填写的更加规范

    没翅膀的飞鱼 发布于 2013-07-10 18:12:51

    很完整不错的一篇提交缺陷规范及注意事项文章,找不到原文地址,就很无耻的转载一下,分享给大家。

    ==============================================

    如何让缺陷填写的更加规范

    1、目的

    缺陷记录是软件测试生命周期中最重要的可用产出之一。因此,怎么填写有效的缺陷是非常重要的。一般来说,一条好的缺陷记录至少有以下3个方面的积极作用。

    1)减少测试人员和开发人员的沟通成本。

    2)加快缺陷修复的速度。

    3)增加测试的可信度。

    缺陷记录的最终目的是准确地传达测试人员的思想或缺陷的真正所在。只要遵循本规范中的一些简单原则,我们就可以轻松的填好每一条缺陷记录,从而提高工作效率。

    2、填写缺陷规范

    2.1 缺陷概要规范

    缺陷概要需以简洁的语言表述准确的信息。那么能准确表达意义的缩略语在描述中则具有更高的优先级,一些关键词如“程序崩溃”、“系统无反应”和“文字错误”等,在把缺陷概要作为检索条件的时候,显得非常必要。

    2.2 缺陷描述规范

    缺陷描述需要遵循以下7个要点:精练、正确、中立、准确、普遍性、可再现和有证据。

    2.2.1 精练

    缺陷记录的描述需简单明了。不加入与问题无关的叙述,去除不必要的信息。但同时,要涵盖所有必要的信息。

    2.2.2 正确

    一定要清楚你所记录的缺陷的确存在。在提交前,请先考虑如下5个问题:

    1)我对系统需求是否真正理解?

    2)是否安装和系统相关的软件?我的机器设置有没有问题?

    3)是不是我手动设置的某个地方不合适(被测软件本身的设置)?

    4)是不是我以前测试时遗留的错误数据导致的错误?

    5)会不会是网络状况变化引起的问题?或者其它外在环境因素(如防火墙)引起的错误?

    以上这些都对测试的结果有很大的影响,确认这些问题是否存在。

    2.2.3 中立

    客观地描述每一个缺陷,不要带任何情绪化的语言。在提交一个缺陷记录前首先把它通读一遍,确信你的描述没有伤害到任何人员。

    2.2.4 准确

    缺陷记录需要准确的描述缺陷发生的位置,产生条件和结果。最好做到让阅读缺陷记录者不需要亲自上机操作就知道问题所在。

    http://www.uml.org.cn/Test/images/201203192.jpg

    2.2.5 普遍性

    记录缺陷需要明确的描述出该问题在整个系统中普遍存在的地方。通常,当开发人员修改缺陷的时候,他可能只是修复了你提到的一些特定情况,他并不知道这个问题具有普遍性,尚需更大范围的修复。

    2.2.6 可再现

    原则上所提交的缺陷都应该能够重现。对很难重现的Bug,你应该记录下什么情况下可以再现它,列出再现Bug的所有步骤,执行次序以及所需要的数据等。

    如果你无法再现这个Bug,或者是你怀疑某些条件你还没有想到,你应尽可能的把那些认为可能有用的信息描述清楚。

    一个缺陷在你重现它以前,不要假设它是可以重现的,如果你确实无法重现它,在缺陷记录中明确说明也是很重要的。

    在考虑对缺陷的重现时我们应该注意以下3点:

    1)怎样才能以最简单的方式把缺陷重现。对于难重现的缺陷,这常常是个漫长而费时的过程。

    2)是否有外在的原因在测试中导致了该缺陷。例如是否和其它软件相冲突的情况。

    3)如果在测试中要输入很多值,尽量在大量的输入中找出导致缺陷的那些特定值,并准确地写出那些导致缺陷的输入。

    2.2.7 证据

    对于一些数值型的、暂时不能重现的和难以描述的缺陷等,最好提供可以证明它存在的数据、图片和文挡等证据。对记录的缺陷,就应该确信这里的确存在缺陷并提供所有你能提供的证据,说服别人这里确实存在缺陷。这些证据可能来自于系统数据、现场截图以及需求文挡等。当然这也有利于关闭缺陷和做回归测试的时候重现该缺陷。

    2.3 缺陷属性规范

    缺陷属性需要根据不同的软件项目定制不同的属性值。

    必须的属性值有:DefectIDSubjectStatusSeverityAssignedToSummaryDetectedByDetectedonDateDetectedinVersionDetectedphase

    2.4 缺陷填写建议

    在填写一条缺陷记录的时候,提醒你参考以下2点建议:

    1)在提交一条缺陷前,需检查缺陷库中是否已经存在此缺陷。力求避免重复提交。

    2)对于一些难以理解的、自己还有些模糊的和对缺陷的正确性难以肯定的问题,在记录你的缺陷以前,就需要和有经验的测试人员或开发人员进行讨论。

    3、缺陷等级分类与示例

    3.1 概述

    测试当中发现的缺陷,严重程度划分为三级:High(高)、Medium(中)和Low(低)。在《软件系统测试规程》中已对这三个级别进行了定义性描述,High等级是指功能不能使用或在使用中出现的问题影响了系统的稳定性、造成数据存储错误或将错误数据带入下一环节、一些重要特性或性能不能达到指定的要求等。Medium等级是指功能可以使用、在出错后做出一定处理,操作能够继续进行或功能实现有误,但问题的出现应不影响本功能或其他功能的实质性使用。Low等级是指用户界面显示、对齐、文字错误等。

    本文结合实际工作情况,对已发现的大量缺陷数据进行归纳,对缺陷的各个等级进行分类,并在每个分类中列举比较典型的例子。以后测试人员在设定缺陷严重等级时将据此进行参考,使缺陷严重等级的定位更加规范统一,同时也使测试人员和开发人员对缺陷等级的定位更容易达成一致。本次分类重点关注系统业务功能在正常操作下可能出现的问题,而有意识地降低了边界值测试发现的缺陷和非正常操作下发现缺陷的等级。

    我们主要考虑High等级和Medium等级的情况。因为Low等级的缺陷主要指界面上的显示、对齐、文字错误等,在这里就不再详细列出。

    3.2 High等级的分类与示例

    1)关键数据错误。

    例:

    a)统计报表中的项目数量和资金统计不正确。

    b)巡视工作任务中,将缺陷记录中的缺陷上报生产,在缺陷登记模块中可看到3条一样的数据。

    c)物资采购数为10,现场和仓库可分别到货10件。

    2)所有功能在正常操作下报错(如500404等)。

    例:

    a)打开计划下达审批页面,系统报500

    b)点击查询按钮,系统报404

    3)主要功能在正常操作下没有实现。

    例:新增、保存、删除、发送、回退、撤回、导出和查询等操作不成功。

    4)主要功能在正常操作下结果不正确。

    例:

    a)检查不通过的项目可以上报成功。

    b)选择全部项目发送,只发走部分。

    c)导出功能,导出的文件格式错乱、内容跟列名不对应,以及内容不正确等。

    d)在多个入库单同时上报时,将入库仓库为观澜仓库的入库单上报给水贝仓库的管理员审批。

    e)在新增两票录入记录时,在新增页面点击一次保存操作就会新增一条记录。

    fPDA中,缺陷表象的信息错误了,严重等级也没有下下来;设备信息中,有些字段没有下下来。比如“安装日期”、“厂家”、“电压等级”等等。

    5)主要功能存在性能问题。

    例:

    a)分发多个项目时,系统响应很慢,如分发30个项目,系统1分钟还没处理完。

    b)单据过帐时,系统出现白屏,显示时间超过10秒。(系统响应时间应符合需求规格说明书的要求,不同系统的响应时间的要求可能不一致。)

    6)系统管理权限错乱,对系统安全造成威胁的。

    例:

    a)没有授权用户菜单,但用户登录系统后,能通过该菜单进入相关模块,并对模块的数据进行操作。

    b)未授权的用户可以进行厂家配额。

    c)在角色管理中取消了新增功能位置的权限按钮,在设备台账中变电设施、中心站、设备下还有新增下一级功能位置按钮。

    7)系统业务逻辑关系处理不正确,引起主要功能错误。

    例:

    a)项目验收后,已验收状态的项目在待下达库中可被获取继续下达。

    b)生成操作票中,对于已审核通过的操作票,还可以增加操作步骤,应该是不能再编辑操作步骤的。

    c)抢修领料在审批过程中可以上报。

    d)领料退库时,导入的领料单列表中即有现场到货单也有现场领料单,造成同一物资多次退库的现象。

    3.3 Medium等级的分类与示例

    1)非主要功能在正常操作下没有实现。

    例:

    a)查询页面有某些查询条件查不出相应的数据。

    b)巡视项目定义中,当只有2条巡视内容时,上下移动巡视内容操作不成功。

    c)在单据中物资明细没有超链接。

    2)非主要功能在正常操作下结果不正确。

    例:

    a)标题排序不正确。

    b)新增主变压器并修改其技术参数高压额定容量值之后,该设备的上级变电站页面中主变压器总容量的值没有修改。

    3)非主要功能存在性能问题。

    例:物资系统中上传附件速度很慢,1M的文件需要30秒以上。

    4)所有功能进行边界值测试,系统报错的。

    例:

    a)大文本框输满,保存报500

    b)资金输入最大值,保存报500

    c)上传大型文件,系统老处于上传状态。

    d)选中大量项目导出,导出不正确。

    5)模块中的信息显示不正确,起误导用户作用。

    例:

    a)资金单位显示不对。

    b)新增推荐单位后,列表中显示的“关联类型”与新增时的输入不一致。

    c)在单据的物资明细列表中将物资明细显示为项目名称。

    d)停电计划查询中的导出字段中,“停电原因”应该是“停电终止原因”。

    6)关键提示不正确,起误导用户作用。

    例:

    a)实际操作成功却提示操作失败。

    b)智能操作票系统中,在状态检查时,提示的不合法设备名称不正确。

    c)操作票中,导入操作步骤成功了,但是提示却为不成功。

    7)非主要模块的权限控制不正确。

    例:

    a)合同管理的授权给相关人员后,相关人员看不到相应的数据。

    b)领料单在材料员审批时不能填写领料原因。

    8)系统业务逻辑关系处理不正确,引起非主要功错误。

    例:项目归档后,在项目申请的已上报页面和申请书的查询页面还能看到该项目。

    3.4 Low等级的分类与示例

    1)页面和记录定位。

    例:变更申请选中列表中的第2条项目新增变更,新增完返回时系统自动定位到列表中的第一条项目。

    2)用户界面显示、对齐、文字错误等。

    例:

    a)页面太小没有将内容显示完整,只要把页面调大即可。

    b)系统将“帐号”显示成“账号”。

    3)报javascript错误,但能操作成功。

    4)用户几乎不太可能进行的操作,导致系统报错。

    3.5 填写缺陷时的注意事项

    1)同类型的缺陷只录一条。例如项目审批模块的发送不成功,其他审批模块也有同样的问题,只录一条缺陷就可以,因为都属于工作流的问题。

    2)同一模块的页面显示有几个问题,也只录一条缺陷,并在缺陷的描述里列出各个问题。因为都是同一模块页面显示的问题,放在一起,开发人员可一次将问题改全。

    3)测试中要经常查看同组测试员填写的缺陷,及时了解已存在的缺陷,如有补充可在注释里填写。

    4)查看同组测试员填写的缺陷时,注意其他人对缺陷严重等级的定义,保持同组人员对严重等级定位的一致性。

    ==================================================================================

  • Web性能优化方案

    sirly2001 发布于 2013-12-18 15:32:48

    第一章 打开网站慢现状分析

    在公司访问部署在IDC机房的VIP网站时会感觉很慢。是什么原因造成的?为了缩短页面的响应时间,改进我们的用户体验,我们需要知道用户的时间花在等待什么东西上。

           可以跟踪一下我们的登录页面,如下图所示

        从上图我们可以分析知道,HTML文档只占了总响应时间的20%,其它80%响应时间用来下载JSCSS、图片等组件。所以WEB前端有很大的优化空间,我们将从WEB的前端优化、后端优化两方面综合考虑给出WEB的性能优化方案。

     

    一、尽量减少 HTTP 请求

    HTTP

    1 合并脚本跟样式文件,如可以把多个 CSS 文件合成一个,把多个 JS 文件合成一个。

    2 CSS Sprites 利用 CSS background 相关元素进行背景图绝对定位,把多个图片合成一个图片。

     

    二、使用浏览器缓存

           在用户浏览网站的不同页面时,很多内容是重复的,比如相同的JSCSS、图片等。如果我们能够建议甚至强制浏览器在本地缓存这些文件,将大大降低页面产生的流量,从而降低页面载入时间。

       根据服务器端的响应header,一个文件对浏览器而言,有几级不同的缓存状态。

       1、服务器端告诉浏览器不要缓存此文件,每次都到服务器上更新文件。

       2、服务器端没有给浏览器任何指示。

       3、在上次传输中,服务器给浏览器发送了Last-ModifiedEtag数据,再次浏览时浏览器将提交这些数据到服务器,验证本地版本是否最新的,如果为最新的则服务器返回304代码,告诉浏览器直接使用本地版本,否则下载新版本。一般来说,有且只有静态文件,服务器端才会给出这些数据。

       4、服务器强制要求浏览器缓存文件,并设置了过期时间。在缓存未到期之前,浏览器将直接使用本地缓存文件,不会与服务器端产生任何通信。

           我们要做的是尽量强制浏览器到第四种状态,特别是对于JSCSS、图片等变动较少的文件。

     

    三、使用压缩组件

    IEFirefox浏览器都支持客户端GZIP,传输之前,先使用GZIP压缩再传输给客户端,客户端接收之后由浏览器解压,这样虽然稍微占用了一些服务器和客户端的CPU,但是换来的是更高的带宽利用率。对于纯文本来讲,压缩率是相当可观的。如果每个用户节约50%的带宽,那么租用来的那点带宽就可以服务多一倍的客户,并且缩短了数据的传输时间。

     

    四、图片、JS的预载入

    预载入图像最简单的方法是在 JavaScript. 中实例化一个新 Image() 对象,然后将需要载入的图像的 URL 作为参数传入。

    function preLoadImg(url) {

    var img = new Image();

    img.src = url;

    }

    可以在登录页面预载入JS和图片

     

    五、将脚本放在底部

    脚本放在顶部带来的问题,

    1、  使用脚本时,对于位于脚本以下的内容,逐步呈现将被阻塞

    2、  在下载脚本时会阻塞并行下载

    放在底部可能会出现JS错误问题,当脚本没加载进来,用户就触发脚本事件。

    要综合考虑情况。

     

    六、将样式文件放在页面顶部

    如果样式表任在加载,构建呈现树就是一种浪费,样式文件放在页面底部可能会出现两种情况:

    1、  白屏

    2、  无样式内容的闪烁

     

    七、使用外部的JSCSS

    将内联的JSCSS做成外部的JSCSS。减少重复下载内联的JSCSS

     

    八、切分组件到多个域

     

     

     

    第四章 数据库的优化

    附录A 页面请求分析

      从输入URL到页面呈现需要下面5个步骤

    1 输入URL地址或者点击URL的一个链接

     2 浏览器根据URL地址,结合DNS,解析出URL对应的IP地址

     3 发送HTTP请求

     4 开始连接请求的服务器并且请求相关的内容

     5 浏览器解析从服务器端返回的内容,并且把页面显现出来

     

    上面基本上就是一个页面从请求到实现的基本过程,下面我们将剖析这个过程。

     

    当输入URL之后,浏览器就要知道这个URL对应的IP是什么,只有知道了IP地址,浏览器才能准备的把请求发送到指定的服务器的具体IP和端口号上面。浏览器的DNS解析器负责把URL解析为正确的IP地址。这个解析的工作是要花时间的,而且这个解析的时间段内,浏览器不是能从服务器那里下载到任何的东西的。浏览器和操纵系统提供了DNS解析缓存支持。

     

    当获得了IP地址之后,那么浏览器就向服务器发送HTTP的请求,过程如下:

    1.浏览器通过发送一个TCP的包,要求服务器打开连接

    2.服务器也通过发送一个包来应答客户端的浏览器,告诉浏览器连接开了。

    3.浏览器发送一个HTTPGET请求,这个请求包含了很多的东西了,例如我们常见的cookie和其他的head头信息。

    这样,一个请求就算是发过去了。

     

    请求发送去之后,之后就是服务器的事情了,服务器端的程序把最后的结果发送到客户端。

      其实首先到达浏览器的就是html的那些文档,所谓的html的文档,就是纯粹的html代码,不包含什么图片,脚本,CSS等的。也就是页面的html结构。因为此时返回的只是页面的html结构。这个html文档的发送到浏览器的时间是很短的,一般是占整个响应时间的10%左右。

      这样之后,那么页面的基本的骨架就在浏览器中了,下一步就是浏览器解析页面的过程,也就是一步步从上到下的解析html的骨架了。

    如果此时在html文档中,遇到了img标签,那么浏览器就会发送HTTP请求到这个img响应的URL地址去获取图片,然后呈现出来。如果在html文档中有很多的图片,flash,那么浏览器就会一个个的请求,然后呈现,如果每个图片都要请求,那么就要进行之前说的那些步骤:解析url,打开tcp连接等等。打开连接也是要消耗资源的,就像我们在进行数据库访问一样,我们也是尽可能的少开数据库连接,多用连接池中的连接。道理一样,tcp连接也是可以重用的。http1.1提出了持久连接(persistent connection)的概念,也就是说同一条 HTTP 连接,可以同时处理多个请求,减少tcp连接。

    当页面的html骨架载入了之后,浏览器就开始解析页面中标签,从上到下开始解析。

    首先是head标签的解析,如果发现在head中有要引用的JS脚本,那么浏览器此时就开始请求脚本,此时整个页面的解析过程就停了下来,一直到JS请求完毕。之后页面接着向下解析,如解析body标签,如果在body中有img标签,那么浏览器就会请求imgsrc对应的资源,如果有多个img标签,那么浏览器就一个个的解析,解析不会像JS那样等待的,会并发的下载。

  • 2014年测试之路怎么走

    云层 发布于 2013-12-18 10:01:23

    看到有人提到2014测试怎么走,于是就写下了下面一点自己的看法。

      2013年一晃就过去了,马上2014年就要到来了,回头看看这13年的测试之路,仔细想想真没啥大的进步,除了从web1.0逐渐成熟走到web2.0,后台各种架构出现,但是对于测试来说,本质上也真没啥发展,换个角度来说其实对于开发来说的进步也并不是那么大,IT行业也没出现所谓的翻天覆地的变化。
      那么测试2014年会怎么样呢?其实个人觉得一年对于测试来说不会有什么大的变化,只能说趋势把。测试外包会更加流行,初学或中级的人员都会从外包走起。
      技术方面,自动化会更加的大势所趋,而自动化的要求也会从QTP这类工具,更多的转化到Selenium这类开源工具上,对于测试人员在最近几年的要求还是会更多的偏向于技术,特别是开发技术,而待遇也会相对来说可以和开发靠近或齐平。所以如果希望自身在定位上有提高,编程是跑不掉的概念,而在测试工具上开源工具会更多的被使用。
      从行业来说,手机端测试会更快的流行,而由于某种原因,大多数的手机测试可能还是被垄断在某几个企业中,而手机测试的特点也决定了这个东西所需要的测试人员和要求不会太高。
      对于国内的测试要走向测试的本质可能还需要很长的时间,测试人员的需求应该还会继续保持增长的趋势。

  • 测试的理想和现实

    千里 发布于 2014-01-10 17:54:39

    曾经我也过这些期望:
    期望1,希望公司能每个月的对我们进行技能上的培训,让程序员分享一些技术上的东西,比如数据库啊,或者教我们写一些简单的代码,制作简易的网页,这样既能促进程序员和测试员的交流,也能让测试大概的理解,这个系统时怎样写成功的(因为我数据库和代码属于很菜的级别,所以对这些还是蛮有兴趣的)
    现实:技能上的培训,这个事情我在公司也做过,每个月一次,开始几次还算好。后来效果就非常差了,最后就无疾而终。要做好一个培训,前期准备需要话很长时间的,而且课题还不能重复,很快就没有比较好的课题了,而且课题简单不好意思拿出来讲,课题困难听不懂。再则,谁当培训讲师呢?都想学习,却少有人愿意分享知识,有表达问题,有知识结构问题,还有个性问题。
    期望2,希望公司能支持我们在完成任务的时候,进行工作上的自学,家里的电脑很喜欢蓝屏,而且在公司更有学习的欲望,但是,在公司不让自学,就算是看跟工作有关的书和网页都不允许
    现实:家里电脑蓝屏说明要换电脑,呵呵。公司公然安排学习只有两种情况,一者是公司很闲,不知道如何安排工作的时候;二者是将来有一个困难的任务讲使用到还没有掌握的技术。否则都不太可能安排学习,有些领导不知道如何有效安排工作和学习,因为不具备那个能力;还有领导看到你学习,就会认为你工作不饱和。
    希望3,希望老大以后重视测试,并且能把测试流程规范化,不要想到什么就跑来让我放下进行一半的工作去做别的,还没做好又让做其他的,系统很多,隔了一两个月,问我之前的某个系统怎么怎么样,我真的会记不清楚的
    现实:你的认知和老大的认知可能不一样,如果这样的话让老大知道了,保证说:难道我不重视测试吗?规范化??你觉得现在的流程不规范吗,就算不规范,这样的流程也是测试组长期适应项目组形成的最合适的流程。这种事情经常发生,有些时候不在那个岗位,就算你知道问题和困难,你也无能为力,但我们可以总结和反思,然后有了自己的应对方法,有一天咱们在那个岗位上,就不会再发生今天这样的问题了。
    期望4,希望以后程序员和老大都多去bugfree看看,不要每天都问我发现了什么问题,哪里需要修改,这个系统还有没有问题这样的话,bugfree是拿来用的,不是放着展览的
    现实:这个希望还是做梦吧,基本上不可能实现。反而既然知道每天都问,那就把工作日报做好,有针对性的做一些事情就可以了。如果我是领导,不但不会去看bugfree还会要你提交测试日报,汇报内容就是发现了什么问题,哪里需要修改,这个系统还有没有问题这类的内容。
  • 2014年自动化的个人感想

    hanlingzhi 发布于 2014-01-13 13:24:41

    自己在2014年写的自动化的感想和规划

    TITLE:测试开发大势所趋

    1、互联网在深耕细作的发展阶段需要测试发挥更多的影响。
    2、技术在测试工作中的占比无限的趋近开发。
    3、建立学习型和成长型的测试团队。
    4、持续关注个人的成长,测试人员更注重价值体现。
    PPT解读: 1、互联网是快速发展的行业,时刻需要idea迅速的转化为生产力。频繁迭代的开发,追求建立快速的响应机制,要求测试的时效性。较短的测试排期需要加入技术成分从而替代手工回归测试所带来的工作量。
    2、测试是技术岗,测试环节的上游是代码产品,对上游环节的摸索和尝试是不可拒绝的。测试人员越来越了解和参与开发职位的工作既可以起到测试前置的作用也可以扩大测试的范围。测试和开发必将在未来融合。
    3、测试团队需要持续发展的节奏,技术成长是其中的重要一环。学习型的团队最具竞争力、战斗力和向心力。
    4、功能测试是互联网时代产物,也会随着时代的发展而消亡。测试人员普遍存在危机感,对于测试技术的学习和成长要求是迫切的。测试人员越来越不满足于手工测试所带来的成就感。

    TITLE:自动化技术的应用场所
    1、功能回归测试、冒烟测试。
    2、数据精度要求高的测试,数据计算、比较、统计测试。
    3、简单重复的大批量测试,测试组合众多,需要测试覆盖。
    4、疲劳测试。
    5、接口、底层、代码测试。
    6、其他不便于进行手工的测试。
    PPT解读: 自动化测试是个较大的范畴,所有不用手工进行操作通过程序驱动的测试都可以理解为自动化测试。从技术层面来讲,但凡被技术实现的东西都可以被技术模拟和测试。在人们实践的过程中,自动化技术应用的领域会越来越广,测试也是一样,自动化本身不会去约束方式和行为,自动化能够做什么会超出我们的想象。

    TITLE:POP的自动化领域
    1、平台SOA化
    2、大数据量和云计算
    3、数据挖掘
    4、移动互联网
    PPT解读: O2O做为2014年京东的战略在POP端会持续发酵。平台的发展需要模块化,越来越来可适配。公共模块直接会被底层服务化,而前端模块大量的被暴露数据接口,更多的测试要求在不可视化的情况下进行。POP的发展积累了庞大的历史数据和商家数据而且还在增长,对于海量数据进行迁移、计算、合并、修改和数据挖掘,需要精准的完成数据测试,需要倚赖自动化测试。虽然移动端未在POP中应用,但是商家说不定哪天就有在手机上管理商品的需要,移动端在POP的布局现在没影,但是需要的时候也会很迅猛,这些都需要我们未雨绸缪。

    TITLE:为什么需要测试框架
    1、降低实现门槛。
    2、统一技术风格。
    3、量化测试成果。
    4、底层前端分离。
    PPT解读: 没有测试框架也可以实现自动化。每个测试人员技术背景不尽相同,擅长的语言、脚本、实施的技术水平参差不齐,没有框架约束技术实现和风格,他人的维护难度会很大,不利于大家朝同一个技术方向进行分享和交流。 框架本身已经封装了很多实际需要的接口和工具,测试人员不需要花费大量的精力再度开发,集中精力快速实现测试需求本身。统一的结构不仅多人可以同时维护一个项目,也便于测试结果的分析和汇总,众多项目的批量运行。框架和项目的分离,使双方各自影响的范围得到有效控制,便于项目单点维护和迁移。开发需要框架,同样测试开发作为一种开发活动也需要框架。

    TITLE:功能测试人员做自动化
    1、实践为主培训为辅
    2、差别化培养
    3、测试意识的转化
    4、触发危机意识
    5、考核标准
    PPT解读: 1、开展定期的技术培训,包括灌输测试理念,扩展测试思路,培训新的测试技术。培训更多的是了解和灌输理念。重点是实际的动手。培训只占个人成长的10%,需要制定挑战性的任务,让每个人主动亦或是被动的去动手完成,在动手的过程中发现问题解决问题。技术是练出来的,而不是培训出来的。
    2、功能测试人员中个人水平和意愿不尽相同,对有一定技术能力或者有强烈自动化愿望的人重点培训,开小灶,单独辅导,让他们成长的更快一些,对没有自信或者对自动化产生疑虑的人,起到示范带头的效果。
    3、功能测试人员需要在日常测试中转化意识,一个需求过来先考虑如何用自动化实现,当不能实现的时候再考虑手工测试,人们往往按照自己熟悉的方式进行,但是不一定是最好的方式,自动化做的多了,意识转化的也就越快。 4、测试行业本身的竞争很激烈,需要让测试人员意识到这一点。 5、放在KPI中进行考核,效果是不容小觑的。

    TITLE:自动化效果体现
    1、测试前置效果体现
    2、测试范围效果体现
    3、Daily Test 和批量执行效果体现
    4、其他指标
    PPT解读: 1、接口和单测可以通过BUG数量进行衡量。这个阶段所发现的BUG含金量更高,修复的成本更低,更有价值。此外代码行数、用例数量、代码覆盖率也可以很好的统计测试实际的效果。
    2、自动化可以解决以往手工不能进行的测试,比如大数据量、中间件、随机数据等测试,可以列举由于引进自动化而增加的各种测试类型。
    3、100个用例执行一次体现不了什么,但是100个用例在后续的两个月里执行了100次,所替代的人工就是很可观的。自动化项目坚持每日BUILD,一方面可以及时发现问题,维护更新用例。另一个方面每日测试的汇总数据也是自动化测试效果的展示。可以通过邮件、报告进行测试项目和用例的数据汇总,如果达到一定的量级还是很震撼的。
    4、自动化还有代码行数,编译次数等指标。放在部署有平均部署时间,放在数据有平均一次生成数据量等。前端自动化不宜用BUG数量来衡量,因为主要选取的相对比较稳定的业务线和模块。

    TITLE:自动化开展的步骤
    1、特殊测试需求响应
    2、重点业务线全局自动化
    3、其他业务线局部自动化
    4、流程性约束
    5、技术分享和外部推广
    PPT解读: 自动化的开展需要的有重点、分步骤的进行。既要保证效果,又要体现团队的技术提升,分成两条线,各不冲突。
    1、对于特殊的测试需求,比如大数据量、中间件、复杂的底层服务和技术接口、高性能组件等对技术能力要求较高的测试需求由专门的自动化组来承担。一方面集中优势力量可以快速完成任务,另一方面挑战性的任务可以实践和摸索新的测试方法,积累新的技术经验。
    2、重点业务线可以选择一个,偏中间件和接口,或者功能测试人员尚未覆盖的业务线,由自动化组承担。目前的人力来看,可以独立承担一个业务模块全部测试,避免混用投放功能测试人员和自动化测试人员。作为试验田从代码编写到最后的上线,由自动化全覆盖,进行整体流程的尝试和布局,方便快速产生短期效果。自动化人员也可以避免不会长期脱离业务线。
    3、其他业务线在统一培训之后,使用框架根据自己的业务特点在局部开展自动化,各自形成独立的项目。后续会尝试接入Matrix或者开发自己的平台和容器,进行整体项目群的维护和管理。随着自动化覆盖度的慢慢提升,长期效果将会展现。
    4、长期效果的展现的同时需要在测试流程上进行一些制约,比如测试报告上面增加自动化的选项和测试覆盖,比如开发提测前需要先进行自动化的冒烟测试等,保证自动化长期有效的实施。
    5、整个技术团队有了自动化显著提升,可以推广到其他团队,可以进行跨部门的技术交流。

    TITLE:自动化目前还需要什么样的条件
    1、稳定的测试环境
    2、独立的业务线
    3、多样的技术测试人才
    4、团队共识 PPT解读: 1、测试环境的稳定是自动化成败的关键。不稳定环境会使效果大打折扣,掩盖本应该发现的很多功能问题,会使自动化的实施有很强挫败感。同时本地调试和远程批量运行,同样对环境的稳定性有较高的要求。如果有足够的条件,可以为自动化量身一套环境,测试数据相对独立,也避免和手工测试互相干扰。
    2、专门的自动化测试人员需要拥有独立的业务线,一方面防止长期脱离业务,闭门造车。另一方面可以在业务线上不受干扰的实施自己的思路。
    3、需要更多的测试人才。内部挖潜,从目前来看,难度很大,很多人在技术方面是一张白纸,也无法为技术测试提供更多的支持。如果有社招的机会,选才第一标准还是技术,标准定得高一些,好的技术人才还是非常难得的,相较业务也需要很长的时间才能培养出来。随着自然的新陈代谢,整个团队的技术水准也会有所提升。
    4、从领导到员工对自动化开展要尽量达成共识,大家有共同的努力方向。一个人的成功不算成功,团队提升才是最重要的。虽然每个人的水平有高有低,但是本着不抛弃不放弃的原则,希望带动每个人都有所成长。让周围人变的足够优秀,让测试快乐起来,才是我们做自动化的真正意义。

  • 如何评审测试用例

    xinqing2009 发布于 2010-08-17 16:19:58

    1、测试用例评审标准

    A、测试组内部的评审,应该着重于:

      1、测试用例本身的描述是否清晰,是否存在二义性;

      2、是否覆盖了所有的软件需求;

      3、用例框架设计是否合理;

      4、用例是否容易维护;

        5、是否考虑到测试用例的执行效率;

        6、是否完全遵守用例编写规范;

    B、项目组内部的评审:

      产品设计:注重用例是否跟规格要求一致;

      开发负责人:注重用例中对程序的要求是否合理,程序是否能够实现,或者是否有实现的价值;

        测试人员:查看用例是否遗漏了某些测试点,是否重复了默写测试点;

    所有的需求和实现,产品、开发、测试达成一致,沟通不确认问题,实现全部问题清零,并产生评审报告

    2、测试用例评审步骤

      1、需要评审的原因

      测试用例是软件测试的准则,但它并不是一经编制完成就成为准则。由于用例开发人员的设计经验和对需求理解的深度各不相同,所以用例的质量难免会有不同程度的差异。

      2、进行评审的时机

      一般会有两个时间点。第一,是在用例的初步设计完成之后进行的自我评审测试组内评审;第二是在整个详细用例全部完成之后进行整个项目组评审

      3、参与评审人员

      这里会分为多个级别进行评审。

      1) 部门评审,测试部门全体成员参与的评审。

      2) 公司评审,这里包括了项目经理、需求分析人员、架构设计人员、开发人员和测试人员。

      4、评审内容

      评审的内容有以下几个方面:

      1) 用例设计的结构安排是否清晰、合理,是否利于高效对需求进行覆盖。

      2) 优先极安排是否合理。

      3) 是否覆盖测试需求上的所有功能点。

      4) 用例是否具有很好可执行性。例如用例的前提条件、执行步骤、输入数据和期待结果是否清晰、正确;期待结果是否有明显的验证方法。

      5) 是否已经删除了冗余的用例。

      6) 是否包含充分的负面测试用例。

      7) 是否从用户层面来设计用户使用场景和使用流程的测试用例。

      8) 是否简洁,复用性强。例如,可将重复度高的步骤或过程抽取出来定义为一些可复用标准步骤。

      5、评审的方式

      1) 召开评审会议

      2) 通用邮件与相关人员沟通

       6、评审结束标准

      在评审活动中会收集到用例的反馈信息,在此基础上进行用例更新,保证用例评审报告中的所有问题都已解决。

  • HTTP协议

    mklodoss 发布于 2010-04-23 09:13:44

    HTTP协议
    2007年03月03日 星期六 16:05
    计算机专家设计出HTTP,使HTTP客户(如Web浏览器)能够从HTTP服务器(Web服务器)请求信息和服务,HTTP目前协议的版本是1.1.HTTP是一种无状态的协议,无状态是指Web浏览器和Web服务器之间不需要建立持久的连接,这意味着当一个客户端向服务器端发出请求,然后Web服务器返回响应(response),连接就被关闭了,在服务器端不保留连接的有关信息.HTTP遵循请求(Request)/应答(Response)模型。(2) Web浏览器向Web服务器发送请求命令。
    HTTP(HyperText Transfer Protocol)是一套计算机通过网络进行通信的规则。计算机专家设计出HTTP,使HTTP客户(如Web浏览器)能够从HTTP服务器(Web服务器)请求信息和服务,HTTP目前协议的版本是1.1.HTTP是一种无状态的协议,无状态是指Web浏览器和Web服务器之间不需要建立持久的连接,这意味着当一个客户端向服务器端发出请求,然后Web服务器返回响应(response),连接就被关闭了,在服务器端不保留连接的有关信息.HTTP遵循请求(Request)/应答(Response)模型。Web浏览器向Web服务器发送请求,Web服务器处理请求并返回适当的应答。所有HTTP连接都被构造成一套请求和应答。

    HTTP使用内容类型,是指Web服务器向Web浏览器返回的文件都有与之相关的类型。所有这些类型在MIME Internet邮件协议上模型化,即Web服务器告诉Web浏览器该文件所具有的种类,是HTML文档、GIF格式图像、声音文件还是独立的应用程序。大多数Web浏览器都拥有一系列的可配置的辅助应用程序,它们告诉浏览器应该如何处理Web服务器发送过来的各种内容类型。

    HTTP通信机制是在一次完整的HTTP通信过程中,Web浏览器与Web服务器之间将完成下列7个步骤:

    (1) 建立TCP连接

    在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接,该连接是通过TCP来完成的,该协议与IP协议共同构建Internet,即著名的TCP/IP协议族,因此Internet又被称作是TCP/IP网络。HTTP是比TCP更高层次的应用层协议,根据规则,只有低层协议建立之后才能,才能进行更层协议的连接,因此,首先要建立TCP连接,一般TCP连接的端口号是80

    (2) Web浏览器向Web服务器发送请求命令

    一旦建立了TCP连接,Web浏览器就会向Web服务器发送请求命令

    例如:GET/sample/hello.jsp HTTP/1.1

    (3) Web浏览器发送请求头信息

    浏览器发送其请求命令之后,还要以头信息的形式向Web服务器发送一些别的信息,之后浏览器发送了一空白行来通知服务器,它已经结束了该头信息的发送。

    (4) Web服务器应答

    客户机向服务器发出请求后,服务器会客户机回送应答,

    HTTP/1.1 200 OK

    应答的第一部分是协议的版本号和应答状态码

    (5) Web服务器发送应答头信息

    正如客户端会随同请求发送关于自身的信息一样,服务器也会随同应答向用户发送关于它自己的数据及被请求的文档。

    (6) Web服务器向浏览器发送数据

    Web服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此为结束,接着,它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据

    (7) Web服务器关闭TCP连接

    一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了这行代码

    Connection:keep-alive

    TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。

        

    HTTP请求格式

    当浏览器向Web服务器发出请求时,它向服务器传递了一个数据块,也就是请求信息,HTTP请求信息由3部分组成:

    l 请求方法URI协议/版本

    l 请求头(Request Header)

    l 请求正文

    下面是一个HTTP请求的例子:

    GET/sample.jspHTTP/1.1

    Accept:image/gif.image/jpeg,*/*

    Accept-Language:zh-cn

    Connection:Keep-Alive

    Host:localhost

    User-Agent:Mozila/4.0(compatible;MSIE5.01;Window NT5.0)

    Accept-Encoding:gzip,deflate


    username=jinqiao&password=1234


    (1) 请求方法URI协议/版本

    请求的第一行是“方法URL议/版本”:GET/sample.jsp HTTP/1.1

    以上代码中“GET”代表请求方法,“/sample.jsp”表示URI,“HTTP/1.1代表协议和协议的版本。

    根据HTTP标准,HTTP请求可以使用多种请求方法。例如:HTTP1.1支持7种请求方法:GET、POST、HEAD、OPTIONS、PUT、DELETE和TARCE。在Internet应用中,最常用的方法是GET和POST。

    URL完整地指定了要访问的网络资源,通常只要给出相对于服务器
  • QTP-使用技巧(转)

    shuishixingyu 发布于 2009-06-07 10:45:29

    1.runaction 后面能不能接变量(动态调用action,所以从数据库取数据做action名字了,但是调用总是找不到)? 

      A:脚本中原有RunAction "testbase [case1]", oneIteration

        把引号中的内容放到Global表中的第22行,然后将代码修改为:

        datatable.getsheet("Global")

        datatable.setcurrentrow(22) 

        strLogin=DataTable("ActionName","Global")

        RunAction strLogin, oneIteration   

        help中也有相关帮助

        如:

        Syntax

        RunAction ActionName, [IterationMode , IterationRange , Parameters]

        ActionName : String : The name of the action  

    2.QTP8.2 中调用VB函数的问题(用VBscrīpt写了一些测试脚本需要的几个通用函数,有没有办法可以用类似include的方式进行调用,而不需要每次都把这些函数Copy到新的脚本中)?

      A:程序开头加上ExecuteFile "..\..\..\project\DeVariable.vbs"  

    3.QTP 如何做回归测试(300多个TestCase,TD是否可以管理) ?

      A:TD可以实现,可以生成测试集,一个测试集可以包含若干个测试脚本

        QTP8.2本身提供一个工具Test Batch Runner但是运行完没有报告。

        MI有另一个工具叫MTM(multitestmanager)  

    5.在QTP中如何设置使用别的浏览器(XP系统,用IE访问程序时,每次总提示屏蔽安装ActiveX插件,需要手动安装.但把这个过程录制到QTP后,回放一次是成功的。当我给某个输入框参数化了好多数据后,回放过程中,某些就会失败.

        可能有两个方面可以解决这问题1、每个动作设置延迟时间 2、设置为用别的浏览器。)

        (失败的提示信息是  object not visible)

      A:1.延迟可用WAIT X(X单位是秒)

        2.可以安装插件添加新的浏览器

           SystemUtil.Run "file” "params" "dir" "op'' "mode"

           QTP运行可执行文件的方法及其参数

         ps: 建议是用IE浏览器,或者IE内核浏览器做测试  

    6.checkpoint 检查网页,是否能实现只要网页出现乱码就返回错误报告?

      A:Text not displayed能解决问题

        关于 Text Checkpoint 的总结。

        1)Text Checkpoint 的检查部分分为三个部分。Checked Text 、Text Before 、Text After。在默认的情况下,Checked Text执行的是精确检查,其余两个部分执行的是模糊检查。Text Before(After)检查的内容可以比实际的内容少。但是不能有和是实际内容不相符的地方,否则就失败。

        2) Exact match选项。如果选择了这个选项,三部分完全都进行精确检查。个人觉得和只检查checked Text部分没有区别。

        3) Text not displayed。这个选项本质上就是一个结果取反的过程。就是把检查的结果给反过来,把pass变成Fail,Fail变成pass。我觉得这样就很容易理解。  

    7.WSH 的应用方法

      A:WSH 实际上是一个脚本语言的运行环境,它之所以具备强大的功能,是在于其充分挖掘了脚本语言的潜力。因此,如果抛开脚本语言而空谈 WSH ,那实际上就没有了意义。而如果再展开来讲述脚本语言,显然就离开了今天的主题。  

    在这种情况下,只好采取一种折衷的方法:给大家推荐几个脚本文件利用 WSH 执行任务的实例,希望大家能通过这些例子对 WSH 的使用有一个初步的认识。 

      脚本文件的编写十分方便,你可以选用任意一个文字编辑软件进行编写,编写完成后,只需将它保存为 WSH 所支持的文件名就可以了(如.js 文件和.vbs 文件)。最常用的就是记事本编辑器,下面的实例都是以它作为工具编写的。  

    打开记事本编辑器,在上面编写如下内容:

      Wscrīpt.Echo("走近 WSH")

      将它保存为以 .vbs 或 .js 为后缀名(千万不要写成了 .txt)的文件并退出记事本。双击执行这个文件。

      这一次,我们要利用 WSH 完成一次创建十个文件夹的工作。代码如下:

      dim objdir

      set ōbjdir=wscrīpt.createobject("scrīpting.filesystemobject")

      for k=1 to 10

      anewfolder="c:\chapter" & k

      objdir.createfolder(anewfolder)

      next  

    同样,将它存为 .vbs 文件并退出。运行后,我们会发现,C 盘根目录下一次性多出了十个新文件夹。 

        最后,再举一个在服务器上的运用。下面的代码将帮助你重新启动指定的 IIS 服务:  

    ' define a constant for stopped services

      Const ADS_SERVICE_STOPPED = 1  

    ' get an ADSI object for a computer

      Set ōbjComputer = GetObject("WinNT://MYCOMPUTER,computer")  

    ' get an object for a service

      Set ōbjService = objComputer.GetObject("Service","MYSERVICE")  

    ' check to see if the service is stopped

      If (objService.Status = ADS_SERVICE_STOPPED) Then  

    ' if the service is stopped, then start it

      objService.Start  

      End If  

    将它以 startsvc.vbs 为名保存在 C: 盘根目录。并通过如下命令执行:Cscrīpt C:\STARTSVC.VBS。运行后,经你指定的 IIS 服务项将被重新开启。  

    其实,在 Windows的 samples 目录下,有个 WSH 文件夹,那里面有不少很具代表性的 .vbs 和. js 脚本文件。 

    此外,利用 WSH 还可以自己编写脚本文件来提高网络管理方面的效率。 

    8.从 EXCEL 中导出数据进行测试 

    datatable.AddSheet("51sheet")

    datatable.ImportSheet "f:\test.xls","testsheet","51sheet" 

    Dim i,RowCount ' 定义两个变量

    i=0

    RowCount=datatable.GetSheet("51sheet").GetRowCount ' 设置 RowCount 等于 51sheet 中的行数。

    msgbox RowCount

    Do while i<rowcount

    i=i+1 ' 第一次进入循环,执行这句后, i=1

    'datatable.getsheet("51sheet").setcurrentrow(i)   这句话被我注释掉了,正确的写法应该是下面这样,分开写。

    datatable.getsheet("51sheet")

    datatable.setcurrentrow(i) 

    ' 执行过上面两句后, CurrentRow 是第一行。  

    tempData=DataTable.GetSheet("51sheet").GetParameter("Name").Value                 

    ' 现在,我们调用 msgbox 看看下面这种调用方法得到的是什么值?没错,是第一行的值,下一次循环呢?

    ' 得到的是第二行的值么?

    msgbox "GetParameter-Name:"&tempData ' 这里弹出我们要看的值。

    ' 下面我们用另外一种方法来得到。

    msgbox "GetParameter-i:"&DataTable.GetSheet("51sheet").GetParameter(1).Value ' 这里我用 GetParameter(1) 去得到 sheet 中第一列的值。

    loop  

    9.关于 dtGlobalsheet 与 dtLocalsheet 

    1) dtGlobalsheet 只有一个,它的 index 值比较特殊,它有两个 index 值,一个是 1 还有一个是内置的默认的 1000 。

    你可以用 1 或者 1000 去引用它都是正确的。当然了,如果你用 dtGlobalsheet 来引用它也是正确的。这个 sheet 的 Name 叫做 "Global" 。注意: SheetName 是区分大小写的。

    2) dtLocalsheet 可以用 index:1001 来引用,当然,也可以用 2 来引用。至于其它自定义的 sheet 嘛,你就只能用 index:3 来引用了。

    它没有内置的默认的类似前两个那样的 index 值。

    3) datatable 这个对象只有一个。就是所有 sheet 的集合。或许你把它理解为 excel 文件比较好。

    dtsheet 呢?就是其中的每个 sheet 。所不同的就是 MI 为他们做了一些默认值。在我们的应用中,可能会有多个 action, 如: actiion1,actiion2,actiion3

    这些 action 也分别对应有各自默认的 LoaclSheet. 即: actiion1 , actiion2 , actiion3 。  

    如果每个 action 中,我们都只用到一个 sheet ,那就好办了,在每个 action 中都可以用 localsheet 来引用,但是如果我们有两个及两个以上的 sheet. 那么就比较容易乱套了。  

    10.移动当前位置的行 

    For i=1  to 3

    datatable.getsheet("Global")

    datatable.setcurrentrow(i)

    DataTable("C","Global") = DataTable("nodename","Global") ‘把表Global中的nodename字段中的内容取出来。

    Next  

    11.如何能记录到页面的校验码?(Output value能不能得到web页面的校验码,一般的校验码是由图片随即生成的 ,用QTP怎么录脚本在登陆前得到校验码并输入到校验码一栏)

       A:1)一个很简单的方法:测试时叫开发屏蔽掉检验码的功能后,再录制脚本。检验码的功能可以手工很简单测试出来。

         2)想得到图片的校验码,唯一的方法就是跟程序员拿程序,然后自己在脚本里面写FUCNTION!

            其它就要手动输入了!  

    13. 自动测试实施计划

       1)分析实施自动化测试可能存在的风险:就是决定是否实施, 用成本 时间 效果 。。

       2)制定实施的时机:也就是在什么阶段

       3)研究所要测试的功能 性能

       4)分析在测试中可能遇到的问题 和困难

       5)预估所需要的人时和相应的硬件

       7)确定负责人员和相关测试人员

       6)制定详细的测试计划 方案

       7)最后是执行计划 

    14. 一个Action里如何调用在另一个Action中定义的函数、过程(或变量、常量)

       例如:

       -----------------------------------

       'Action_A

         Public strURL   

            ...... ......

        Function QueryList()

            ...... ......

            ...... ...... 

        End Function

       ------------------------------------

       'Action_B

       '如何调用 QueryList函数和strURL

       A:1)可以把这些变量和Function放在vbs文件作为resource文件共享,在每个Action中添加该文件. 

    如果function中出现控件调用,那么必须确保该控件在相应的Action的object repository中是存在的.

       2)定义一个可被调用的ACTION里面唯一的放一个FUNCTION  

    15.如何管理QTP的源代码?(QTP生成的源代码比较多,而且和环境控件都有关,假如需要多人同时开发, 请问如何管理源代码?)

       A: 一个是代码你可以通过vss,cvs等来进行管理

         一个是通过td或者qc的基于用例的代码管理

    其实第一种方法是基于版本控制来进行的,第二种方法是基于用例管理进行的

         角度不同,管理方法也不同,不过团队协作需要的大家分工明确,进度控制。代码管理可以借鉴开发的方法。 

    16: 脚本不能回放,IE中的AtiveX设置有问题??

       A: TOOL---OPTIONS----Ative screen

         然后点开advanced..,把LOAD  ACTIVEX CONTROLS打勾

         TOOL---OPTIONS----Ative screen

         然后点开advanced..,run scrīpts-->disabled!  

    17 .如何参数化link  

    Browser("Browser").Page("Page").Sync

    Browser("Browser").Navigate "http://www.51testing.com/cgi-bin/index.php"

    Browser("Browser").Page("51Testing 软件测试论坛---软件测试,软件质量工程师").Sync 

    Set tags=Browser("Browser").Page("51Testing软件测试论坛---软件测试,软件质量工程师").Object.links

    Dim i,j, arr()

    i=0

    For Each element in tags

        If Ucase(element.tagname)="A" and left(element.InnerText,1)="[" Then

                            ReDim Preserve arr(i+1)

                        arr(i)=element.InnerText

        i=i+1

            end if

    Next

    For j=0 to i

                            Browser("Browser").Page("51Testing软件测试论坛---软件测试,软件质量工程师").Link("[ 版主讨论区 ]").SetTOProperty "Text",arr(j)

                Browser("Browser").Page("51Testing软件测试论坛---软件测试,软件质量工程师").Link("[ 版主讨论区 ]").Click

                            Browser("Browser").Back

    Next

     

    这段代码先是打开一个空的页面,然后输入url.

    到达论坛首页。 

    然后得到所有版面的名称,也就是link的名称。

    存到数组里面。

    然后使用SetTOProperty更换录制时候录下的link的属性。

    这时候再click  

    18. QTP 在Debug状态,在Export View 区域不能写入任何东西  

    A: 如果你的目的是在debug过程中修改已执行过的命令,可以在Debug view的Command中执行命令,如重新执行已经执行过的命令,修改变量的值等等。 

    如:Window("Flight Reservation").WinEdit("Name:").Set "51testing"

    已经执行,如果现在想修改“51testing”为“testing”,可以在command中执行

    Window("Flight Reservation").WinEdit("Name:").Set "testing"  

    19 . 动态变化值如何获取  

    A:VAL=Browser("欢迎使用我的工作台").Page("欢迎使用我的工作台").Frame("managePlace_7").WebRadioGroup("userAccountId_0").GetROProperty("Value")

    Browser("欢迎使用我的工作台").Page("欢迎使用我的工作台").Frame("managePlace_7").WebRadioGroup("userAccountId_0").select val

Open Toolbar