工欲善其事 必先利其器

发布新日志

  • 测试方法

    2016-05-18 17:29:45


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

    验收测试
    --------------------------------
    也称为交付测试
    ISTQB定义:  
    针对用户需求、业务流程的正式的测试,确定系统是否满足验收标准,由用户、客户或其他授权机构决定是否接受系统。
    formal testing with respect to user needs, requirements, and business processes conducted to determine whether a system satisfies the acceptance criteria and to enable the user, customers or other authorized entity to determine whether or not to accept the system

    用户验收测试,这个一般是由开发方在移交产品前
    运行验收测试,这个更多是运维层面,保证系统是可以被正常运行和维护的。比如备份、灾难恢复等等
    合同和规范验收测试,这个主要就是参照约定的规范进行验证。,以及针对政府、法律等的合规验证
    alpha测试 一般在开发者所提供的场地或环境中进行
    beta测试 则是脱离开发者环境,在用户的场所或环境中进行

    alpha版本,beta版本,release版本

    ATDD也是敏捷研发,特别是极限编程所推崇的一种开发模式。也有说BDD 就是针对用户故事user story,首先确定好针对这个用户故事的用户级的验收条件,确保Userstory的功能满足验收条件时,才可以关闭这个用户故事。





    下面我们再看一下按测试手段的不同进行分类,有哪些测试概念

    1. 黑盒、白盒、灰盒
    在测试中,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息。黑盒测试着眼于程序外部结构,不考虑内部逻辑结构,主要针对软件界面和软件功能进行测试。
    具体的黑盒测试用例设计方法包括等价类划分法、边界值分析法、错误推测法、因果图法、判定表驱动法、正交试验设计法、功能图法、场景法等。



    白盒测试针对程序的逻辑结构设计测试用例,用逻辑复盖率来衡量测试的完整性。逻辑单位主要有:语句、分支、条件、条件值、条件值组合,路径。语句复盖就是复盖所有的语句,其他类推。另外还有一种判定条件复盖,其实是分支复盖与条件复盖的组合,在此不作讨论。跟条件有关的复盖就有三种,解释一下:条件复盖是指复盖所有的条件表达式,即所有的条件表达式都至少计算一次,不考虑计算结果;条件值复盖是指复盖条件的所有可能取值,即每个条件的取真值和取假值都要至少计算一次;条件值组合复盖是指复盖所有条件取值的所有可能组合。老纳做过一些粗浅的研究,发现与条件直接有关的错误主要是逻辑操作符错误,例如:||写成&&,漏了写!什么的,采用分支复盖与条件复盖的组合,基本上可以发现这些错误,另一方面,条件值复盖与条件值组合复盖往往需要大量的测试用例,因此,在老纳看来,条件值复盖和条件值组合复盖的效费比偏低。效费比较高且完整性也足够的测试要求是这样的:完成功能测试,完成语句复盖、条件复盖、分支复盖、路径复盖。做过单元测试的朋友恐怕会对老纳提出的测试要求给予一个字的评价:晕!或者两个字的评价:狂晕!因为这似乎是不可能的要求,要达到这种测试完整性,其测试成本是不可想象的,不过,出家人不打逛语,老纳之所以提出这种测试要求,是因为利用一些工具,可以在较低的成本下达到这种测试要求,后面将会作进一步介绍。
    关于白盒测试用例的设计,程序测试领域的书籍一般都有讲述,普通方法是画出程序的逻辑结构图如程序流程图或控制流图,根据逻辑结构图设计测试用例,这些是纯粹的白盒测试,不是老纳想推荐的方式。老纳所推荐的方法是:先完成黑盒测试,然后统计白盒复盖率,针对未复盖的逻辑单位设计测试用例复盖它,例如,先检查是否有语句未复盖,有的话设计测试用例复盖它,然后用同样方法完成条件复盖、分支复盖和路径复盖,这样的话,既检验了黑盒测试的完整性,又避免了重复的工作,用较少的时间成本达到非常高的测试完整性。不过,这些工作可不是手工能完成的,必须借助于工具,后面会介绍可以完成这些工作的测试工具。

    白盒测试的测试方法有代码检查法、静态结构分析法、静态质量度量法、逻辑覆盖法、基本路径测试法、域测试、符号测试、路径覆盖和程序变异。


    1.语句覆盖每条语句至少执行一次。
    2.判定覆盖每个判定的每个分支至少执行一次。
    3.条件覆盖每个判定的每个条件应取到各种可能的值。
    4.判定/条件覆盖同时满足判定覆盖条件覆盖。
    5.条件组合覆盖每个判定中各条件的每一种组合至少出现一次。
    6.路径覆盖使程序中每一条可能的路径至少执行一次。



    2. 静态、动态
    静态测试是指无须执行被测代码,而是借助专用的软件测试工具评审软件文档或程序,度量程序静态复杂度,检查软件是否符合编程标准,借以发现编写的程序的不足之处,减少错误出现的概率;

    (互查、走查、会议审查)

    动态测试方法是指通过运行被测程序,检查运行结果与预期结果的差异,并分析运行效率、正确性和健壮性等性能。这种方法由三部分组成:构造测试用例、执行程序、分析程序的输出结果。


    最好的一个类比是检查二手汽车的过程。踢一下轮胎、看看车漆、打开引擎盖检查都属于静态测试技术。发动汽车、听听发动机声音、上路行驶都属于动态测试技术。


    3. 手工、自动化
    手工测试 ,由专门的测试人员从用户视角来验证软件是否满足设计要求的行为。
    (众包测试、探索式测试)


    在考虑自动化测试的时候,我们必须满足人们的要求:
    平台和操作系统的独立性
    数据驱动能力(输入数据,输出数据,元数据)
    可自定义报表(数据库访问、水晶报表)
    易于调试和日志记录
    版本控制友好型的二进制文件
    可扩展性和可定制性(开放的原料药能够与其他工具相结合)
    常见的驱动程序(例如,在java开发的生态系统,这意味着Ant或Maven和流行的IDE)。这使得测试与开发人员的工作流程相结合。
    支持无人参与的测试运行的集成与构建过程和批处理运行。连续集成服务器需要这个。
    电子邮件通知,如反弹消息
    支持分布式执行环境(分布式测试床)
    支持分布式应用(分布式系统)



    自动化测试框架的要求:
    1. 定义如何来表达预期结果
    2. 连接并驱动目标软件运行
    3. 执行测试
    4. 输出结果报告



  • Android SDK和ADT更新失败的解决办法

    2013-01-02 10:32:01

    这几天Google的下载站点总是无法连接,Android SDK自动更新时总是提示下面的错误
    Failed to fetch URL https://dl-ssl.google.com/android/repository/repository-2.xml, reason: Connection to https://dl-ssl.google.com refused
    Failed to fetch URL http://dl-ssl.google.com/android/repository/addons_list-7.xml, reason: Connection to http://dl-ssl.google.com refused

    更新ADT时无法解析https://dl-ssl.google.com/android/eclipse

    原因大家都知道,这里记录下解决办法
    首先,SDK manager里tool->options 里选中强制使用http

    然后修改Hosts文件, 把Google相关站点加入,包括dl-ssl.google.com

    #Google Service
    #Chrome 网上应用
    203.208.46.146 chrome.google.com
    203.208.46.146 clients0.google.com
    203.208.46.146 clients1.google.com
    203.208.46.146 clients2.google.com
    203.208.46.146 clients3.google.com
    203.208.46.146 clients4.google.com
    203.208.46.146 www.googleusercontent.com
    203.208.46.146 lh0.googleusercontent.com
    203.208.46.146 lh1.googleusercontent.com
    203.208.46.146 lh2.googleusercontent.com
    203.208.46.146 lh3.googleusercontent.com
    203.208.46.146 lh4.googleusercontent.com
    203.208.46.146 lh5.googleusercontent.com
    203.208.46.146 lh6.googleusercontent.com
    203.208.46.146 clients1.googleusercontent.com
    203.208.46.146 clients2.googleusercontent.com

    #网页快照
    203.208.46.146 webcache.googleusercontent.com

    #Google SSL
    203.208.46.146 encrypted.google.com
    203.208.46.146 encrypted.google.com.hk

    #Google Docs
    203.208.46.146 docs.google.com
    203.208.46.146 docs0.google.com
    203.208.46.146 docs1.google.com
    203.208.46.146 docs2.google.com
    203.208.46.146 docs3.google.com
    203.208.46.146 spreadsheets.google.com
    203.208.46.146 spreadsheets0.google.com
    203.208.46.146 spreadsheets1.google.com
    203.208.46.146 spreadsheets2.google.com
    203.208.46.146 spreadsheets3.google.com

    #Gmail
    203.208.46.146 mail.google.com
    203.208.46.146 chatenabled.mail.google.com #Gmail中Gtalk聊天服务

    #Google 搜索
    203.208.46.146 www.google.com

    #Google preview
    203.208.46.146 www.googlepreview.com

    #Google 翻译
    203.208.46.146 translate.google.com
    203.208.46.146 translate.googleapis.com

    #Google 搜索建议(IE9)
    203.208.46.146 clients5.google.com

    #Google Code
    203.208.46.146 code.google.com

    #Picasa 网络相册
    203.208.46.146 picasaweb.google.com
    203.208.46.146 lh0.ggpht.com
    203.208.46.146 lh1.ggpht.com
    203.208.46.146 lh2.ggpht.com
    203.208.46.146 lh3.ggpht.com
    203.208.46.146 lh4.ggpht.com
    203.208.46.146 lh5.ggpht.com
    203.208.46.146 lh6.ggpht.com
    203.208.46.146 lh7.ggpht.com
    203.208.46.146 lh8.ggpht.com
    203.208.46.146 lh8.ggpht.com
    203.208.46.146 lh9.ggpht.com
    203.208.46.146 lh6.google.com

    #Google 个人资料
    203.208.46.146 profiles.google.com
    203.208.46.146 browsersync.google.com

    #Google+
    203.208.46.146 talkgadget.google.com #Google+中的聊天服务
    203.208.46.146 ssl.gstatic.com
    203.208.46.146 images-pos-opensocial.googleusercontent.com
    203.208.46.146 images1-focus-opensocial.googleusercontent.com
    203.208.46.146 images2-focus-opensocial.googleusercontent.com
    203.208.46.146 images3-focus-opensocial.googleusercontent.com
    203.208.46.146 images4-focus-opensocial.googleusercontent.com
    203.208.46.146 images5-focus-opensocial.googleusercontent.com
    203.208.46.146 images6-focus-opensocial.googleusercontent.com
    203.208.46.146 plus.google.com

    #Download 下载
    203.208.46.146 dl.google.com
    203.208.46.146 dl-ssl.google.com

    #Groups
    203.208.46.146 groups.google.com

    #Google URL Shortener
    203.208.46.146 goo.gl

    #Google App Engine
    203.208.46.146 appengine.google.com

    #Android Developer
    74.125.113.121 developer.android.com



  • [论坛] UI界面规范,可作界面测试的参考

    2010-01-22 22:33:01

    UI色彩与字体

    1UI字体、色彩要一致

    2)整体色彩搭配要融为一体,起提示作用的部分要清楚醒目

    3)不可修改的字段,统一使用灰色文字显示

     

    窗口风格

    1)所有窗口最大化、最小化风格要一致

    2)报错页面的风格一致,最好有统一的报错页面

    3)类似功能的窗口打开的风格要一致

    4)相同功能在不同模块的名称要一致

    5)子窗体应尽量在显示在主窗体的左上或居中放置

    6)弹出式窗口尽量在不借助滚动条的情况下显示所有内容

    7)窗体最小化/最大化时,控件也要随着窗体而缩放

     

    布局

    1)窗体控件布局和间距尽量与Windows标准保持一致

    2)尽量采用Dock和锚点来让布局合理

    3)尽量让窗体中显示大部分常用功能

     

    菜单深度

    1)菜单深度一般不要超过三层

    2)菜单层次太多时应给出返回主窗口、主分支的快捷链接。

     

    按钮

    1)按钮风格相同,大小相似,字体一致

    2)无效按钮要屏蔽

     

    控件

    1)各复选框和选项框按选择几率的高低而先后排列

    2)复选框和选项框要有默认选项,并支持Tab选择

    3)界面空间较小时使用下拉框而不用选择框

    4)选项数较少时使用选项框,相反使用下拉列表框

     

     

    文本框输入

     

    必输项

    1)必输项中不可为空,不可输入空格

    2)必输项给出必输项标识(*

     

    字段长度

    超过数据库规定长度时不允许输入

     

    格式校验

    1)身份证号、E-MAIL等特定字段的格式要符合需求的规定

     

    日期格式

    1)日期显示格式一致,如 yyyy-mm-dd

    2)使用日期控件,尽量不是手工录入

     

    特殊字符

    1)输入区域输入特殊字符,插入数据库时不出错或提示不允许输入特殊字符。特殊字符包括:'"=~$%^%&#@

     

    英文输入

    英文输入不区分大小写,不可输入汉字、数字及特殊字符

     

    数值字段

    只能输入+ - 0~9及功能键(BackSpace 光标)

     

    字符字段

    1)如果支持日韩文字,则要判断全角假名/半角假名

     

    单行文本框/多行文本框

    1) 长度合适,可以容纳相应文字,但不能超过数据库该字段长度,最好将可以输入的最大字符数标在旁边。建议单行文本框中当输入的字符超过一定长度时再输入无效;对于多行文本框给出最大字符数标识

     

    附件

    1)可正常添加符合格式的附件

    2)附件可正常打开和保存,附件名较长时可正常操作

    3)直接输入错误的附件地址,保存时应给出提示信息

    4)附件打开/保存到本地时,文件名要显示原文件文件名

    5) 附件上传时应作格式和大小的检查,如果格式不对或者附件大小超过最大值,页面应有提示。页面上要有支持上传附件格式和大小的标识。

     

    密码输入

    1)需在需求中定义密码是否允许为空或空格;密码是否允许特殊字符;是否区分大小写,密码的可输入长度

    2)程序中应给出文字说明密码的可输入长度

     

    鼠标

    1)鼠标为不可点击状态时显示箭头,可点击状态显示手型;系统忙时显示沙漏形状

     

    光标定位

    1)打开新增(修改)页面时,光标初始定位在第一个待输入的文本区

    2)因输入不正确提示用户重新输入时,光标默认focus在出错的输入区,并高亮全选该错误输入

    3)若必输项未填写完毕就提交,应给出说明信息并能自动获得焦点

    4)可写控件检测到非法输入后应给出说明并能自动获得焦点

     

    TAB

    1)界面支持键盘自动浏览按钮功能。即TAB自动切换功能

    2Tab键的顺序与控件排列顺序要一致,一般情况下总体从上到下,同时行间从左到右的方式
  • QTP中页面的基本异常检查

    2010-01-18 22:44:56

    页面异常输入测试是系统测试的一个重要方面,但是因为比较繁杂,人工测试时往往难以完全覆盖,此时采用自动化测试,就有相当的优势了。

    如下图就是一个典型的信息录入页面

    其中就包括很多异常输入测试点:

    名称不能包含特殊字符,固定的电话格式,固定的手机格式,银行账号(必须全为数字),付费号码长度限制,手机号码格式、长度限制,Email格式限制等

     

    其实异常策略是有通用性的,现总结如下:

    1. exp@@SpecialChar(e_chr)     包含特殊字符,e_chr为指定的特殊字符

    2. exp@@StringLenMax(e_len)   字符串超过最大长度,e_len为最大长度值

    3. exp@@ StringLenMin(e_len)   字符串不足最小长度,e_len为最小长度值

    4. exp@@String                字符串包含数字(要求全字符)

    5. exp@@Num                 字符串包含字符(要求全数字)

    6. exp@@NumMax(e_max)    输入超过指定最大值,e_max,最大值

    6. exp@@NumMin(e_min)    输入不足指定最大值,e_mmin,最小值

    7. exp@@NumLenMax(e_len)    数值长度超限,e_len,长度最大值

    8. exp@@NumLenMin(e_len)    数值长度不足,e_len,长度最小值

    9. exp@@StringPre(e_pre)       字符串不为指定前缀,e_pre,前缀值

    10. exp@@NumPre(e_pre)       数值不使用指定前缀,e_pre,前缀值

    11. exp@@Email               数值不为标准Email格式

    12. exp@@Need               必输入项,提供空字符串

     

     

    具体实现上,在准备数据文件时,提供两种数据:

    1.      每个字段的默认输入值,即正确值。也是自动化程序执行时默认输入的数据

    2.      异常值,针对每个字段,提供该字段可能需要的异常策略,对所有异常进行遍历。

    第一行为默认值,第二行为字段对应的异常策略

     

    分三个函数来处理

    1.      执行函数

     

    Public Sub excep_OpUser()

                  routingname = "企业用户输入-异常测试"

                  载入数据表数据的第2

    GE_SetCurRow OppDataFile,"企业用户",2

                  Dim objStr,oScript,i

                  set bjStr = CreateObject("Scripting.Dictionary")

                  set Script. = CreateObject("Scripting.Dictionary")

                 

                  根据数据表字段设置每个字段的QTP执行语句

                  for i = 1 to DataTable.GetSheet("UserData").GetParameterCount

                         if DataTable.GetSheet("UserData").GetParameter(i)="企业名称" Then _

                                 objStr.add DataTable.value(i,"UserData"),".WebEdit("opername").set "

                         。。。。

                  Next

                 

                  调用异常数据生成函数,返回值保存在dictionary对象oScript

                  Gen_excepData(objStr,oScript)

                 

    依次对含异常策略的字段进行异常测试

                  For i = 0 to oScript.Count-1

                         Call OpUserSet(1,oScript(i))

                  Next

                 

                  set bjStr = Nothing

                  set Script. = Nothing

           End Sub

     

    2.      异常数据生成函数

     

    Public Function Gen_excepData(byval dObj,byRef oScript)

           异常值,正确值,异常类型,异常参数

    Dim errorValue,CorrectValue,expType,expPara

           Dim objName,scriptstr

           Dim i,j,expItem

           expItem = 0    记录异常数

           Randomize

          

           for i = 1 to DataTable.GetSheet("UserData").GetParameterCount

                  第一行数据为默认正确数值

                  CorrectValue = DataTable.GetSheet("UserData").GetParameter(i).ValueByRow(1)

                  datatable.SetCurrentRow 2

                 

                  if Instr(Datatable.value(i,"UserData"),"exp@@")>0 Then

                         objName = dObj.Item(Datatable.value(i,"UserData"))

                         同一字段多种异常策略的处理

                         arr1 = split (Datatable.value(i,"UserData"),"|",-1,1)

                         For j = 0 to Ubound(arr1)

                                获取异常类型和异常参数

    If RegExpTest("exp@@.{1,}\(.{1,}\)",arr1(j)) Then

                                       exptype = Mid(arr1(j),6,InStr(arr1(j),"(")-6)

                                       expPara = Mid(arr1(j),InStr(arr1(j),"(")+1,InStr(arr1(j),")")-InStr(arr1(j),"(")-1)

                                Else

                                       expType = replace(arr1(j),"exp@@","")

                                End If                  

                                不同策略对应的数据生成

                                select Case expType

                                Case "SpecialChar"

                                       errorValue = Replace(CorrectValue,Right(CorrectValue,1),"%")

                                       scriptstr = objName + chr (34) + errorValue + chr(34)

                                       expItem = expItem + 1

                                       oScript.add "excepData" & expItem,scriptstr

                                       errorValue = Replace(CorrectValue,Right(CorrectValue,1),"'")

                                       scriptstr = objName + chr (34) + errorValue + chr(34)

                                       expItem = expItem + 1

                                       oScript.add "excepData" & expItem,scriptstr

                                       errorValue = Replace(CorrectValue,Right(CorrectValue,1),"/")

                                       scriptstr = objName + chr (34) + errorValue + chr(34)

                                       expItem = expItem + 1

                                       oScript.add "excepData" & expItem,scriptstr

                                       errorValue = Replace(CorrectValue,Right(CorrectValue,1),":")

                                       scriptstr = objName + chr (34) + errorValue + chr(34)

                                       expItem = expItem + 1

                                       oScript.add "excepData" & expItem,scriptstr

                                       errorValue = Replace(CorrectValue,Right(CorrectValue,1),"*")

                                       scriptstr = objName + chr (34) + errorValue + chr(34)

                                       expItem = expItem + 1

                                       oScript.add "excepData" & expItem,scriptstr

                                       errorValue = Replace(CorrectValue,Right(CorrectValue,1),"&")

                                       scriptstr = objName + chr (34) + errorValue + chr(34)

                                       expItem = expItem + 1

                                       oScript.add "excepData" & expItem,scriptstr

                                       errorValue = Replace(CorrectValue,Right(CorrectValue,1),"?")

                                       scriptstr = objName + chr (34) + errorValue + chr(34)

                                       expItem = expItem + 1

                                       oScript.add "excepData" & expItem,scriptstr

                                       errorValue = Replace(CorrectValue,Right(CorrectValue,1),"""")

                                       scriptstr = objName + chr (34) + errorValue + chr(34)

                                       expItem = expItem + 1

                                       oScript.add "excepData" & expItem,scriptstr

                                       errorValue = Replace(CorrectValue,Right(CorrectValue,1),"<")

                                       scriptstr = objName + chr (34) + errorValue + chr(34)

                                       expItem = expItem + 1

                                       oScript.add "excepData" & expItem,scriptstr

                                       errorValue = Replace(CorrectValue,Right(CorrectValue,1),">")

                                       scriptstr = objName + chr (34) + errorValue + chr(34)

                                       expItem = expItem + 1

                                       oScript.add "excepData" & expItem,scriptstr

                                       errorValue = Replace(CorrectValue,Right(CorrectValue,1),"|")

                                       scriptstr = objName + chr (34) + errorValue + chr(34)

                                       expItem = expItem + 1

  • QTP中时间的处理

    2010-01-18 22:43:34

    自动化测试中,经常遇到页面需要输入时间,而这个时间很多时候是当前时间之后某个范围之类才有效。我们采用数据驱动时如果采用绝对时间,则数据复用性就很差了,数据需要经常修改。所以采用相对时间

     

    下面的函数用于获取相对时间

    '------------------------------------------------------------------------

    '获取以当前时间为参照的偏移时间

    'increTime: 偏移时间量,可使用负数 格式:day:hour:min:sec  如 1:3:8:23

    '------------------------------------------------------------------------

    Public Function GetTime(byval increTime)

           Dim y,m,d,h,n,s,timeArray

          

           timeArray = split(increTime,":",-1,1)

           d= timeArray(0)

           h= timeArray(1)

           n= timeArray(2)

           s= timeArray(3)

          

           GetTime = dateadd("d",d,now)

           GetTime = dateadd("h",h,GetTime)

           GetTime = dateadd("n",n,GetTime)

           GetTime = dateadd("s",s,GetTime)

          

           ' change to GE Time type

           Dim dateArr,timeArr

           timeArray = split(GetTime," ",-1,1)

           dateArr = split(timeArray(0),"-",-1,1)

           y = dateArr(0)

           m = ExpandByZero("L", dateArr(1),2)

           d = ExpandByZero("L", dateArr(2),2)

          

           timeArr = split(timeArray(1),":",-1,1)

           h = ExpandByZero("L", timeArr(0),2)

           n = ExpandByZero("L", timeArr(1),2)

           s = ExpandByZero("L", timeArr(2),2)

          

           GetTime = y  & "-" & m & "-" & d & " " & h & ":" & n & ":" & s

     

    End Function

    '------------------------------------------------------------------------

    '以0扩展当前字符串

    'way: 扩展方式 L-左扩,R-右扩

    'OrigStr: 原字符串

    'HopeLen: 扩展后字符长度

    '------------------------------------------------------------------------

    Public Function ExpandByZero(byval way,byval OrigStr,byval HopeLen)

       Dim i,ZeroStr

       ZeroStr = ""

       For i =1 to HopeLen - len(OrigStr)

                  ZeroStr = ZeroStr & "0"

       Next

       If way = "L" Then

                  ExpandByZero = ZeroStr & OrigStr

           elseif way = "R" Then

                  ExpandByZero = OrigStr & ZeroStr

           else

                  Exit Function

       End If

    End Function

  • QTP中类的基本使用方法

    2010-01-18 22:39:32

    对于共同开发的自动化测试项目,实例方便的调用是很重要的。QTP采用的是vbscript脚本,所以也支持类,但是应为vbs并不支持类的继承,所以只能算作一种“拟类”。采用类对脚本进行封装,有很多好处,对于测试执行人员,可以通过项目情况对封装的类进行调用,而并不必关心类实现的细节。

    此处对QTP类的使用进行一些总结。

    '类名称

    Class TestCase

           Private DataFile

          

           ' ----用例预置条件

           Private Function CasePrepare()

                 

           End Function

          

           ' ----测试数据输入

           Public Function CaseData(byval RowNum)

                 

           End Function

          

           ' ----测试执行

           Public Function CaseRun()

                 

           End Function

          

           ' ----测试结果检查

           Public Function CaseCheck()

                 

           End Function

          

           '获取测试用例号

           Public Property Get CaseID()

                  CaseID = "TestCase_0001"

           End Property

          

           '获取测试用例名称

           Public Property Get CaseName()

                  CaseName = "用户登录"

           End Property

          

           '----构造函数----

           Private Sub Class_Initialize() 

                  DataFile = "C:\autotest\data.xls"

                 

                  Call CasePrepare()

        End Sub

          

           '----解构函数----

           Private Sub Class_Terminate()

                 

           End Sub

     

    End Class

     

    其中Class_initialize为构造函数,类初始化时调用,此处预设了数据文件,并在此处调用了用例预置函数。

    Class_Terminate为解构函数,一般用于释放类执行过程种占用的内存等

    Property Get用于获取类的属性,此处获取该测试用例类的ID,和名称属性

     

    模拟测试用例,类中包含了测试用例的几个部分:

    CasePrepare 测试预置条件,如测试用户登录,此处可以判断登录界面是否已经显示

    Casedata: 测试数据准备,如测试用户登录,此处可以载入登录用户、登录密码等数据

    CaseRun:测试执行,如测试用户登录,此处可以执行输入验证码,点击登录按钮等操作

    CaseCheck:执行结果检查,如测试用户登录,此处可以对登录结果进行检查,如页面是否正确跳转,如用户、密码不对,是否正确显示提示信息等。

     

    具体在QTP中的使用如下:

    Dim CaseLogin

    Set CaseLogin = New TestCase

    CaseLogin.CaseData 2 载入数据文件中的第2行数据作为测试输入

    CaseLogin.CaseRun

    If CaseLogin.CaseCheck Then

      Case_LogInfo “测试用例 ”CaseLogin. CaseID & “测试通过!”,MicPass

    Else

    Case_LogError “测试用例 ”CaseLogin. CaseID & “测试失败!”,MicFail

    End If

  • <原创>一个批处理执行Test的VBS脚本

    2007-08-03 10:35:04

    BatchRun.vbs(转载请注明出处)

    同目录下需存在runlist.txt文件,保存需要批量运行的test路径,形如:

    c:\autotest\test1
    c:\autotest\test2

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

    On Error Resume Next
    error.clear
    Dim qtApp
    Dim qtTest
    Dim qtResultsOpt
    Dim fso, MyFile,TestName
    Const ForReading = 1, ForWriting = 2

    Set WshShell = CreateObject("Wscrīpt.Shell")
    WshShell.Popup "开始批量执行自动化测试脚本!", 3, "my AutoTest", 0 + 64

    Set qtApp = CreateObject("QuickTest.Application")
    qtApp.Launch

    qtApp.Visible = True
    qtApp.Options.Run.RunMode = "Fast"
    qtApp.Options.Run.ViewResults = False

    Set fso = CreateObject("scrīpting.FileSystemObject")
    Set MyFile = fso.OpenTextFile(".\RunList.txt", ForReading, True)
    Do While MyFile.AtEndOfStream <> True
     TestName = MyFile.ReadLine

     qtApp.Open TestName, True
     Set qtTest = qtApp.Test
     qtTest.Settings.Run.OnError = "Dialog"
     
     Set qtResultsOpt = CreateObject("QuickTest.RunResultsOptions")
     qtResultsOpt.ResultsLocation = TestName &"\AutoRes"
     
     qtTest.Run qtResultsOpt, True
     qtTest.close
     wait 1
    Loop

    MyFile.Close
    qtApp.Quit

    MsgBox "自动化测试脚本执行完毕!脚本测试结果存放在各自的AutoRes目录下,请用QTP result工具查看"

    Set fso = Nothing
    Set qtResultsOpt = Nothing  
    Set qtTest = Nothing 
    Set qtApp = Nothing
    Set WshShell = Nothing

Open Toolbar