发布新日志

  • 从报表去看业务模块的功能问题

    2009-09-10 16:09:32

    如果你的系统里有很多的报表,那么强烈建议好好的去研究一下这些报表。会有意外的收获。举例说明一下我今天遇到的问题:

    某个业务功能在操作成功之后需要记录一个时间。而这个时间字段是生成后续某个报表A的依据,而报表A的数据需要和报表B汇总出来的金额是一致的。否则可以认定是某个环节出了问题。最后判断出来时前面某些业务没有记录关键时间字段值。

    由此可见,用户之所以要看那么多报表其实也是考虑到这一点,可能是系统问题,可能是用户的误操作都会导致报表和报表之间的数据不一致。

    所以,如果你的系统有报表功能的,请特别关注这些有关联的报表,好好去研究他们,如果你只确保报表的取值和数据展示没问题是不够的。

  • QTP连接oracle数据库的脚本

    2009-09-02 15:29:19

    07年底做过一个qtp的项目,脚本都忘记的差不多了,自己美来得及备份就被派出去了,还好有个同事将之前的代码做过总结,赶紧偷过来,哈哈
     
     
    DBOperation.vbs
    '-----------------------------------------------------------------
    'function:数据库连接
    'call method:在调用文件中先定义Res,Cmd
    'For example:Dim  Res,Cmd
    '             DBConnect()
    '-----------------------------------------------------------------
    Public Sub DBConnect()
          Dim StrCon
          Set Res = CreateObject("ADODB.Recordset")  
          Set Cmd = CreateObject("ADODB.Command")
          'Oracle
          StrCon ="DRIVER={Oracle in OraHome92};SERVER=test;UID=userid;PWD=password;DBQ=test;DBA=W;APA=T;EXC=F;XSM=Default;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;GDE=F;FRL=Lo;BAM=IfAllSuccessful;MTS=F;MDI=Me;CSR=F;FWC=F;PFC=6000;TLO=O;"
          Cmd.activeconnection=StrCon
          Cmd.CommandType =1
    End Sub
    '-----------------------------------------------------------------
    'function:执行SQL语句
    'Input parameter: StrSql
    'For example:Dim sql
    '             sql="select * from admin_groups"
    '             ExecuteSql(StrSql)           
    '---------------------------------------------------------

    Public Sub  ExecuteSql(StrSql)
     Cmd.CommandText=StrSql
     Set  Res = Cmd.Execute()

    End Sub

    '---------------------------------------------------------
    'function:关闭数据库
    'For example:DBClose()
    '---------------------------------------------------------
    Public Sub DBClose()
     Set Res=nothing
     Set Cmd.activeconnection=nothing
     Set Cmd=nothing
    End Sub

    调用例子:

    ExecuteFile  "c:\DBOperation.vbs"

    Dim  Res,Cmd

    DBConnect()  '调用连接数据库函数

    sql ="select  count(*) from admin_groups"

    ExecuteSql(sql) '调用执行sql函数

      Do while not Res.eof

          Msgbox(Res(0))

          Res.MoveNext

      Loop

    DBClose()  '调用关闭数据库

  • 第一个ruby脚本--登陆功能

    2009-07-31 15:00:51

      用ruby进行自动化测试学习的第一步:
      目标:编写登陆功能的脚本,最简单的方式
      脚本:

      require 'watir'
     ie = Watir::IE.new                                   
     ie.goto('http://*****')
     ie.text_field(:name, 'username').set('邵菲')
     ie.text_field(:name, 'password').set('sf111111')
     ie.button(:name, 'Submit').click
      sleep(3)#点击登录按钮后登陆需要一点时间,所以最好加上停顿的时间
      if ie.contains_text("******")  #判断页面是否包含相应文字
      puts "登陆成功"
    else
      puts "登陆失败"
    end
    ie.close                                                   
     

       心得:
         1、最开始编写ruby脚本,请不要使用类。(虽然用watirerecorder去录制的时候默然是以类的形式展示的)
         2、watirerecorder录制的脚本你是要及时进行修改的,用这个录制只是方便知道各对象ID

    ======================华丽丽的分隔线===========================

      目标:编写登陆功能的脚本,将登陆写成一个具体的方法,通过调用的方式去实现
      脚本
          require 'watir'

      #登陆的方法
      class Login_counter
        def initialize(username,password,outputt)#初始化参数
          @username,@password,@outputt=username,password,outputt
        end
       
        def Login_sf
         
          $ie.text_field(:name, 'username').set(@username)
          $ie.text_field(:name, 'password').set(@password)
          $ie.button(:name, 'Submit').click
          sleep(3)
          if $ie.contains_text(@outputt)  #判断页面是否包含相应文字
              puts "登陆成功"
          else
              puts "登陆失败"
          end
        end
      end

     $ie = Watir::IE.new                                   
     $ie.goto('http://counter.sit.alipay.net/logon.htm')
      username="邵菲"
      password="sf111111"
      utputt="您现在登录的是支付宝结算中心业务平台"
      f=Login_counter.new(username,password,outputt)
      f.Login_sf
    $ie.close    

      心得:
        
    1、因为ruby是从上向下执行脚本内容的所以类方法定义需要在调用之前去定义
           2、ie变量是局部变量,在class里是无法调用的,需要用全局变量$ie

    =====================华丽丽的分割线===============

         目标:通过测试数据驱动的方式去实现登陆自动化测试
         方法:将测试数据存于excel中,将excel的数据读取到数组,通过取数组值赋参数
          脚本:

    require 'watir'
    require 'jcode'
    require 'win32ole'
    $KCODE = 'e'
    #----------------------要想读取中文就需要加上以下脚本------------------------------------
    #require 'jcode'
    #$KCODE='e' # 将汉字代码设为EUC。在Windows中是 's'
    #print 'abcdef'.tr( 'a-z', 'A-Z' ), "\n"
    #----------------------------------------------------------
      #-----------------------------登陆的方法
      class Login_counter
        def initialize(username,password,outputt)
          @username,@password,@outputt=username,password,outputt
        end
       
        def Login_sf
         
          $ie.text_field(:name, 'username').set(@username)
          $ie.text_field(:name, 'password').set(@password)
          $ie.button(:name, 'Submit').click
          sleep(3)
          if $ie.contains_text(@outputt)  #判断页面是否包含相应文字
              puts "登陆成功"
          else
              puts "登陆失败"
          end
        end
      end
         
       #-------------------------在这里需要加入读取excel的方法
    excel = WIN32OLE::new('excel.Application')
    workbook = excel.Workbooks.Open('C:\Documents and Settings\wb-shaof\桌面\ruby\testdata.xls')
    worksheet = workbook.Worksheets(1) #定位到第一个sheet
    worksheet.Select
     #将excel的值读入到一个数组中
    line = '1'
    data = []
    while worksheet.Range("a#{line}")['Value']
       data << worksheet.Range("a#{line}:d#{line}")['Value']#<<为连接符,对数组来是说增加元素.这里的data为三维数组,最开始初始化的时候已经是数组
       line.succ! #succ函数为返回下一个值,和line=line+1(前提:line=1)效果一样
    end
    excel.Quit #退出excel
    p data

    #-----------------------------------取出data数组的值,赋给登陆功能的各个参数,然后循环去取

     

       #-------------------------------


      $ie = Watir::IE.new                                   
     $ie.goto('http://counter.sit.alipay.net/logon.htm')
      username="邵菲"
      password="sf111111"
      utputt="您现在登录的是支付宝结算中心业务平台"
      f=Login_counter.new(username,password,outputt)
      f.Login_sf
      $ie.close  


     

  • RUBY学习笔记

    2009-07-23 10:02:08

    在运行.rb文件的时候报以下错误:

    c:/ruby/lib/ruby/gems/1.8/gems/watir-1.6.2/lib/watir/windowhelper.rb:44:in `check_autoit_installed': The AutoIt dll must be correctly registered for this feature to work properly (Watir::Exception::WatirException)

    解决办法:

    先看C:\ruby\lib\ruby\gems\1.8\gems\watir-1.6.2\lib\watir\AutoItX3.dll是不是存在这个文件

    如果存在,则运行

    regsvr32 "C:\ruby\lib\ruby\gems\1.8\gems\watir-1.6.2\lib\watir\AutoItX3.dll"

  • 需求分析阶段和测分阶段的一些想法【原创】

    2009-06-06 12:28:27

    项目终于结束了,这次经历的项目规模应该是来这里之后的最大型的项目。又经历了一次项目之后的感想。

    项目类型:大型重构型项目。大部分是老大业务规则,小部分的新业务需求(这部分内容是少不了的)

    STA:测试分析人员,项目测试负责人

    ---------------------------------------------------------------PRD(需求分析)评审阶段-------------------------------------

    自身不足:

    1、对prd需求理解不深入,有个总体感觉觉得不好,但是实例却举不出来多少
    2、对于prd没有完全弄明白的情况,很多问题都还是未知数,却在prd评审这关上轻易放过了
    3、和PD的沟通很少。因为一开始就认定和PD沟通没用,所以宁愿选择了和业务方去沟通。并且和业务方沟通的结果没有及时反馈给PA

    改进方法:

    1、prd阅读阶段,加强和PA的沟通。当然和业务方进行沟通也是有必要的,但是这个沟通的过程必须拉上PD在场。
    2、prd评审期间,如果因为时间比较短对prd阅读不充分,那么一定要把这个信息告诉SQA,如果提不出问题来,那么请允许我以结构不清晰,需求描述太跳跃等理由去拒绝prd的评审通过,为自己争取更多一些的prd阅读时间。
    3、prd阅读期间需要将一些阅读中的问题及时反馈给prd,并要求及时的调整prd文档到你所预期想要的。

    后续建议:

    1、prd描述必须有清晰的体现流程的结构
    2、prd的需求描述必须集中,比如属于文件导入的需求点全部都应该放在一块来描述。
    3、prd仅包含本次需要实现的内容。像改造型项目,老的实现逻辑我们可以去老系统看,prd里我们只关心我们新的系统需要实现成什么样子
    4、PRD的粒度问题
    测试用例有粒度的问题,prd同样应该有粒度问题。我觉得我们以前的prd文档肯定是粗粒度的,所以我们才有了测试分析这么一个角色,去分解这些粗粒度的需求。但是实际上prd应该是细粒度的。但是越细pd花费的时间越多,那针对有些项目,前期时间比较短,那么需要明确prd的一个粒度问题。prd要细到什么样的程度,也是作为prd评审的依据之一
    5、prd的迭代问题(建议放在项目评分机制中)
    开发过程有迭代,prd同样需要迭代的过程。prd文档并不是prd评审通过之后就没事了的,我们不能要求prd文档覆盖的需求点是100%的,我们也允许后面的需求增删改,但是每一次的变动,都需要实时更新prd文档,并且及时通知到整个项目组。开发过程中,有的时候是业务方有需求要增加,有的时候因为开发设计的问题也会影响到需求变更,所有的这些pd都要及时做好跟踪。
    6、需求跟踪表:对于有业务方加入跟踪项目特别受用的一点是制定需求跟踪表,引导业务方有需求不要直接找开发,由业务方填写需求跟踪表。并及时去要到该表明确需求,同时也需要把这个信息及时告诉PA让他即使更新文档并通知到整个项目组。
    7、问题跟踪列表:STA从这个阶段开始就要准备一个问题跟踪列表,把项目过程中任何待明确的问题记录好,内容可以分成以下几个内容:日期,业务点,问题描述,确认结果,确认人,是否明确。每天都需要去跟踪这些问题的解决情况。确保当天的问题当天解决、

    ---------------------------------------------------------------测试分析阶段---------------------------------------------------

    自身不足:

    1、测试分析是直接在QC的需求里完成的,然后最终的文档是直接从QC导出,导致文档结构目录像臭裹脚布,很长很长。开发都看晕了
    2、测分文档没有进行评审,而是就发项目组进行了确认。只有业务方给出了建议
    3、后续过程中确认的需求点没有坚持做完更新
    4、测分阶段对于外围产品线的配合问题没有及早发现并且提出

    改进方法:

    1、测分应该站在一个更宏观的角度去看问题。测分阶段可以先不清楚内部具体的细节,但是必须先和PA以及系分沟通明确对外围产品的影响,明确好其他产品线的配合点并及时做好沟通安排。
    2、测分评审必须要推动项目组去举行。确保测分文档的质量。

    后续建议:

    1、测分文档同样要求结构清晰。功能描述点集中
    2、测分文档里最好先回答我两个问题:这个功能是谁在什么情况下用的?如何用的?
    3、测分文档要有业务流程图。即便是prd里已经有的,你也应该粘贴过来,如果没有,那你就自己画出来,并标注序号
    4、测分文档的规则说明尽量针对业务流程图的某个步骤来进行说明。
    5、测分文档同样需要有及时的更新版本,在每个版本里标注变更内容。这个点需要SQA加入监督一下。(这点做到很难,希望下个项目我能做到!!)
    6、将测分评审进行到底。但是建议测分评审不需要全体项目组成员,只需要关键人物,业务方,PA,系分,相关测分即可
    7、测分文档一边书写一边可以让身边的人帮你看,随时给你一件,采纳好的意见,实时更新你的文档到最佳状态

    ---------------------------------------------------------------测试计划阶段----------------------------------------------------

    自身不足:

    1、自己本身有很强的计划意识,并且一直坚持计划一定要细,同时也有制定出详细计划,但是在计划的执行和控制做的还不到位并且自身测试任务计划性比较薄弱
    2、项目过程中对项目测试重点内容的把握还不到位,这样必然导致做出来的计划不可执行性,同时会带来资源问题

    改进方法:

    计划你要不就不要做,做了你就好好的按照着去执行,并且后续要注意做好监控,及时和组员沟通,获取计划执行进度情况,及时做好计划的更新。

    后续建议:
    1、大型项目计划不需要细化到天,可以做到细化到周、这周内的工作任务大家可以自由调整。
    2、制定计划的时候除了根据不同的人同的能力去考虑,还需要考虑不同质量的prd文档和系分文档。如果前期工作做不好的话,那么需要在测试计划中严重考虑详细设计,需求沟通的时间。目前感觉这两块在过程中也是占用很大比例的。
    3、测试用例执行阶段的测试计划依据必须是来自于用例的。利用好qc的测试实验室功能。把测试实验室和计划关联起来。这样计划的监控会更准确
    4、STA如果本身有测试任务的,在制定计划的时候绝对不要再给自己安排很多的测试任务。

    ---------------------------------------------------------------用例设计阶段----------------------------------------------------

    自身不足:

    1、组内的用例规范没有很好的统一
    2、组内的用例粒度也不统一
    3、前期组内用例不完整,拖到项目结束之后才来补充用例

    改进方法:

    1、用例规范和粒度问题没有很好的统一,关键是每个人的认知度不一样,所以需要花时间和组员在这方面达成一致意见
    2、在用例阶段必须保证用例的完整性。不要认为哪些用例是可以不用写的,只要是改造到过的都需要写测试用例

    后续建议:

    1、对于用例规范和粒度问题需要前期和组员沟通,统一意见。
    2、用例设计前期必须要去和开发沟通实现逻辑,如果开发没有详细设计,那么非常好用的办法就是自己来画时序图的方式来和开发确认。
    3、确认开发实现逻辑的过程中需要思考去发掘设计当中的问题,你的想法要及时提出来和开发进行沟通。这个就是给设计提bug。
    4、定期进行组内用例review,确保用例的完整性和规范性。
    3、用例设计和执行阶段,建议测试尽量离开发和需求方近一些。确保信息获取的及时和准确,也能确保自己参与其中(工作模式问题)
    4、用例设计的粒度问题。坚决反对太细的原则,一定要考虑用例的可维护性。还有反对那种n个用例内容写了一大片,实际其中只有几个字的差别的用例。这种用例可维护性极差。对于相同的数据准备步骤和操作步骤,建议提取到上级目录里。
    5、用例评审建议单对单的模式。或者一对多。找和你评审内容相关的人来进行评审。和他们面对面的去沟通,这种情况下,测试和开发都会一起思考。以前的评审模式很多是走形式。

    ---------------------------------------------------------------交付测试阶段----------------------------------------------------

    后续建议:

    1、 在qc里的用例中添加是否交付测试项,并且每个测试用例,加上对应的开发,然后导入到测试实验室,让开发自己按照交付测试用例,去自测,自测通过才是交付测试通过了。
    2、 充分利用QC这个方法挺不错的,但是建议以后的项目在交付测试时候,在测试计划里添加一些常用属性项,不要在测试实验室里添加。
    3、交付测试结束,要及时发送交付测试结果报告。

    ---------------------------------------------------------------用例执行阶段----------------------------------------------------

    自身不足:


    1、宏观大的控制方面较薄弱
    2、和其它线关于有交集的问题沟通方面也有问题。

    改进方法:

    1、本身有测试任务的STA不要太关注个人的任务,要站在宏观的角度去看项目的进度情况。因为不代表你自己的进度没问题,就是大家的进度没问题了。也不要听组员片面之说,一定要自己去想办法了解真正的执行进度情况。

    2、碰到和其他线交集的问题的时候,先想一个问题:我能做什么,如果我来做我的困难是什么。需要及时将这个困难反馈给总STA。资源问题找总STA去负责解决

    后续建议:

    1、用例执行过程中,要及时的和业务方,PA和开发保持沟通,因为这个阶段需求,设计时刻在变,你得想办法及时获取这些变更,同时要做好督促PA和业务方以及开发将这些变更通知到整个项目组。这里我觉得在项目初期必须明确谁来做这个事情,建议可以让PM去负责。这个也建议加入项目评分里面去
    2、面对执行期间的变更,需要及时调整计划,更新测分文档,维护好用例
    3、执行期间计划的调整不仅仅是考虑需求或者设计变更之后的测试执行时间,还需要考虑变更之后,文档维护和用例维护的时间。
    4、执行期间很很重要的一件事情就是总结。不要把总结都放到项目结束,一定养成在项目期间就做总结的习惯。这点很受用,帮助的不仅是你自己,还有其他的测试,甚至是开发
    5、基于完整的测试用例的大前提,每个测试阶段要建立好QC的测试实验室,并把测试进度情况通过实验室体现出来。这个也需要在前期和组员约定好。测分同学要做检查
    6、本身有测试任务的STA一定要花时间去自己了解组员的执行情况。(这个如果测试实验室建立的好的话,这个是个很好的办法)

    ---------------------------------------------------------------后续跟踪---------------------------------------------------------

    后续建议:

    后续线上问题跟踪,很好的办法就是主动和业务方保持沟通。告诉业务方上线后的问题及时发给测试一份,然后STA要加上测试跟踪人,去跟踪这些问题的解决情况。并且要及时做好分析工作。

  • 测试需求分析的步骤:

    2009-02-27 13:23:14

    测试需求分析的步骤:
    1、理解需求:理解项目目标---用户问题---解决方案---项目需求
    2、理解业务流程,包括新概念及专有名词。(业务流图)
    3、需求检查:正确性(是否是真实的用户需求);可测性(通过确定的操作过程,可以得到明确的结果)。
    4、提取业务功能点(功能图)
  • 获取运行时对象的属性值(原创)

    2007-10-24 21:45:44

       今天在录制脚本的时候遇到一个问题,就是某个weblist对象,用Object Spy取查看,运行时对象的value属性值和测试对象的value的值不一样,而在我的脚本中,两个不同的值我都用到,最后找到解决办法如下:

    取得测试对象的value的值可以用下面的方式:

    a=Browser("Find a Flight: Mercury").Page("Find a Flight: Mercury").WebList("fromMonth").GetROProperty("value")

    取得运行时对象的value的值方法如下:
    a=Browser("Find a Flight: Mercury").Page("Find a Flight: Mercury").WebList("fromMonth").object.value

    这个方法灵感来源于erics的空间的这句话:“

    如果希望改变应用程序中对象的属性值,应该通过“Object.object”方法,来改变对象的Run-time属性。

    ”,感谢erics

  • QTP实现随机产生不重复的查询条件

    2007-10-16 22:16:34

       查询功能的测试,对于查询条件组合的实现,是通过随机产生查询条件个数n,并随机取得这n个条件,并且要求不能重复,对于这部分代码实现如下:

    conArrayNum=array ("mem_info.HICN","mem_info.FIRST_NAME","mem_info.LAST_NAME","mem_info.MEMID","mem_info.CONTRACT_NUMBER","mem_info.ENROLLMENT_STATUS","MEM_CURRENT.PROV_GROUP_NUM","RT_PROVIDER.RX_ID","MV_SUSPECT.SUSPECT")'存放查询条件的数组
    maxNum=9
    rndNumber = RandomNumber(0, maxNum)'随机产生查询条件个数
    msgbox(rndNumber)

    Dim x,y,'y表示随机取得的条件所存放数组ConArray的下标
    For  x=1 to rndNumber

     k=RandomNumber(0, maxNum-1)'随机取得条件数组的位置

     y=0

    '每次随机产生的条件会有重复,该方法用来排除产生相同的条件的情况

     If  x=1 Then
          ConArray(0)=k’第一个条件,不用考虑重复问题,直接存入输组中

     else  '当取第二个条件时,就要开始和前面已经产生的存放在ConArray数组中的数据进行比较,相同则重新去取随机数
       Do while y<x-1
        If ConArray(y)=k Then
          k=RandomNumber(0, maxNum-1)
          y=-1
                  End If
        
          y=y+1
       Loop
            ConArray(y)=k

      End If

    NEXT

  • QTP实践总结

    2007-10-08 09:32:03

    在QTP的使用过程中碰到一些问题,总结如下:

    1、QTP的注释用',多行注释的办法,是选中要注释的部分,按Ctrl+M,取消注释则用Ctrl+Shift+M

    2、如果某个test存在多个action的情况,并且其中某个action在datatable中设置了多条数据,想仅仅循环运行当前action的话可以右键单击->Action call properties->Run on all rows

    3、获得checkpoint返回值的办法:加check()比如:

    a=browser("Login Page").Page("Login Page").WebEdit("J_username").check (checkpoint("j_username"))

    4、Datatable中取得某一列的值用以下方法:

    msgbox “GetParameter-i:”&DataTable.GetSheet("51sheet").GetParameter(1).value

    5、数据库检查点:SERVER为SID,UID为用户,PW为用户密码,DBQ数据库和SID对应上

    6、参数和字符串连接用“&”

    7、VB中条件语句里,条件中的两个字符串变量比较要注意空格问题,用trim()

    比如:If trim(webdata)=trim(dbdata) then .....

     

  • 我做的QTP入门培训材料

    2007-09-23 20:20:29

      刚进公司的第一个项目就是做的QTP脚本的开发,而组长的第一个任务就是做一个QTP的培训,因为个人也是菜鸟级人物,QTP也是自学中,刚刚入门不久,所以做的培训稿仅仅适用于入门级别,而且拿来当例子的部分也是很简单的,不过也是我的劳动成果,而且我们组长看了之后说看完培训稿之后至少知道是怎么回事,怎么去简单应用了的,因此在这里拿出来和大家分享,希望大家能多提提建议。

      需要的朋友,留下邮箱地址,我发邮件给你们,这里好像不能上传附件...

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

    我已经很久没关注过自己这篇日志了。没想到还有这么多人找我要。
    这样吧。我有空把这个以日志形式发到我自己的博客,大家自己看好了。我尽量在本周末加上。

  • QTP无法识别对象的补充(原创)

    2007-06-11 22:41:12

      对于QTP无法识别的对象的问题,经过开发人员人员的帮忙终于找到原因,其实对于目前网络上找到的一些资料所说的几种解决办法都无法真正解决目前我们公司的这个系统的框架中的对象的识别问题,特别是对于树控件的识别,因为我们公司的系统的树控件是自己开发并且封装好的,和微软的树结构不一样,所以对于它的识别,并不是以前所说的那些办法能解决的,对于该问题的解决可以参考以下:

    Browser("用户登入").Page("用户登入").WebEdit("WebEdit").Set "test7"
    Browser("用户登入").Page("用户登入").WebEdit("password").SetSecure "466d488e60e40cbbf4312876ab4ca3b24e5e"
    Browser("用户登入").Page("用户登入").Image("imageField").Click 10,9
    Browser("用户登入").Page("非税收入").Image("expand").Click
    Browser("用户登入").Page("非税收入").WebButton("…").Click
    Browser("用户登入").Window("区划选择 -- 网页对话框").Activate
    set htmDoc=Browser("用户登入").Window("区划选择 -- 网页对话框").Page("区划选择").Object
    set treeNode=htmDoc.getElementById("partTree").getTreeNodeById("330302")
    treeNode.setActive()
    treeNode.changeSelectedState 1,1
    treeNode.reload()

    Browser("用户登入").Window("区划选择 -- 网页对话框").Page("区划选择").WebButton("确 定").Click

  • 《常见的功能测试发法》的一点不同意见

    2007-06-02 22:26:57

    在网上看到以下一篇文章,我的理解可能不太一样:

    功能测试是对产品的各功能的验证,而对于产品的各功能点如何区分我的理解是产品的某个功能点可能会通过好多个操作来实现,比如:选择某个对象->点[新增]按钮->编辑数据->按[保存]按钮这么一个过程,而对于某个功能点的验证需要通过验证界面上各个元素和界面上的各个操作来实现的。所以我觉得对于某个产品的功能点的验证是界面测试和操作功能测试的结合。而我们在描述用例的时候,应该区分界面上的和具体功能上的来进行。

    当然,每个人的理解和测试习惯都会不一样,这里我仅仅说了自己的一点愚见,大家给多提提好的建议哦!

    常用的功能测试方法

        功能测试就是对产品的各功能进行验证,根据功能测试用例,逐项测试,检查产品是否达到用户要求的功能。常用的测试方法如下:

       1. 页面链接检查:每一个链接是否都有对应的页面,并且页面之间切换正确。

       2. 相关性检查:删除/增加一项会不会对其他项产生影响,如果产生影响,这些影响是否都正确。

       3. 检查按钮的功能是否正确:如update, cancel, delete, save等功能是否正确。

       4. 字符串长度检查: 输入超出需求所说明的字符串长度的内容, 看系统是否检查字符串长度,会不会出错.

       5. 字符类型检查: 在应该输入指定类型的内容的地方输入其他类型的内容(如在应该输入整型的地方输入其他字符类型),看系统是否检查字符类型,会否报错.

       6. 标点符号检查: 输入内容包括各种标点符号,特别是空格,各种引号,回车键.看系统处理是否正确.

       7. 中文字符处理: 在可以输入中文的系统输入中文,看会否出现乱码或出错.

       8. 检查带出信息的完整性: 在查看信息和update信息时,查看所填写的信息是不是全部带出.,带出信息和添加的是否一致

       9. 信息重复: 在一些需要命名,且名字应该唯一的信息输入重复的名字或ID,看系统有没有处理,会否报错,重名包括是否区分大小写,以及在输入内容的前后输入空格,系统是否作出正确处理.

       10. 检查删除功能:在一些可以一次删除多个信息的地方,不选择任何信息,按”delete”,看系统如何处理,会否出错;然后选择一个和多个信息,进行删除,看是否正确处理.

       11. 检查添加和修改是否一致: 检查添加和修改信息的要求是否一致,例如添加要求必填的项,修改也应该必填;添加规定为整型的项,修改也必须为整型.

       12. 检查修改重名:修改时把不能重名的项改为已存在的内容,看会否处理,报错.同时,也要注意,会不会报和自己重名的错.

       13. 重复提交表单:一条已经成功提交的纪录,back后再提交,看看系统是否做了处理。

       14. 检查多次使用back键的情况: 在有back的地方,back,回到原来页面,再back,重复多次,看会否出错.

       15. search检查: 在有search功能的地方输入系统存在和不存在的内容,看search结果是否正确.如果可以输入多个search条件,可以同时添加合理和不合理的条件,看系统处理是否正确.

       16. 输入信息位置: 注意在光标停留的地方输入信息时,光标和所输入的信息会否跳到别的地方.

       17. 上传下载文件检查:上传下载文件的功能是否实现,上传文件是否能打开。对上传文件的格式有何规定,系统是否有解释信息,并检查系统是否能够做到。

       18. 必填项检查:应该填写的项没有填写时系统是否都做了处理,对必填项是否有提示信息,如在必填项前加*

       19. 快捷键检查:是否支持常用快捷键,如Ctrl+C Ctrl+V Backspace等,对一些不允许输入信息的字段,如选人,选日期对快捷方式是否也做了限制。

       20. 回车键检查: 在输入结束后直接按回车键,看系统处理如何,会否报错.

322/2<12
Open Toolbar