发布新日志

  • 一位高人的QTP学习笔记

    ddkfamily 发布于 2009-02-21 21:33:06

    一位高人的QTP学习笔记

    转贴一个高人的QTP笔记供大家学习。
       
    文章比较长,一共三部分:
    1
    、连接数据库查询例子,无参数化
    //
    查询收文操作,通过数据库查询记录数是否正确
    //1
    、输出记录数值,例如78  2、获取输出的记录数值  3、连接数据库,查询记录数
    4
    、输出记录数值和从数据库中查询记录数值,相比较,相等则成功,不等则失败
    Browser("
    湛江信息化测试登录").Page("湛江东兴石油企业有限公司办公自动化系统").Frame("mainFrame").Output CheckPoint("78")
    Dim mm
    'mm=DataTable.GlobalSheet.GetParameter("mainFrameOutput_Text_out").Value  
    //
    注释,获取datatable值与DataTable("mainFrameOutput_Text_out", dtGlobalSheet)一致
    mm=DataTable("mainFrameOutput_Text_out", dtGlobalSheet)
    MsgBox mm
    Dim res,cmd,sql
    Set res=createobject("adodb.recordset")
    Set cmd=createobject("adodb.command")
    Cmd.activec
    Cmd.CommandType = 1
    sql="select count(*) from oa_receivebumf  where BUMFNAME
    like '%收文测试%'"
    'sql="select  count(*)  from oa_receivebumf  where BUMFNAME='"&nn&"'"
    //
    注释,sql语句,等于时sql语句
    // sql="select  count(*)  from oa_receivebumf  where BUMFNAME like '%nn%'" //like
    sql语句
    Cmd.CommandText = sql
    Set res = Cmd.Execute()
    //msgbox res("name")

    MsgBox res(0)
    If   Cstr(res(0)) = Cstr(mm)Then
          Reporter.ReportEvent micPass, "test",   "
    查询成功"     
      else
    Reporter.ReportEvent micfail, "test",   "
    查询失败"
    End If
    Set res = nothing
    Set cmd.ActiveConnection = nothing
    Set Cmd= nothing
    2
    、登记用户,查看是否登记成功
       //
    登记用户,查询用户是否存在在数据库中
         1
    参数化 2、取参数化值  3、查询语句中,赋值给查询条件
         4
    、从数据库中查询出用户名,与参数化中值做比较
       
    脚本如下:
    Browser("
    测试登录").Page("办公自动化系统").Frame("mainFrame_2").WebEdit("addressVO.name").Set DataTable("p_Text", dtGlobalSheet)
    Dim xname
    xname=DataTable("p_Text", dtGlobalSheet)
    MsgBox  xname


    Dim res,cmd,sql
    Set res=createobject("adodb.recordset")
    Set cmd=createobject("adodb.command")
    Cmd.activec
    Cmd.CommandType = 1
    sql="select  name from address_list t where name ='
    "&xname&"'"
    Cmd.CommandText = sql
    Set res = Cmd.Execute()
    'msgbox res("name")
    MsgBox res(0)
    Set res = nothing
    Set cmd.ActiveConnection = nothing
    Set Cmd= nothing

     

     

    第二部分

    1Datatable方法GetRowCount
       DataTable.GetSheet("Action1").GetRowCount   //
    获取总行数
      
    使用如:
      CountNum=DataTable.GetSheet("Action1").GetRowCount

    2
    Datatable方法SetNextRow
       DataTable.GetSheet("Action1").SetNextRow     //
    取得下一行
       datatable.setcurrentrow(n)   //
    取得某一行

    3
    Datatable方法getcurrentrow    //获得当前行数
       
    例如:datatable.getcurrentrow

    4
    、获取datatable
       4.1  DataTable("p_Text", dtLocalSheet)  //
    取得datatable中参数名称为:p_Text的值
       4.2  DataTable.GlobalSheet.GetParameter("p_Text").Value   //
    获取参数值方法和DataTable("p_Text", dtLocalSheet)一样
       
    例如:xname为变量,dim xname
       xname=DataTable("p_Text", dtLocalSheet)
       xname=DataTable.GlobalSheet.GetParameter("p_Text").Value

    5
    datatable.value("num")只在global形式下的一种省略形式;完整形式是:
    datatable.value("num",dtlocalsheet)

    -----
    向某一列的单元格赋值:
    datatable.value("column_name",dtlocalsheet)="nanjing"

    6
    、字符转换Cstr
       dim mm
       Cstr(mm)

    7
    、获取对象属性名称用法:
    GetRoProperty----
    从应用程序界面上获取对象属性(即,是脚本运行时,获取的对象动态属性值)
               
    例如:获取对象库中index属性值,似乎只能用GetToProperty,因为应用程序界面上对象没有该属性,只是
          QTP为识别该对象创立的描述属性;
    GetToproperty----
    从对象库中描述对象的属性,静态值
    GetToProperties----
    获取用于标识对象的属性集;对于这个集合,有count等属性方法

    8
    、如果弹出对话框就获取上面提示信息并与表中的信息对比,不统一证明弹出的提示出错,主要用来验证
    if browser("web_name").dialog("dialog_name").exist(1) then'
    如果不出现=false
         error_message=browser("web_name").dialog("diaglog_name").static("
    用户密码错误!".getRoproperty("text")
       if error_message<>(datatable.value("error_info"))then
             msgbox(error_message)
          end if
         browser("web_name").dialog("diaglog_name").close
      end if
    这里总结了两点技巧:
      一是:对于dialog中,虽然提示信息对象名称是"用户密码错误",但如果信息对象名称是该用户不存在,不用更改会自动识别,我想主要是录制第一遍时,用户密码错误只是让运行时能找到这个控制,而不管它是什么内容,因为在对象仓库中,text不是决定该对象的属性
       
    二是:如果对于提示信息比较长的,可以用mid(error_message,n,m)取一部份特征提示信息进行验证,这样我想可以节省处理时间,又可以避免长度以及空格等字符的处理

    9
    、数据库检查点模块:
    sub database_check
    set con=createobject("adodb.connection")
    con.open "Description=IBM_ODBC;DRIVER=SQL Server;SERVER=IBM;UID=sa;"&_
                     "PWD=123456;APP=Quick Test Pro;WSID=IBM;DATABASE=IBM_table"
    'access
    方式:con.open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=d:\test.mdb"
    'Orocle
    方式:con.open "DRIVER={Oracle in OraHome92};SERVER=CESHI;UID=CND_TEST;PWD=CND;DBQ=CESHI;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=10;TLO=O;"
    set record=createobject("adodb.recordset")
    sql="select*from ibm_one_table"
    record.open sql,con
    DO
    if(record("ibm_table_column")="kai")then'//
    查找表格中有多少kai
    num=num+1;
    end if
    record.movenext
    loop until record.eof=true
    record.close
    set record=nothing
    con.close
    set con=nothing
    end sub

    10
    "is+*"类型function
    isarray'
    是否是数组
    isconnected'
    判断QTP是否连接到TD
    isdate'
    是否是合法的日期类型
    isempty'
    判断是否初始化
    isNull'
    判断是否为空值
    isNumeric'
    判断是否是数字型
    isobject'
    判断是否一个功能对象
    isready'
    判断设备是否准备就绪
    isRootFolder'
    是否是根目录

    11
    for方法1,参数化时选择:dtLocalSheet
    Dim CountNum
    CountNum=DataTable.GetSheet("Action1").GetRowCount
    For i=0 to CountNum-1
    ----xunhuanti------
    DataTable.GetSheet("Action1").SetNextRow    //
    使用SetNextRow方法
    Next

    12
    for方法2,参数化时选择:dtLocalSheet
    dim countNum
    countNum = DataTable.GetSheet("Action1").GetRowCount
    For i=1 to countNum
    DataTable.GetSheet("Action1").SetCurrentRow(i)  //
    使用SetCurrentRow(i)方法
    ―――ddd―――
    next
    13
    while方法1,参数化时选择:dtLocalSheet
    Dim CountNum,i
    i=1
    CountNum=DataTable.GetSheet("Action1").GetRowCount
    While i<=CountNum
    ------xuhuanti---
    DataTable.GetSheet("Action1").SetNextRow
    i = i+1
    Wend

    14
    while方法2,参数化时选择:dtLocalSheet
    Dim CountNum,i
    i=1
    CountNum=DataTable.GetSheet("Action1").GetRowCount
    While i<=CountNum

    DataTable.GetSheet("Action1").SetCurrentRow(i)
    ----xuhuanti---
    i = i+1
    Wend

     

     

    第三部分

    15Do while方法
    Dim i,RowCount '
    定义两个变量
    i=0
    RowCount=DataTable.GetSheet("Action1").GetRowCount '
    设置RowCount等于Action1中的行数。
    msgbox RowCount
    Do while i<rowcount
    i=i+1 '
    第一次进入循环,执行这句后,i=1
    'DataTable.GetSheet("Action1").SetCurrentRow(i)  
    这句话被我注释掉了,正确的写法应该是下面这样,分开写。

    datatable.getsheet("Action1")
    datatable.setcurrentrow(i)

    ----xunhuanti----
    loop

    16
    、取对象属性(Property)值

    Dim usname
    usname =Browser("
    测试登录").Page("办公自动化系统").Frame("mainFrame_2").WebEdit("addressVO.name").GetRoProperty("Value")   '获取对象属性(Property)值,如PropertyValue
    MsgBox usname

    17
    、取得要删除的id,并删除
    'url
    在查看该新增记录的信息页面对象中取得,所以录制的时候,登记,查看(修改),删除

    Dim strUserid,id,strId

         id=Browser("
    测试登录").Page("办公自动化系统").Frame("mainFrame_4").GetROProperty("url") 'url这个属性值中存在我需要删除记录的ID信息
      strId=Mid (id,instr(60,id,"=")+1)  '
    这一步是把需要的id值取了出来,例如:strId=Mid (id,instr(1,id,"=")+1)
         strUserid =strId  'strUserid
    是我要删除的记录前的复选框属性值当中的ID信息
    Browser("
    测试登录").Page("办公自动化系统").Frame("mainFrame").WebCheckBox("value:="&strUserid).Set "ON" 这样就把想删除的记录选中了。
    Browser("
    测试登录").Page("办公自动化系统").Frame("mainFrame").WebButton(" ").Click '这样就删除掉啦,呵呵

    17.2
    通过数据库取得id值,并赋值进行删除

    Browser("
    测试登录").Page("办公自动化系统").Frame("mainFrame_2").WebEdit("addressVO.name").Set DataTable("p_Text", dtGlobalSheet)
    Browser("
    测试登录").Page("办公自动化系统").Frame("mainFrame_2").WebEdit("addressVO.address").Set DataTable("p_Text1", dtGlobalSheet)

    Browser("
    查看(1257) 评论(0) 收藏 分享 管理

  • QTP读取Excel数据的方法

    zte_boy 发布于 2008-06-29 12:25:00

    在构建自己的测试框架时,或者是从Excel读入外部数据进行检查时都要用到Excel的COM对象编程方法,下面脚本中的ReadFile函数就实现了这样的功能,首先创建Excel应用程序对象,然后打开Excel文件,把Excel数据读取到一个数组中。
     
    arrRange = ReadFile("D:\QTP\MyWork\ReadExcelFileTest1\ObjectTree.xls","Tree")
    'Msgbox UBound (arrRange,1)
    'Msgbox UBound (arrRange,2)
    ' 读取其中一个单元格的数据
    Msgbox arrRange(3,1)
     
     
    ' 输入:
    '             sFileName: Excel文件
    '             sSheetName:表单名称
    ' 返回:
    '             包含Excel数据的数组
    Function ReadFile(sFileName,sSheetName)
           Dim oExcel
           Dim oSheet
           Dim oRange
           Dim arrRange
     
           On Error Resume Next
               ' 创建Excel应用程序对象
                  Set ōExcel = CreateObject("Excel.Application")
                  If err.Number <> 0 Then
                         MsgBox "未能初始化Excel" & vbCrLf & _
                                     "请确保Excel已安装", vbCritical
                         Exit Function
                  End If
           On Error Goto 0
                        
           On Error Resume Next
                         ' 打开Excel文件
                         oExcel.Workbooks.Open(sFileName)
                      If err.Number <> 0 Then
                                MsgBox "未能加载Excel文件" & vbCrLf & _
                                       "请确保Excel文件路径正确或格式正确", vbCritical
                                Exit Function
                         End If
           On Error Goto 0
          
           ' 获取表格的使用范围
           Set ōSheet = oExcel.Worksheets(sSheetName).UsedRange
           ' 获取从A列到Z列,从第1行到第1000行的范围i中的所有值
           Set ōRange = oSheet.Range("A1:Z1000")
           '把Excel数据转换到数组
           arrRange = oRange.Value
           ' 关闭工作簿
           oExcel.WorkBooks.Item(1).Close
           ' 退出Excel
           oExcel.Quit
           Set ōExcel = Nothing
        ' 返回包含Excel数据的数组
         ReadFile = arrRange
    End Function
  • QTP中连接MYSQL数据库

    小刀 发布于 2008-06-30 11:22:36

    QTP中连接MYSQL束手无策,其实根本原因是默认的我们的操作系统中ODBC驱动里默认不支持开源的MySQL驱动。

    要解决这个问题的方法非常简单,安装一个相关的驱动就能解决问题了。这里给出这个驱动程序的下载地址: MyODBC-3.51.11-2-win.exe

    安装完毕后,到控制面板--管理工具--数据源ODBC--系统DSN”把它添加进来,步骤如下:

    1. 点击添加,弹出系统中存在的数据库驱动选择框,在这里面选择刚才添加的mysql数据库驱动   MyODBC-3.51.11 Driver 然后点击完成,弹出连接配置页面,填写data source名称,数据库服务器名  用户名,密码  然后选择要连接的数据库

    2. 配置完成后,点击测试,如果连接正确,会显示测试成功,测试成功后,点击确定,完成配置

    3. QTP中,选择Insert——CheckPoint(也可以是Output Value)——DataBase CheckPoint——Specify SQL statement manually——Create——机器数据源,选择在步骤2建立好的数据源,然后在 SQL statement中输入SQL语句

    4. 点击完成,会弹出执行SQL语句后的数据表,设置好要输出的数据,或者是要检查的数据.

    5. 点击完成,完成QTP连接MySql数据库的配置

     

  • 循环将DataTable中的值输出到Reporter文件中

    qicyt1812 发布于 2008-06-30 14:01:33

    Dim dtValue
    For i = 0 to 10
      If dtValue = "" Then
          dtValue = dtValue + Cstr(i)   '如果输出DataTable中的值可以用DataTable(1,1)代替 i
      Else
          dtValue = dtValue + VbCrLf + Cstr(i) 'VbCr:回车 VbLf:换行 VbCrLf:回车换行
      End If
    Next

    Reporter.ReportEvent micPass,"file",dtValue
  • 识别属性改变的对象

    jimmy2006.hi 发布于 2008-01-16 18:11:00

    Browser("用户登录").Page("WAP PAMS管理平台").Frame("main_7").Link("116test").SetTOProperty "text","116test"&a
    wait 2
    Browser("用户登录").Page("WAP PAMS管理平台").Frame("main_7").Link("116test").Click

    备注:重新设置属性后,Link("116test")这个不能变

  • QTP自动化测试流程

    leo_hu_100 发布于 2008-01-29 20:16:10

    黑色字体是原文,蓝色字体是我的注释,代表我个人的看法,仅供参考。

    1)准备TestCase
            - 在进行自动化之前,将
    测试内容进行文档化,不建议直接录制脚本
            - 在录制脚本之前设计好脚本,便于录制过程的流畅
            - 由于
    测试用例设计和脚本开发可能不是同一个人完成,便于团队合作
            - 便于后期的维护
            - 文档化的方式:TD或者文档

    Test Case的建立是所有脚本成立的先觉条件,所以在正式开始编写脚本前,必须确保:
            - Case覆盖率高(需求覆盖、代码覆盖等)
            - Case书写步骤清晰,便于脚本与之一一对应
            - Case期望结果明了,便于脚本对期望结果进行检查
            - Case经过开发、测试Review,保证产品所有主要人员对产品及测试达成同一认识
            - 针对不同测试阶段,挑选在回归测试中需要自动化实现的Case(实属脚本计划阶段)

     
    2)配置QTP
            QTP支持不同的开发环境,在正式录制之前,需要根据被测程序的开发环境,选择合适的Add-In,并进行加载。

    做到以下几点会对后期的脚本维护产生莫大的方便:
            - 建立统一的脚本架构
            -
    共享资源的建立(对象库、测试数据等等)
            - 共用Function Library的建立
            - 建立统一的代码规范(含命名规范、注释、代码缩进、位图检查等)
            - 统一所有的编码风格
            - 统一配置测试环境,确保所有测试环境均能运行所写脚本

    3)录制脚本
            启动QTP的录制功能,按照Test Case的操作步骤描述执行,QTP自动记录每一步操作,并自动生成VBscrīpt脚本。

    除必要的位图检查之外,严格要求脚本必须使用手写,防止脚本录制导致代码臃肿以及可读性差。
     
    4)修改增强脚本
            刚刚录制好的脚本可能包含错误,或者没有达到预期的目的,这就需要在录制脚本的基础上,进行修改增强
            - 删除录制过程中多余的以及错误的操作,以最少的脚本完成任务
            - 如果前面操作的输出是后面操作的输入,则需要使用变量或者输出值来进行替换
            - 不是所有的操作都可以通过录制产生的,有些需要通过手工编码实现这些功能
            - 录制产生的脚本是线性的,可以加入条件、循环控制语句,实现更复杂的流程
            - 对脚本进行结构化
            - 加入注释,便于阅读和维护
     
    5)调试脚本
            - 回放通过的脚本,不一定是正确的,也可能会包含错误
            - 在测试脚本正式使用之前,要保证其本身的正确性
            - 避免测试脚本故障和被测程序故障搅在一起,不容易定位

    脚本调试完成后,需要完成如下几步才能真正的用在实际项目当中:
            - 单个脚本调试成功后,需要其他人员Review(类似极限编程)后方可Checkin代码
            - 把所有单独运行成功的脚本集合在一起,进行脚本的集成测试和系统测试

    6)回放脚本
            - 对于回放的错误,不要急于马上提交Bug,首先要判断是脚本本身的错误还是程序的错误,确认后再提交。
     
    7)脚本维护
            - 随着工作的不断推进,脚本量会越来越多
            - 被测试程序的不断更新,也需要更新相应的测试脚本
            - 采用版本管理工具保存脚本,如CVS、VSS,可以随时获取历史版本
            - 采用统一的脚本架构
            - 采用统一的命名规范
            - 添加充分的注释,避免时间久了,自己都不能马上读懂脚本

    如果前期工作做的好,脚本维护的成本会低出很多,所以强烈建议在前期能够形成统一的制度。

  • QTP User-Defined Function 学习经验汇总[转]

    leo_hu_100 发布于 2008-01-30 15:31:15

    1. 可以通过Function Definition Generator方便的定制自定义函数(Function)
    2. Built-in Function优先级高于User-Defined Function。因此若存在同名的话,QTP会优先调用内置的Function
    3. 通过RegisterUserFunc可以将自定义的函数注册为特定对象的方法,甚至可以覆盖原有对象的方法(Method)。通过UnRegisterUserFunc取消注册
    注册方式:RegisterUserFunc TOClass, MethodName, FunctionName, True
    反注册方式:UnRegisterUserFunc TOClass, MethodName
    4. 定义在Action中的Function以及注册的Method只能在当前Action中使用,若需要供全局使用则定义到Function Library中
    5. 如果Method在Action中注册并且被其他Action调用时,该Method定义也适用于调用Action(Calling Action)。但如果Function定义在被调用Action中(Called Action),则Calling Action会因为找不到Function定义而失败。这种情况的话,需要将Function 定义在Function Library中
    6. QTP在测试执行前会清除所有的Method Register
    7. 默认情况下,User-Defined Function的运行结果不会出现在Test Result中,可以自己用Reporter.ReportEvent添加log
    8. QTP在打开Test时加载了关联的Function Library,因此,若其他人或者你用其他编辑器修改了对应的Function Library,只有在QTP重新打开该Test后才生效
    9. QTP搜索Function的顺序是先Test在Function Library。另外,同名的Function存在于多个Function Library时,后一个被使用
    10. 对于同一个Method先后注册了两个不同的Function,后面的Method注册会覆盖前面的。当用UnRegisterUserFunc反注册时,会将该Method返回到原始状态,而不会回到前一个注册
    11. 在某Action中使用ExecuteFile后,该Function只能在当前Action中使用
    12. 对于存储在QC中的外部资源,如Function Library,QTP打开时为其创建了一个本地副本。因此若其他人修改了QC上的外部资源,或你使用其他编辑器进行修改时,该修改只有在QTP重新打开该Test才生效。但对于存储在本地的外部资源,不存在该问题
    13. 在Test Settings中设置了Default Function Library列表后,新建Test时这些Library即被集成到新创建的Test中。以后对Default Function Library列表的修改对已有Test不产生任何影响。
  • Qtp学习日记2008-01-30

    流浪猫咪 发布于 2008-01-31 16:51:30

    2007-01-30

    今天对QTP中页面检查点,文本检查点的设置进行了学习.

    重点学习参数测试法,并成功地实现了FOR  NEXT 函数地循环操作.

    操作的过程中遇见的问题:

    1.进行局部循环的时候,只能做一遍,不能实现局部循环.

       原因: 在最后一页与第一页没有衔接点,导致循环无法继续

       解决方法:在最后一页再录制一条操作,这样可降最后一页与第一页衔接

    2.进行局部循环的时候,只能读取参数表中的第一行,无法在每次循环的时候读到参数表中不同值:

       原因:不明.

       解决方式:在计数器的前面添加语句: DataTable.GetSheet (2).SetNextRow

    3.设置了局部循环,程序还是会将所有程序按照参数表中数量再循环一遍:例如设置了三个参数,局部循环设置三次,待测程序将运行9(局部循环内的程序)整个程序运行三遍

        原因: File > settings > run > data table iteration > 选择了 Run on all rows

        解决方法: 改变上述中的选项

    4. 局部循环设置FOR 1 TO 3 局部循环只运行2

        局部循环设置FOR 0TO 2 局部循环运行3

       原因不明

    明天计划: 输出值学习

  • (转)自动化测试网站收录

    lynmin 发布于 2008-03-21 10:12:09

    以下自动化测试技术相关的网站,是本人日常查阅资料收集。拿出来跟大家分享,请大家继续反馈,我把它添加到列表中。

    类别
    名称
    网址
    国内综合性测试网站 无忧测试 http://www.51testing.com/
    测试时代 http://www.testage.net/
    中国软件测试在线 http://www.softtest.cn/
    北大测试主站 http://www.btesting.com
    一起测试网 http://www.17testing.com/
    中国软件测试联盟 http://www.iceshi.com
    3A测试网 http://www.3atesting.com/
    测试总裁网 http://www.testceo.com
    广东软件测试行业联盟 http://www.gztest.com/
    上海测仕信息技术 http://www.cntesting.com/
    中国软件测试人才网 http://www.rjzl.gov.cn/
    国内自动化测试网站 Ricky Zhu http://www.rickyzhu.com/
    ezTester,针对C/C++工程,拉通白盒测试与自动化测试的工具站点 http://www.ezTester.com/
    蓝天城 http://www.testguild.cn/
    国外自动化测试网站 开源项目Software Automation Framework Support(SAFS)站点,有一些数据驱动、关键字驱动自动化测试技术资料介绍 http://safsdev.sourceforge.net/
    起源于IBM的自动化测试框架STAF的开源项目主页 http://staf.sourceforge.net/
    这便是知名的“Software QA and Testing Resource Center”,提供众多资源入口 http://www.softwareqatest.com/
    性能测试工具LoadRunner的一个论坛 http://groups.yahoo.com/group/LoadRunner
    关于网站自动测试、性能测试、安全性测试 http://bdonline.sqe.com/
    软件测试资源库,涉及GUI测试、性能测试、静态分析、覆盖率、用例管理等 http://www.testingfaqs.org/
    一个有关WinRunner TSL编程的个人技术站点 http://www.wilsonmar.com/1winrun2.htm
    Bret Pettichord的主页,收集不少测试自动化方面的资源

    http://www.io.com/~wazmo/

    约克大学的测试专业兴趣研究组网页,有比较丰富的资料下载,内容涵盖了测试的多个方面,包括测试自动化、测试数据生成、面向对象软件测试、验证确认过程等 http://www.cs.york.ac.uk/testsig/
    一家老牌软件测试咨询公司的网站,有一些测试方面的课程和资料供下载 软件测试专业网站:51Testing软件测试网'@&g*N9dy(o http://www.grove.co.uk/
    卡耐基梅陇大学网上图书馆,在这里你可以获得有关计算机方面各类论文资料,内容极其庞大,是研究软件测试不可多得的资料来源之一 http://www.library.cmu.edu/Research/Engineering-AndSciences/CS+ECE/index.html
    包含一些流行测试工具的介绍、下载和讨论,还提供测试方面的资料 http://www.betasoft.com/
    一个自动化软件测试和自然语言处理研究页面,属于个人网页,上面有些资源可供下载 http://www.automated-testing.com/
    一个软件质量工程服务性网站,组织软件测试自动化、STAR-EASE、STARWEST等方面的测试学术会议,并提供一些相关信息资料和课程服务 http://www.sqe.com/
    GCT开源工具的作者Brian Marick的网站,包含了Marick 研究的一些资料和论文,该网页提供了测试模式方面的资料,值得研究 http://www.testing.com/
    Kerry Zallar的个人主页,有一些自动测试与质量保证方面的资料供下载 http://www.testingstuff.com/
    包含James Bach关于软件测试和过程方面的很多论文,尤其在启发式测试策略方面值得参考 http://www.satisfice.com/

我的栏目

数据统计

  • 访问量: 2316
  • 日志数: 4
  • 图片数: 1
  • 建立时间: 2009-02-05
  • 更新时间: 2009-03-10

RSS订阅

Open Toolbar