发布新日志

  • vbs测试webservice脚本

    aslandhu 发布于 2010-03-16 16:01:32Top 1 Digest 1

    对于上次写的那个使用vbs测试webservice的脚本做了一点扩展,这一次一并发出来。有兴趣的朋友可以一起了解一下。考虑到模板尚未设计完成,这次仅把脚本贴一贴。
    原脚本:
    '作者:  aslandhu
    '公司:  中科大讯飞科技股份有限公司
    '脚本功能:     webservice自动化测试,自动读取测试用例,用例配置文件,最终将测试结果写入用例中。
    '开发开始时间: 2009-4-20
    '更新时间:  2010-3-15(15:30:00)
    '******************************************************************webservice测试开始*************************************************************
    '请在使用前调试脚本确保脚本能正常工作
    '请严格使用提供的模板编写用例,否则脚本无法正常工作
    '*****************************************************************收集相关信息************************************************************************
    On error resume next
    Dim SoapText,XmlHead,XmlLast,SoapQuest,MethodInput,XmlMethodString1,XmlMethodString2,WebserviceAddress,testResult,ResultPath
    MethodInput="GetRecResultList"       '待测试的方法
    Dim n,m,i,j,a,b,k,c,CounterPass,CounterFail,CounterAll,CounterFailer,BoolCounter 'n为参数个数,也即用例需要取值的列数量,m为用例数量即Excel行数,K为方法数量(保留)
    n=1              '传入的参数个数
    k=9              '需要检查的参数个数
    m=20             '用例数量即Excel行数
    CounterAll=0     '这四个是计数器
    CounterPass=0
    CounterFail=0
    CounterFailer=0
    BoolCounter=true
    WebserviceAddress=http://…………/SMSSDemoWs/TestRoutingEngine.asmx  '测试接口地址
    TestPath="C:\test.xls"        '测试用例路径
    Dim ArrayInfo()
    ReDim ArrayInfo(m,n)
    '****************************************************************拼装SOAP头尾消息*****************************************************************
    XmlHead="<?xml version=""1.0"" encoding=""utf-16""?>"&"<soap:Envelope xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"">"&"<soap:Body>"
    XmlLast="</soap:Body>"&"</soap:Envelope>"
    XmlMethodString1="<"&MethodInput&" "&"xmlns=""http://tempuri.org/"">"
    XmlMethodString2="</"&MethodInput&">"
    'XmlMethodString2="</"&MethodInput&">"
    '*****************************************************************创建Excel对象,准备读取用例************************************************
    Set Excel = CreateObject("Excel.Application")
    oExcel.DisplayAlerts=FALSE
    oExcel.Visible = false
    oExcel.WorkBooks.Open(TestPath)
    oExcel.WorkSheets(MethodInput).Activate
    '*****************************************************************将用例存入数组********************************************************************
    For i=1 To m  '行数3,b
      For j=1 To n  '列数2,a
      ArrayInfo(i,j)= oExcel.Cells(i,j).Value 
     Next
    Next
    '****************************************************************开始组装SOAP主体*****************************************************************
    SoapText=""
    For b=2 To m
    For a=1 To n
    SoapText=SoapText&"<"&ArrayInfo(1,a)&">"&ArrayInfo(b,a)&"</"&ArrayInfo(1,a)&">"
    CounterAll=CounterAll+1
    Next
    SoapQuest=XmlHead&XmlMethodString1&SoapText&XmlMethodString2&XmlLast
    'MsgBox(SoapQuest)
    'WriteToFile  "c:\test.txt",SoapQuest
    '****************************************************************开始循环发送消息*********************************************************************
    '定义一XML的文档对象
    '初始化http对象
    Set h = createobject( "Microsoft.XMLHTTP")
    h.open "POST", WebserviceAddress, False
    h.setRequestHeader "Content-Type", "text/xml; charset=utf-8"
    h.setRequestHeader "SOAPAction", "http://tempuri.org/"&MethodInput
    h.send (SoapQuest)
    While h.readyState <> 4
    Wend
    '***************************************************************循环处理返回结果并将结果写入用例***********************************************
    For c=n+1 to n+k
    testResult=oExcel.Cells(1,c).Value
    test=oExcel.Cells(b,c).Value
    testtest=test
    fact=GetXml(h.responseText,testResult)
    if (IsEmpty(test) or IsNull(test) or (Len(test)=null) or (test=" ")) Then test=" "
    if (IsEmpty(fact) or IsNull(fact) or (Len(fact)=null) or (fact=" ")) Then fact=" "
    If  CStr(test) <> CStr(fact) then
       oExcel.Cells(b,c).Value = testtest&"("&"实际结果为:"&fact&")"
              oExcel.Cells(b,c).Font.Color = RGB(255, 0, 225)
       'oExcel.Cells(b,c+k).Interior.Color = RGB(0, 255, 0) 'Background color
                     oExcel.Cells(b,c).Font.Bold = True
                     BoolCounter=BoolCounter AND false
                     CounterFail=CounterFail+1 
     'else
       'oExcel.Cells(b,c).Value = testtest
       'oExcel.Cells(b,c).Font.Color = RGB(0, 0, 0)
       'oExcel.Cells(b,c).Interior.Color = RGB(255, 255, 255) '
    end if
                     BoolCounter=BoolCounter AND true
    Next
    if BoolCounter=false then                
    CounterFailer=CounterFailer+1
    BoolCounter=true             
    end if
    SoapText=""
    Next

    '****************************************************************释放Excel对象,并将结果写到指定路径***************************************
    CheckFolder "C:\TestResult"         '测试结果保存路径
    ResultPath="C:\TestResult\"&MethodInput&".xls"
    oExcel.WorkSheets(MethodInput).SaveAs ResultPath
    oExcel.WorkBooks.Close
    oExcel.Quit
    Set Excel=nothing
    msgbox("你好,共执行完成用例"&CounterAll&"条,共有"&CounterFail&"个检查点与预期结果不一致"&"有"&CounterFailer&"条用例执行失败")
    '***************************************************************以下是被调用的函数****************************************************************
    Sub CheckFolder(folderpath)
    Dim fso,CreateFolderSuccess,f
    Set fso=CreateObject("Scripting.FileSystemObject")
    If  fso.FolderExists(folderpath)=false Then
     Set f = fso.CreateFolder(folderpath)
      CreateFolderSuccess = f.Path
      Else
      Set fso=nothing
    End If
    End Sub

    '将string写入文本
    Sub WriteToFile (filepath,text)
      Dim fso, MyFile,txtFile
      Set fso = CreateObject("Scripting.FileSystemObject")
      Set txtFile = fso.GetFile(filepath)
      Set MyFile = txtFile.OpenAsTextStream(8, 0)
      MyFile.Write text&vbcrlf
      MyFile.Close
    End Sub

    '创建文本文件
    Sub CreatedFile(filepath)
     Set fso = CreateObject("Scripting.FileSystemObject")
        Set MyFile = fso.CreateTextFile(filepath, true)
        MyFile.WriteLine("<!-- Result -->")
        MyFile.Close
    End Sub

    '判断txt文件是否存在
    Function IsFileExist(filepath)
      Dim fso
      Set fso = CreateObject("Scripting.FileSystemObject")
      IsFileExist = fso.FileExists(filepath)
    End Function

    Function GetXml(testpath, nodeName)
          Set xmlDoc = Nothing
            Set xmlDoc = CreateObject("Msxml2.DOMDocument")
            xmlDoc.loadXML(testpath)
            Set root = xmlDoc.documentElement
            Set bjChildNodes = root.getElementsByTagName(nodeName)
            if(objChildNodes.item(0).ChildNodes.length=0) then
            GetXml=" "
            else
            GetXml= objChildNodes.item(0).firstChild.text
     end if
            Set xmlDoc = Nothing
    End Function

      on   error   goto   0 

    另外一个脚本(原理实现都一样,上面那个不支持多个方法,下面的这个脚本支持一次执行多个方法的用例,非并发执行):(Created by aslandhu)

    On error resume next
    Dim conn,rst,filename,WebserviceAddress,SOAPAction,MethodInput,InputNodesString,OuputNodesString,InputNodes,OutputNodes
    filename="C:\test.xls"                               '填入用例路径
    Set conn= createobject("ADODB.Connection")
    conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source="&filename&";Extended Properties='Excel 8.0;hdr=yes'"
    Set rst= createobject("ADODB.Recordset")
    Set Caserst= createobject("ADODB.Recordset")
    SqlStr = "select * from [VbsConfig$A1:G2]"    '此处增加用例范围
    rst.Open SqlStr,conn,2,2
    'Created by aslandhu                                          
    Do Until rst.EOF                           
       WebserviceAddress = rst.fields("WebserviceAddress")
       SOAPAction= rst.fields("SOAPAction")
       MethodInput= rst.fields("MethodInput")
       InputNodesString= rst.fields("InputNodesString")
       uputNodesString= rst.fields("OuputNodesString")
       CaseBegin= rst.fields("CaseBegin")
       CaseEnd= rst.fields("CaseEnd")
       InputNodes = Split(InputNodesString, ",", -1, 1)
       utputNodes = Split(OuputNodesString, ",", -1, 1)
    '***************************************************从数据表中取测试用例*****************************
       CaseSqlStr =  "select * from ["&MethodInput&"$"&CaseBegin&":"&CaseEnd&"]" 
       Caserst.Open CaseSqlStr,conn,2,2
       Dim InputNodesValue()
       ReDim InputNodesValue(UBound(InputNodes))
    '******************************************************开始拼装消息*********************************
    Do Until Caserst.EOF
       XmlHead="<?xml version=""1.0"" encoding=""utf-16""?>"&"<soap:Envelope xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"">"&"<soap:Body>"
       XmlLast="</soap:Body>"&"</soap:Envelope>"
       XmlMethodString1="<"&MethodInput&" "&"xmlns=""http://tempuri.org/"">"
       XmlMethodString2="</"&MethodInput&">"
       SoapText="" 
    For i=0 To UBound(InputNodes)
       InputNodesValue(i)= Caserst.fields(InputNodes(i))
       SoapText=SoapText+"<"&InputNodes(i)&">"&InputNodesValue(i)&"</"&InputNodes(i)&">"
    Next
       SoapQuest=XmlHead&XmlMethodString1&SoapText&XmlMethodString2&XmlLast
       SoapText=""
    '***************************************************获取返回结果*************************************
      SoapResponse=GetSoapRes(SoapQuest,CStr(WebserviceAddress),CStr(SOAPAction))
    '**************************************************处理返回结果**************************************
    Dim OnputNodesValue()
    Redim OutputNodesValue(UBound(OutputNodes))
    For i=0 To UBound(OutputNodes)
       OutputNodesValue(i)= Caserst.fields(OutputNodes(i))  '存放预期值
       FactValue=GetNodeValue(SoapResponse,OutputNodes(i))
       if (IsEmpty(OutputNodesValue(i)) or IsNull(OutputNodesValue(i)) or (Len(OutputNodesValue(i))=null) or (OutputNodesValue(i)=" ")) Then OutputNodesValue(i)=" "
       if (IsEmpty(FactValue) or IsNull(FactValue) or (Len(FactValue)=null) or (FactValue=" ")) Then FactValue=" "
       If CStr(OutputNodesValue(i)) <> CStr(FactValue) then
       Caserst.fields(OutputNodes(i)) = OutputNodesValue(i)&"("&"实际结果为:"&FactValue&")"
       End If
    Next
    '***************************************************************************************************
       'Created by aslandhu  
       Caserst.MoveNext
    Loop
       Caserst.Close
       set Caserst=nothing
    '****************************************************************************************************
       rst.MoveNext
    Loop
       rst.Close
       conn.Close
       set conn=nothing
       set rst=nothing
    on error goto 0
    '****************************************************************************************************
    Function  GetSoapRes(SoapQuest,WebserviceAddress,SOAPAction)
            Set h = Createobject("Microsoft.XMLHTTP")
            h.open "POST", WebserviceAddress, False
            h.setRequestHeader "Content-Type", "text/xml; charset=utf-8"
            h.setRequestHeader "SOAPAction",SOAPAction
            h.send (SoapQuest)
            While h.readyState <> 4
            Wend
            GetSoapRes=h.responseText
    End Function

    Function GetNodeValue(SoapResponse,NodeName)
            Set xmlDoc = Nothing
            Set xmlDoc = CreateObject("Msxml2.DOMDocument")
            xmlDoc.loadXML(SoapResponse)
            Set root = xmlDoc.documentElement
            Set bjChildNodes = root.getElementsByTagName(NodeName)
            if(objChildNodes.length=0)then
            GetNodeValue=""
            else if(objChildNodes.item(0).ChildNodes.length=0) then
            GetNodeValue=" "
            else
            GetNodeValue= objChildNodes.item(0).firstChild.text
     end if
            end if
            Set xmlDoc = Nothing
    End Function

     

     

     

     



     

  • QTP实战17-webservice测试方法

    kaku21 发布于 2010-10-14 09:57:47

    webservice的测试,首先需要了解一下SOA ,对于他的定义我想大家可以从baidu或google上去了解和进一步学习,这里简单说明,

    SOA---

    面向服务的体系结构(Service-Oriented Architecture,SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种这样的系统中的服务可以一种统一和通用的方式进行交互。

    按我个人的理解,简单说,当一个公司使用了很多套业务系统 例如 OA,MIS,DataBase 等等,这些系统可能是通过不同的开发环境研发的产品,如果我们需要一个管理系统去统一管理这些系统的时候会发现,我们必须采用不同的开发语言研发出针对不同系统的接口,并调用这些接口,这实际上存在着很大的技术难度和维护成本,说白了你必须要拥有java,c,c#等等的开发技术人员。 而SOA的思想即提供了这样的一种模式,就是让每个产品都形成或留有统一的一套接口,当我们需要使用不同系统的接口时,只需要采用SOA规定出来的规范来编制就可以了,即采用一种技术语言实现,这就避免了跨语言的编制难度。

    我们这里所说的webservice测试,实际是通过使用基于 XML 的语言(称为 Web 服务描述语言(Web Sevices Definition Language,WSDL))来描述接口,服务已经转到更动态且更灵活的接口系统中.实际上就是,研发人员在产品的 业务系统上 通过WSDL包上了一层接口,然后向外部提供可以执行业务的方法。而我们需要做的就是通过QTP连接到WSDL,获取到相应的方法,给入参数,执行测试。

    上面对待侧内容做了一些说明,下面是具体操作

    首先,操作环境QTP10,这个版本可以安装支持WDSL测试的插件,安装方法,如果你已安装了QTP10,那需要你再安装一个插件

    选择上这个 Web Services Add-in 并执行 将安装在本地硬盘驱动器上 下一步,随后系统还会提示你安装几个工具组件,执行完安装。对于没有许可证的童鞋 或许你需要想办法破解一下组件了。。。baidu or google

    重新打开QTP,选择web service插件 如下:

    进入到系统后,可以看到一个比较明显的不同,如下:

    接下来,是一个关键环节,既然产品中提供了统一的SOA接口,同时我们也拥有了支持这个接口的插件,接下来,我们就需要连接这个接口来提取我们需要的业务方法,执行Web Service Wizard 通过向导来建立我们的连接:

    执行下一步,在下图中,输入WSDL的URL地址,这个地址一般由研发人员提供给你:

    除了给出URL的方式,由于wsdl使用的xml扩展语言方式,那么我们也可以通过导入xml结构文件来实现,本次先不做介绍。执行下一步,连接一旦建立成功,QTP会把wsdl中包装的业务方法提取出来显示在列表中,我们只需要选择待侧的系统方法就可以了

    完成界面,提示是否需要添加 xml检查点,我建议大家选上,特别是QTP的初学者,因为建立xml检查点似乎是有难度的。

    形成的脚本很简单,注意,在方法addAppRoles中,对应的几个参数,其中第一个参数是一个对象结构,也就是xml的一个标准结构,如果是通过java语言执行的话,需要首先定义一个标准结构的对象,然后将这个对象作为参数,传入方法中,那么在qtp中如何实现呢??最初我一直在考虑如何去建立这样一个对象参数,但是,真正的实现方法远比我想象的要简单的多。进入到key view 模式:

    可以看到,对应的语句,这里每一个参数都可以进行单独的参数化,如下:

    选择第一个参数对应的参数化按钮,进入以下界面:

    注意到,这个参数是一个xml structure类型的参数,选择edit xml structure按钮,进入到编辑界面:

    qtp会将这个xml结构体结构导入,这样我们只需要操作具体的参数项就可以了,这里,将结构体中password这一参数进行了参数化。对这个结构体的参数化执行完毕。

    接下来,可以通过同样的方法,把脚本代码中后面的参数也进行参数化,实现我们的自动化测试。

    执行完以上内容,脚本就可以执行了,产生的结果报告中出现xml形式的报告模式,如下:

    其中 没有权限 既是xml的返回结果,也是检查点检查的内容,根据输入条件的不同,会对应有不同的检查结果,需要对检查点也进行参数化。

     

     

  • (转帖)Webservice的测试环境

    zibeike 发布于 2009-09-29 12:13:42

        因为使用QTP和LR进行WEBSERVICE方面的学习,找到如下内容链接。
     

    网上看到一个提供WebService的地方,如果作webService测试,不妨试试

    关键字:webwebservice
    网络上可供测试WebService
    uCv'c7aM5Z4P|8p051Testing软件测试网B k,xY'Qg
    腾讯QQ在线状态WEB服务51Testing软件测试网QPrFeM[,@
    Endpoint:http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx
    U/c}~;Wn0Disco:http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx?disco51Testing软件测试网 J:d7} |nP-d#HP
    WSDL:http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl
    {Cj;Nf0腾讯QQ在线状态 WEB 服务通过输入QQ号码(String)检测QQ在线状态。返回数据(String)Y = 在线;N = 离线 ;E = QQ号码错误......
    ]*uNmO\*r0需要技术支持请:联系我们,欢迎技术交流。 QQ:8698053

    @/iQ+b*P T,i051Testing软件测试网| Gv5P'fog

    \4d)w/{)|.] X%|0
    `W4r9xF0Email 电子邮件地址验证WEB服务
    E:d9U,nh7h V0L0
    Endpoint:http://www.webxml.com.cn/WebServices/ValidateEmailWebService.asmx51Testing软件测试网0?6Oj N-t2Qb:aZ
    Disco:http://www.webxml.com.cn/WebServices/ValidateEmailWebService.asmx?disco51Testing软件测试网*dPn7t-o}e0w
    WSDL:http://www.webxml.com.cn/WebServices/ValidateEmailWebService.asmx?wsdl
    cMkZHuv0Email 电子邮件地址验证 WEB 服务Email 电子邮件地址验证WebService,通过查找给定的电子邮件域的邮件服务器和通过向邮件服务器发送数据来判断电子邮件地址正确与否。51Testing软件测试网${!TmE]h8e/q?
    此Email地址验证WebService请不要用于任何商业目的,若有需要请联系我们
    51Testing软件测试网C&s@4E u@#E&S!g ra
    51Testing软件测试网DU2o4M]'J!fXP$T

    Nv~j^n051Testing软件测试网rk[.~'km-`

    [K;]#X2Ne0中国股票行情分时走势预览缩略图 51Testing软件测试网+?o'lT|
    Endpoint:http://www.webxml.com.cn/webservices/ChinaStockSmallImageWS.asmx
    C9T&_+O/E0Disco:http://www.webxml.com.cn/webservices/ChinaStockSmallImageWS.asmx?disco
    ]%K#oMEq e0WSDL:http://www.webxml.com.cn/webservices/ChinaStockSmallImageWS.asmx?wsdl51Testing软件测试网5?N4p(H,k*?O
    中国股票行情分时走势预览缩略图 WEB 服务中国股票行情分时走势预览缩略图WEB服务(支持深圳和上海股市的全部基金、债券和股票),数据即时更新。
    ~ m V%?6A0返回数据:2种大小可选择的股票GIF分时走势预览缩略图字节数组和直接输出该预览缩略图。

    tw;gf%m0
    [ zM x1O,g6T0
    P%sY`8H?9?051Testing软件测试网2g!x&] O$x/^
    外汇-人民币即时报价WEB服务
    0K^ uD$wTnu0Endpoint:http://www.webxml.com.cn/WebServices/ForexRmbRateWebService.asmx
    5X eT7~D:~O0Disco:http://www.webxml.com.cn/WebServices/ForexRmbRateWebService.asmx?disco
    ga5vDs3U-A0WSDL:http://www.webxml.com.cn/WebServices/ForexRmbRateWebService.asmx?wsdl
    +~QtE$F2Z051Testing软件测试网jRG*o3G\)b

    外汇-人民币即时报价 WEB 服务外汇-人民币即时报价WEB服务, 报价数据即时更新。外汇-人民币即时报价WEB服务仅作为用户获取信息之目的,并不构成投资建议。51Testing软件测试网 yg)WhM`
    支持人民币对:美元、欧元、英镑、日元、港币、加拿大元、新西兰元、新加坡元、瑞士法郎、瑞典克朗、泰国铢、挪威克朗、澳门元、澳大利亚元、丹麦克朗、菲律宾比索、清算瑞士法郎 等的兑换即时报价。

    7F3Lw8GaCW @vEQ0
    $d7lS6j4Y]ECo051Testing软件测试网vm!C)xS Xq4pv
    即时外汇汇率数据WEB服务
    T\ ?7a]"B0Endpoint:http://www.webxml.com.cn/WebServices/ExchangeRateWebService.asmx
    GKH XM5U ^(my0Disco:http://www.webxml.com.cn/WebServices/ExchangeRateWebService.asmx?disco
    8P g O1iRfMs+CQ)P0WSDL:http://www.webxml.com.cn/WebServices/ExchangeRateWebService.asmx?wsdl
    w zu/`/Cj051Testing软件测试网#jh0~He o

    即时外汇汇率数据 WEB 服务即时外汇汇率数据WEB服务,数据即时更新。此外汇汇率数据WEB服务支持29种以上基本汇率和交叉汇率即时外汇汇率数据,
    tv"G }%UB^1g D0返回包括:代码、货币名称、最新价、涨跌%、涨跌金额、开盘价、最高价、最低价、震幅%、买入价、卖出价、涨跌颜色和数据时间。实例51Testing软件测试网.zz`z(a*{ h
    51Testing软件测试网^(Buyh9`+Z8TP0n
    51Testing软件测试网:[qkO^c9d9{T1]1i~
    51Testing软件测试网*R)y6v/G"GD [D*u

    !~ ` | v:Vqp0^l0中国股票行情数据WEB服务(支持深圳和上海股市的基金、债券和股票)
    /R5y\IUn H!W L#d|0Endpoint:http://www.webxml.com.cn/WebServices/ChinaStockWebService.asmx
    2x{.PB;luj#Y0Disco:http://www.webxml.com.cn/WebServices/ChinaStockWebService.asmx?disco51Testing软件测试网O-C;T+ao R;cq.^O'?
    WSDL:http://www.webxml.com.cn/WebServices/ChinaStockWebService.asmx?wsdl51Testing软件测试网_ ZIulR6{d-p
    中国股票行情数据 WEB 服务(支持深圳和上海股市的基金、债券和股票)中国股票行情数据WEB服务,数据即时更新。51Testing软件测试网9U&{|8b/w5o S%gq X5n
    输出GIF分时走势图、日/周/月K线图、及时行情(股票名称、行情时间、最新价、昨收盘、今开盘、涨跌额、最低、最高、涨跌幅、成交量、成交额、竞买价、竞卖价、委比、买一 - 买五、卖一 - 卖五)。
    51Testing软件测试网 O+{U j*A ^}m
    51Testing软件测试网~-QC"gj ^

    c5}E8Lr K#Q051Testing软件测试网^9WM+mxKPU
    国内飞机航班时刻表WEB服务公用事业51Testing软件测试网+f)c)va.^W"b
    Endpoint:http://www.webxml.com.cn/webservices/DomesticAirline.asmx
    -_v+K)z+S)G6Uq0b0Disco:http://www.webxml.com.cn/webservices/DomesticAirline.asmx?disco51Testing软件测试网/a%\*n ` T;IM(C4@
    WSDL:http://www.webxml.com.cn/webservices/DomesticAirline.asmx?wsdl
    I yS!z#ApyF0国内飞机航班时刻表 WEB 服务国内飞机航班时刻表WebService提供:51Testing软件测试网 T:I#Ebsw4i
    通过出发城市和到达城市查询飞机航班、出发机场、到达机场、出发和到达时间、飞行周期、航空公司、机型等信息。

    zJ%m[US051Testing软件测试网C7_C(d}#n)M {
    51Testing软件测试网Ov7iBjI4A&H Ih

    tydQ%iP!S1vP0
    r^ q$QH4?+@*P;?0中国电视节目预告(电视节目表)WEB服务公用事业51Testing软件测试网M(Y$X,w%v~,f
    Endpoint:http://www.webxml.com.cn/webservices/ChinaTVprogramWebService.asmx51Testing软件测试网'M+T]3eCdo7F U0v
    Disco:http://www.webxml.com.cn/webservices/ChinaTVprogramWebService.asmx?disco
    H ft QV)}E0WSDL:http://www.webxml.com.cn/webservices/ChinaTVprogramWebService.asmx?wsdl51Testing软件测试网YO@!@ t+g
    中国电视节目预告(电视节目表) WEB 服务中国电视节目预告Web服务,数据准确可靠,提供全国近800个电视拼道一个星期以上的节目预告数据。51Testing软件测试网"I q~A SnA j^WF
    一、获得支持的省市(地区)和分类电视列表;51Testing软件测试网f+j0e6W C%Bkm9A
    二、通过省市ID或分类电视ID获得电视台列表;51Testing软件测试网 {k)j|'rI iA-E
    三、通过电视台ID获得该电视台频道名称;四、通过频道ID获得该频道节目列表。实例

    Sia\{%H~)^W P9t4|q051Testing软件测试网)G,Y+O wi(z
    51Testing软件测试网*^+}%Q9iByL Z
    火车时刻表WEB服务 (第六次提速最新列车时刻表)公用事业51Testing软件测试网1v;gf_4BU9p2lz
    Endpoint:http://www.webxml.com.cn/WebServices/TrainTimeWebService.asmx51Testing软件测试网|1~6k*r;f(N"H
    Disco:http://www.webxml.com.cn/WebServices/TrainTimeWebService.asmx?disco
    2`_)Ry$Sb0WSDL:http://www.webxml.com.cn/WebServices/TrainTimeWebService.asmx?wsdl51Testing软件测试网a1B?}6EW
    火车时刻表 WEB 服务 (第六次提速最新列车时刻表)火车时刻表WEB服务提供:站站查询;车次查询;车站所有车次查询。51Testing软件测试网1v+F!F*d7A$M#[
    数据来源时间:2007-5-14 第六次提速最新列车时刻表。
    EO(QE8^2Av"P0本火车时刻表WEB服务提供的列车时刻表数据仅供参考,如有异议以当地铁路部门颁布为准。实例

    h2m%[*l b:TI\]051Testing软件测试网anW8U(Qo O ^ sVv

    |0g6o.sLW8E5K ~Z s0
    &D#q]KO*p!?&@0Y0中文 <-> 英文双向翻译WEB服务获得标准数据51Testing软件测试网Zl1P*bq)^
    Endpoint:http://www.webxml.com.cn/WebServices/TranslatorWebService.asmx51Testing软件测试网 M+\Dj:v
    Disco:http://www.webxml.com.cn/WebServices/TranslatorWebService.asmx?disco
    d2D \dw1D*|0WSDL:http://www.webxml.com.cn/WebServices/TranslatorWebService.asmx?wsdl
    0V!u%lk8vP y"P6CiM1P&?0中文<->英文双向翻译 WEB 服务中文 <-> 英文双向翻译WEB服务,本词典库中大部分单词是由程序根据词频和英<->中单词间相互关联程度自动生成,难免存在有解释错误和牵强的地方请大家谅解。
    gx ?P8a;b@a0
    Cb VC'V1e7i:M0
    w/D"P+pg!Cd051Testing软件测试网}pemI&ly
    51Testing软件测试网0{kgm2E0]9E:VUy]

    F^N4T%@GA0中文简体字<->繁体字转换WEB服务计算和单位换算51Testing软件测试网'Z:PY V"gM,@
    Endpoint:http://www.webxml.com.cn/WebServices/TraditionalSimplifiedWebService.asmx
    kO#R5KF'F0Disco:http://www.webxml.com.cn/WebServices/TraditionalSimplifiedWebService.asmx?disco
    l$f,s-t!E1H0w3?0WSDL:http://www.webxml.com.cn/WebServices/TraditionalSimplifiedWebService.asmx?wsdl
    /|z7Ns+s*J*x0中文简体字<->繁体字转换 WEB 服务中文简体字<->繁体字转换WEB服务,此WebServices请不要用于任何商业目的,若有需要请联系我们,欢迎技术交流。
    Pu?[]3k.C3{$p0使用本站WEB服务请注明或链接本站:http://www.webxml.com.cn/感谢大家的支持!
    51Testing软件测试网}2eE0A$P)[l_

    9G U EF-_C$O"F q051Testing软件测试网7V/moz"Z+D

    D`WC!\ G051Testing软件测试网kvb0vL`DIu8F
    验证码图片WEB服务 支持中文、字母、数字图像和多媒体
    %~A:|%]:A%CY/C0Endpoint:http://www.webxml.com.cn/WebServices/ValidateCodeWebService.asmx51Testing软件测试网N9ek0_7m?:k
    Disco:http://www.webxml.com.cn/WebServices/ValidateCodeWebService.asmx?disco51Testing软件测试网 z"H fgs brd8S
    WSDL:http://www.webxml.com.cn/WebServices/ValidateCodeWebService.asmx?wsdl
    VohCiX,h%m0验证码图片 WEB 服务 支持中文、字母、数字验证码图片WEB服务,输出PNG高品质格式的验证码图片和字节流,字符和字符之间的间距和高度随机产生,提高了验证码的安全性。51Testing软件测试网iq.?O!P
    支持中文、字母、数字验证码图片。[演示1] [演示2]
    51Testing软件测试网 X F s5s oXJw

    1]r8M| iu0
    GL;ID6p%p0
    $] Sy b b7W)iCf1e0
    Oi JpUNf*Zv0中国邮政编码 <-> 地址信息双向查询/搜索WEB服务获得标准数据
    #]5p*xi/z/`/N9W0Endpoint:http://www.webxml.com.cn/WebServices/ChinaZipSearchWebService.asmx51Testing软件测试网&U)YhQ B)s:U.X(}
    Disco:http://www.webxml.com.cn/WebServices/ChinaZipSearchWebService.asmx?disco
    v7j:@!Y7{6k_ ?0WSDL:http://www.webxml.com.cn/WebServices/ChinaZipSearchWebService.asmx?wsdl51Testing软件测试网o\n2@;L-]H~
    中国邮政编码<->地址信息双向查询/搜索 WEB 服务中国邮政编码搜索WEB服务包含中国全部邮政编码共计187285条记录,是目前最完整的邮政编码数据,精确到乡镇级、城市精确到街道,支持邮政编码<->城市、乡镇、街道的双向查询。51Testing软件测试网#]@&T7y WAV#tV6K
    此邮政编码查询仅供参考,如邮政编码或地址有变动请以当地邮局为准,也请及时通知我们进行更正。

    4OK-o]?051Testing软件测试网VFk;w5C(u2w

    d gz ueVYq,O"v0
    g|rgIJ$c0随机英文、数字和中文简体字WEB服务其他WebServices51Testing软件测试网[,Ia2b!?@Z"`t
    Endpoint:http://www.webxml.com.cn/WebServices/RandomFontsWebService.asmx51Testing软件测试网*SBD3q7cx7Rw
    Disco:http://www.webxml.com.cn/WebServices/RandomFontsWebService.asmx?disco51Testing软件测试网)L~W5o1yFywl
    WSDL:http://www.webxml.com.cn/WebServices/RandomFontsWebService.asmx?wsdl
    1AOYe,a#g8Qn5{0随机英文、数字和中文简体字 WEB 服务随机英文、数字和中文简体字WEB服务,可用于验证码[演示1] [演示2]及其他方面,这里支持最多不超过8个随机中文简体字,10个随机英文、数字输出(一般也够了:P),如需要更多输出请联系我们51Testing软件测试网 AD C8a"C5n+kg[1I

    R)I,n\ Z051Testing软件测试网:p!K Bw}(n0w-T,w l

    i(gEIE y%X| \]0
    :q ^D:VZ'qG0IP地址来源搜索WEB服务(是目前最完整的IP地址数据)获得标准数据51Testing软件测试网h?5yL F9?2}Q:S
    Endpoint:http://www.webxml.com.cn/WebServices/IpAddressSearchWebService.asmx
    S}5UzK,`:JF;P8a!j8Q0Disco:http://www.webxml.com.cn/WebServices/IpAddressSearchWebService.asmx?disco
    3Nv1?@ZB/G4C0WSDL:http://www.webxml.com.cn/WebServices/IpAddressSearchWebService.asmx?wsdl51Testing软件测试网["VT On V;nM
    IP地址来源搜索 WEB 服务(是目前最完整的IP地址数据)IP地址搜索WEB服务包含中国和国外已知的IP地址数据,是目前最完整的IP地址数据,记录数量现已超过30万条并还在不断更新和增加中,感谢纯真网络提供IP地址数据来源。因IP地址在不断变化,此IP地址数据查询仅供参考,如发现IP地址查询错误请向纯真网络报告。
    NYRJ$U zyy[O\051Testing软件测试网Ep$w:`E2QU
    51Testing软件测试网,\?wc/E/u

    ?(aF/LE|[2ZE051Testing软件测试网ZzR3v~d |T&za
    天气预报Web服务,数据来源于中国气象局公用事业
    7pYY(OzB#LB2iT0Endpoint:http://www.webxml.com.cn/WebServices/WeatherWebService.asmx51Testing软件测试网Z8n$v3w7lC6[3as
    Disco:http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?disco
    ,wc;d;LIV0WSDL:http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl
    Y{K](s6N$hZ0天气预报Web服务,数据来源于中国气象局天气预报Web服务数据来源于中国气象局 http://www.cma.gov.cn/ ,数据每2.5小时左右自动更新一次,准确可靠。
    D+bl9A0C0包括 340 多个中国主要城市和 60 多个国外主要城市三日内的天气预报数据。实例
    51Testing软件测试网 }-y6rfd#?I'W:@{

    ](A1m"F*Kcv0

  • 第二届ATI获奖自动化测试工具介绍

    smile665 发布于 2011-01-15 10:23:06

    看到一篇文章介绍了下“ATI 获奖的自动化测试工具”,其实ATI是啥呢,我也是才google得知的,不过貌似不错的哦。www.automatedtestinginstitute.com  The Automated Testing Institute (ATI) Online Reference is the web's foremost comprehensive online resource for obtaining, exchanging and certifying industry standard test automation knowledge, information, and techniques.
    我看了这些工具,我使用得较多的有:JMeter、JUnit、TestNG、Watir、Selenium,呵呵,都基本上是些开源的;这些商业工具中也只对LoadRunner了解多一点儿。

    开源测试工具

    最佳C++开源单元测试工具:Google C++ Testing Framework cfix    Check
    最佳java开源单元测试工具:    JUnit TestNG    UISpec4J
    最佳.net开源单元测试工具:    NUnit csUnit    xUnit.net
    最佳开源单元测试工具:        JUnit NUnit    cfix TestNG

    最佳web开源功能测试工具:    Selenium Sahi WebTest Watir
    最佳java开源功能测试工具:    T-Plan RobotT-Plan Robot,Jemmy,SWTBot,UISpec4J,White    
    最佳.net开源功能测试工具:    Fitnesse,    T-Plan Robot,White
    最佳Flash/Flex开源功能测试工具:    Flex Monkey,Flash Selenium,FunFx
    最佳开源功能测试工具:        Selenium,Jsystem,    Fitnesse,    White

    最佳web开源性能测试工具:JMeter    Grinder fwptt TestMaker
    最佳Web Services/SOA开源性能测试工具:JMeter    SoapUI Grinder  Pylot
    最佳开源性能测试工具:        JMeter    SoapUI Grinder TestMaker


    商业测试工具

    最佳web商业功能测试工具:    ATI AUTOMATION HONORS WINNER, SilkTest,Rational Functional Tester,    Certify
    最佳java商业功能测试工具:    TestComplete,QA Wizard,QF-Test,Squish    
    最佳.net商业功能测试工具:    Ranorex,QA Wizard,SilkTest
    最佳Flash/Flex商业功能测试工具:Ranorex,eggPlant,RIATest
    最佳 Web Services/SOA商业功能测试工具:SilkPerformer for SOA, Lisa ,Test SOATest
    最佳商业功能测试工具:        TestComplete,Ranorex,    eggPlant,QA Wizard,SilkTest

    最佳Web/HTTPS商业性能测试工具:LoadRunner,AQTime,Rational Performance Tester,SilkPerformer
    最佳Web Services/SOA商业性能测试工具:LoadRunner,QALoad,SOATest
    最佳商业性能测试工具:        LoadRunner,AQTime,Rational Performance Tester,SilkPerformer

    英文原文:http://www.automatedtestinginstitute.com/home/index.php?option=com_content&view=article&id=1344:ati-automation-honors&catid=125:award-honorees&Itemid=1000
  • LR问题集锦

    ZhuCrystal 发布于 2011-01-31 14:21:32

    1LR录制时无法打开IE的解决方法

    解决方法一:IE6->工具->internet选项->高级 ,"启用第三方浏览器扩展"前面的勾取消掉,"确定".重启一次IE

    解决方法二:由于lr本身的稳定性,再加上在系统中安装软件时有可能会将其注册表修改掉,尤其是安装dotnet2005的时候,导致lr录制脚本时不能弹出IE页面。其实单就这个问题来看,主要是LR的注册信息被修改,无法找到IE路径。如何重新注册LR呢?在lr的安装目录(例如D:\Program Files\Mercury\LoadRunner\bin)下,单击register_vugen.bat文件,注册信息被重新改写了。重新启动一下.

    解决方法三:由于lr所涉及的环境中有安装多种浏览器(火狐、遨游之类);但是LR只承认IE浏览器,因此需要指定IE为默认浏览器,并且保证其浏览路径的正确性;

    2LR9.0打开录制时提示数据错误

    需要启用LRDEP设置。具体实施如下:右击“我的电脑”-属性-高级-性能设置-在数据执行保护中设置LRDEP

     

    3LR9.0录制脚本后关闭录制,无法正常显示原代码

    更改LR的显示设置,将View菜单下的Script. View进行勾选,之后重新启动LR即可;

     

    4、录制Web脚本时,生成的脚本中存在乱码   

    在录制脚本前,打开录制选项配置对话框Record-Options,进入到Advanced标签,先勾选“Support charset”,然后选择中支持UTF-8。之后再次录制即可;

     

    5、在使用LR8.0IE7.0结合的情况下,当点击【保存】或者【另存为】脚本时,LR被迫自动关闭;

    此问题的直接导致原因是因为LR8.0IE7.0是不兼容;要解决此问题,可将IE7.0版本变更为6.0版本,或者将LR升级为9.0版本;

     

    6LR录制可以正常启动IE,却无法正常打开相关网页

    此问题是由于IE没有准确定位引起,只需要将IE重新定位即可;在Start Recording中,将Program to record重新设置;之后重启LR即可;

     

    7LR可正常录制脚本,但是在点击进行回放时,LR被迫自动关闭

    在录制选项中设置其不同的录制模式可使此问题得到解决; RunTime-Setting -> Internet  Protocol -> Proxy - > 选择obain the proxy settings from the default browser

  • 使用loadrunner性能测试经验总结

    paulinetina 发布于 2010-09-20 20:33:32

    转自:http://www.3atesting.com/blog/index.php?file=viewlog&uid=1831&id=315

    第一步:计划测试
    1、明确压力点,根据压力点设计多少种场景组合
    2、把文档(包括多少种场景组合、场景与场景组合条件的对应表)写好
    3、如果监测UNIX机器,在被监测的机器需要安装监测Unix的进程
    4、让开发人员帮助我们准备测试数据或他们写相关的文档我们来准备数据
    5、让开发人员做一个恢复数据的脚本,以便于我们每次测试的时候都能够有一个相同的环境
    6、针对每一个模块包括四个子文件夹:如模块A下包括“脚本”“场景”“结果”“图表” 四个子文件夹,每个子文件夹储存对应的文件,如下表所示

    其中:结果名“1场景”是在场景中的“Results Setting”中设置的,具体的设置见“建立场景”部分,这里也可以有另外一种方法:在打开模板设置,如下:

    选中“Automatically save the session as:”并且在“%ResultDir%”后面填写你想保存的文件名,当你打开某个lrr文件时,系统自动在当前目录中生成一个文件保存分析图表,如下图所示:

    第二步:生成测试脚本
    1、 把登陆部分放到“vuser_init”部分,把需要测试的内容部分放到“Action”部分执行;但是如果是模拟多个用户登陆系统,则要把登陆部分放到Action部分来实现
    2、 录制脚本后,想查询某个函数的原型,按“F1”键
    3、 确认脚本中哪些参数是需要进行参数化的(最好能可以和开发人员一起确认)
    4、 在脚本参数化时把函数web_submit_data()中的ITEMDATA后面的数据参数化,因为这些数据是传递给服务器的,当然也可以把一个函数中的所有相同变量都替换掉
    5、 脚本中无用的部分用“/*”“*/”“//”注释掉,但最好不要删除
    6、 调试脚本遵循以下原则:
       确认在VU里SUSI(单用户单循环次数single user & single iteration)
    确认在VU里SUMI(单用户多循环次数single user & multi iteration)
    确认在controller中MUSI(多用户单循环次数multi user & single iteration)
    确认在controller中MUMI(多用户多循环次数 multi user & multi iteration)
    7、 事务的名称取的有意义便于事务之间的区分,把所有的事务名都记录在一起,便于在测试结果概要中区分它们,这要写成一个表:某次测试有哪些模块,每个模块中有哪些事务(见对应的“关系表”)
    8、 在 “Parameter List”中可以选择参数类型“Random Number”,使某一个参数取设定的范围内的随机值
    第三步:建立场景
    1、 把场景名称编号,并制定出一份场景名称和场景条件组合的对应表。比如,场景m对应于“某一模块_xx个vu _分z台machine”(见“关系表”中的例子)
    2、 根据上面的对应表把场景设置好,需要设置的要素如下:总体多少个用户、分多少个组、每个组有多少个用户、分几台机器运行、每个脚本迭代多少次、是否回放think time时间、检查Parameter List中每个参数设置是否正确、参数从表中取值间隔是否正确、是否选中“Initialize all Vusers before Run”
    3、 测试结果应该保存为“m场景0,m场景1,…”
    4、 把虚拟用户分散到几台机器上和在一台机器上面都要进行测试,因为有可以效果不同
    5、 场景中如果有需要改动的地方,必须新建一个场景(建议使用“另存为”,然后再修改结果文件名,再选择相应的脚本),并把场景按顺序编号,先维护好场景与场景组合条件的对应表,以便以后的查找,并且在结果 “Results Setting”中设置的结果名与场景名相同。建议在“Results Setting”中选中“Automatically create a results directory for each scenario executeon”让它每次自动累加,不建议选中“Automatically overwrite existing results directory without prompting for confirmation”,因为我们不要覆盖掉以前的测试结果,把它保存下来以便有个根据。
    6、 需要注意的地方:当在“Parameter List”中的“Select next row”选中“Unique”时,如果再在“Edit Schedule\Schedule by Scenario\Duration”中选中第二项“Run for XX after the ramp up has been completed”时系统就会报错,提示“Unique”类型不相符。
    7、 在“Run-time Setting”设置中,“General”中的“Pacing”非常有用,可以设置每次迭代之间相隔多少时间,也可以是随机的取值
    8、 建议:把“Parameter List”和“Run-time Setting”中的所有设置都搞熟悉,这样便于以后对脚本和场景进行设置
    9、 设计“Parameter List”时的小技巧:即在“Allocate X values for each Vuser”时,尽量 把它的间隔在数据容许的范围内取大些,这样可以做从一次迭代到最大值迭代,而且对脚本没有什么影响
    10、当一个脚本中有多个事务,在事务前面增加集合点时需要一点技巧。或者我们把脚本复制几个,或者我这样做:测试前面的事务的压力时,把后面的事务前的集合点设置为不激活状态;在测试后面的事务的压力时,把前面的事务的集合点设置为不激活状态,另外最好不选中Initialize all Vusers before Run,具体参见Controller中的“Scenario/Rendezvous”,及用户手册(按F1)
    11、把持续时间从最后60秒改为整个场景的时间,右键单击某个图,选择“Configue”,修
    改Graph Time即可
    12、每次从一个场景修改后保存为另一个场景时别忘记把结果保存文件名修改相对应的文件名。在设置结果保存文件名时有一个技巧:如果你打开这个窗口时,点击确定则系统会
    默认以“4场景2”为基点向后加“4场景20”“4场景21”等等,但是如果你把结果文件名后面的数据去掉,改为“4场景”,点击确定后,系统会自动搜索是以“4场景”开头的文件名,并在它的后面继续增加,比如把它改为“4场景”时,下次结果保存在“4场景3”中。而且他在搜索的时候搜索以“4场景”开头的文件名,从0开始,有的话就不取代而跳过,没有的话就取代。
    第四步:运行场景
    1、 运行场景前需要注意的事项:每个组的虚拟用户数、迭代次数、think time、参数化时的取值间隔、执行恢复数据的脚本、确认虚拟机的LoadRunner Agent Service打开
    2、 如果监测Unix,运行场景前需要启动监测Unix进程,启动的命令“rpc.rstatd”、查看这个进程是否启动的命令“rpcinfo –p”
    3、 运行前使Generator机器处理Ready状态
    4、 确认被监测的机器已经连接上去,并且添加自己所需要的计数器
    5、 运行之前一定要确认系统中压力点的数据量是多少
    6、 确认以上都正确时再运行测试场景
    第五步:监视场景
    1、打开 “Passed Transactions”或“Failed Transactions”,可以随时观察到事务的运行状态
    第六步:分析测试结果
    1、 打开Analysis后,把经过数据处理的结果图表保存到“图表”文件夹,并且文件名和场景名、结果名相同,这样便于以后的查阅。也可以省去每次进行数据处理的时间。
    2、 可以通过点击界面上的 “View Run Time Setting”可以看到此场景运行时的一些场景设置
    3、 在关联图表时可以自动调节每个元素的比例,点击右键,选择 即可
    4、 每次测试结束后确认所做的操作是正确的,确认正确后再分析结果
    5、 在结果文件夹中为每个场景建立一个文档,把每次运行时的情况记录下来以便于写测试报告,尤其运行错误的原因记录下来,并把开发人员所做的修改也记录下来以便知道开发人员做了些什么修改
    6、 在分析运行结果时可以把几个结果合在一起进行比较,打开如下“Cross with Result…”

    即可,然后增加一个运行结果,这样就可以把你所需要的结果放到一起比较了

  • winrunner脚本开发资料

    wxiaoxiang 发布于 2008-01-16 13:54:58

    Winrunner GUI说明:

    1.GUI描述说明:

    TDataListView_0                            TTreeView_1

    {                                          {

     class: object,                                class: list,

     MSW_class: TDataListView,                   MSW_class: TTreeView,

     displayed: 1,                                index: 0

     index: 0                                    }

    }

    示例a                                      示例b

     

    以上ab示例分别是非标准控件和标准控件的GUI描述,

    首先,例子aclass描述是object,说明winrunner无法辨认该控件的运行特征,因此只将其辨认未object,winrunner将所有不能辨认其内部运行特征的对象都识别未object.

    再者,例子bclass描述是list,说明winrunner将其辨认为了list类的控件,那么我们对该控件进行操作时就可以使用list类的函数(TSL库提供).

    下面讲解一些比较重要的属性的意义(其他属性的意义可以查看winrunner的帮助文档):

     

    1)Class:   winrunner将该对象识别为class属性描述的对象

     

    2)MSW_class:  winrunner抓取的该对象的实际对象名称.

     

    3)那么

    {

     class: object,  

     MSW_class: TDataListView      

    }

    表示的就时将实际对象名称为TDataListView的对象识别为object对象进行操作.

     

    4)Indexlocation属性时选择符属性 ,当一个GUI的属性识别出来有多个对象时需要使用选择符号来识别和区分:

    (1)Index使用控件的默认索引来识别,例如edit1, edit22个控件都是Tedit控件,那么当一个界面上同事出现该2个控件时,那么用index识别,index: 1就代表了edit1,index:2表示edit2.

    (2)Location使用TAB聚焦顺序来识别控件,同上,如果edit1edit2TAB聚焦顺序分别是第一个TAB聚焦edit2,第二个TAB聚焦edit1,那么location:2表示edit1,location:1表示edit2.

            (3)如果一个控件经过识别之后包含了x,y的属性,那么它将是由x,y来帮助唯一识别的GUI描述,我们不建议使用x,y来识别,因为这将大大降低可移植性.所以建议一个对象难以唯一辨认的时候请使用选择符号来帮助识别.(当然,局限性是要求程序员不要随便改动TAB的聚焦顺序和对象的索引).

     

    5),winrunnerGUI的描述也提供了正则表达式的描述,例如模糊匹配上就有!.*

    使用方法:

           (1),!A.*表示以A为起始的任何字符.

           (2),!.A*表示以A为结尾的任何字符.

     

    2.GUI对象的操作:

    (1),如果是标准控件,请直接使用TSL库提供的标准函数操作.

    (2),如果是非标准控件,GUI配置影射为标准控件再使用TSL库的标准函数操作.

    (3),如果是非标准控件无法影射为标准控件,那么也请识别为object对象,使用通过x,y进行操作的函数.

    (4)如果是非标准控件识别为object对象,使用通过x,y进行操作的函数不能满足要求的情况下,请结合使用键盘模拟操作进行辅助.

    (5)当以上情况均无法完成的情况下,可以考虑将非标准控件识别为object对象,并获取object的句柄,要后通过句柄来发送消息来驱动控件.

    (6)最后就是开发DLL来驱动和模拟控件的操作了,一般结合(5)比较有效果,但是这带来的是可维护性低,脚本工作量过大,延误自动化测试框架的建立和造成环境移植的冲突,当程序代码有了修改,那么又不得不花费巨大得工作量去修改DLL以及与脚本通讯的函数.(例如通过DLL内的程序去访问所测对象的API接口,实现对所测对象的各种操作)

    提示:一般不建议使用第6,除非不得已或者所测平台的相应模块内部接口或者代码改动很小或者没有改动才考虑使用.事实上即使是非标准控件,大部分都可以通过识别为object后使用自定义函数来封装对坐标计算,模拟操作,对象属性等进行编程来实现其功能.

     

    Winrunner 脚本说明:

    1.部分代码说明

    1),load_dll("user32.dll");
    NZq)` P7uk ]0extern int PostMessageA(in long, in long, in long, in long);
    D[1]V%T#wg,xY/^!q0win_get_info("WIN","handle",hWnd);

    PostMessageA(hWnd, 1128, 1, coord_array[1]);

    以上代码是获取WIN句柄,使用user32.DLL中的PostMessageA进行发送消息来完成对控件的操作的代码.

    基本上USER32.DLL里面的API都可以通过这个方式进行调用,其中PostMessageASendMessageA2个方法最常用,特别在测试一些难于用TSL里面的标准函数进行操作的控件时,采用这2个方法会有非常好的收获,结合VCSPY++会让你得心应手.

    (最好大家再去了解一下WINDOWS SDK的编程原理,WINDOWS有一个消息机制,一直在循环等待,这也是WINDOWS的一个特点,通过消息来进行各种活动)

     

    2),table = "Excel.xls";                            
    3Epp2`7M0rc = ddt_open(table, DDT_MODE_READ);

    #打开Excel.xls软件测试专业网站:51Testing软件测试网 ^t"Z‑M3N1?U
    if (rc!= E_OK && rc != E_FILE_OPEN)
    !`2D nYe­kC[1]_


    In0pause("Cannot open table.");
    fw)j&P-l3FX/C0ddt_get_row_count(table,table_RowCount);

    #获取数据驱动表的数据总数
    _3T{.Gvo0    for(table_Row = 1; table_Row <= table_RowCount; table_Row ++)软件测试专业网站:51Testing软件测试网
    O$Ra5Q(i4q
        {     
    软件测试专业网站:51Testing软件测试网
    ;t3ed7UO­_&eI!B
               LCM = ddt_val(table,"
    数据列 ");

               #获取数据驱动表的列名未数据列的一列的内容并赋值给LCM变量.

    ddt_set_row(table,table_Row);

    #设置数据驱动表table的获取信息在table_Row行中.软件测试专业网站:51Testing软件测试网WZ0JSl[ l(T7Y
       

    }

    ddt_close(table);

    以上代码时数据驱动例子;

    应用举例:当一个测试用例涉及多个不同数据分别对平台进行测试,那么就需要使用数据驱动,例如对一个输入框进行测试,那么根据等价类划分,边界值,因果图,RUP等获得测试数据样例,然后将测试数据样例放到数据驱动中,winrunner脚本根据不同的数据循环执行某个脚本,最终获得对入口数据的全面覆盖.同时也可以作为一个自定义的数据源来使用.数据驱动要灵活运用.

     TSL常用函数说明:

    1.TSL语言语法特点:

           TSL语言实际上是一种类C语言,因为语句控制的关键字都是跟C语言一致的,部分C语言的函数也可以在TSL语言中使用,但是也有不同的地方,例如:

    1,变量的声明:TSL语言没有整型,实型等的定义,只有auto,static,public等定义,(详细的区别可以去参考TSL说明文档)

    2,函数的定义:TSL语言定义的函数需要有关键字function,:

           Function ShowMsg(in A,out B)

           {

                  Auto C;

                  C = A;

                  B = C+B;

                  Return C

           }

    函数执行的过程是:in 参数即A变量中传入,执行之后通过出口参数out B变量传会调用处,同事函数自己会有返回值C.

    注意:在使用自定义函数之前需要先编译该函数即先运行该函数脚本.

    3,TSL语言最大的特点就是有自己的库函数,就是TSL,通过它可以方便的执行各种自动化测试操作.

    4,TSL脚本的执行方式与普通的程序编译及运行顺序是有区别的.

     2.数据库章:

           (1)建立数据库连接:

    db_connect("TNB","DSN=CPC8888;UID=sa;PWD=sinoccqa;APP=WinRunner;WSID=CHY ",20);

    参数说明:

        “TNB” 是数据库连接成功后的会话名,建立连接之后可以使用TNB来进行各种数据库操作,

    “DSN” 是本机的数据源名称,

    “UID” 是登陆数据的用户名,

    “PWD” 是登陆数据库的密码.

    函数功能:

    当参数正确输入的情况下,建立了连接之后函数会返回E_OK,否则返回其他值(详细可以参考winrunner自带的TSL说明);

     (2)执行SQL语句:

    db_execute_query("TNB","SQL",record_number);

    参数说明:

    “TNB” 就是(1)上说的数据库连接会话名,通过它才能进行数据库操作,

    “SQL” 是数据库所要执行的SQL,

    “record_number” 是执行了SQL之后从数据库中返回的结果集数据数目.

    (3)获取返回的数据集信息:

    db_get_row("TNB",Row,modid);

    参数说明:

    “TNB” 是数据库连接成功后的会话名,

    “Row” 是指函数要获取数据集中第几行的信息,

    “modid” 是指将获得第Row行的数据集信息放到变量modid.

     (4)断开数据库连接:

    db_disconnect ("TNB");

    参数说明:

    “TNB” 是数据库连接成功后的会话名,

    函数功能:

    断开会话名为“TNB”的数据库连接.

     3.DLL函数:

    1,加载DLL:

    load_dll("PATH");

    参数说明:

    “PATH”加载DLL的带路径的全文件名;

     2,使用DLL中定义的函数:

    extern int DllFunctionName(in long);

    在使用DLL 查看(787) 评论(0) 收藏 分享 管理

  • 63个国外优秀测试站点链接

    岁月童话 发布于 2008-09-23 12:49:59

    http://bdonline.sqe.com/ 一个关于网站测试方面的网页,对这方面感兴趣的人可以参考
    http://citeseer.nj.nec.com/ 一个丰富的电子书库,内容很多,而且提供著作的相关文档参考和下载,是作者非常推荐的一个资料参考网站
    http://groups.yahoo.com/group/LoadRunner 性能测试工具LoadRunner的一个论坛
    http://groups.yahoo.com/grorp/testing-paperannou-nce/messages 提供网站上当前发布的软件测试资料列表
    http://satc.gsfc.nasa.gov/homepage.html 软件保证中心是美国国家航天局(NASA)投资设立的一个软件可靠性和安全性研究中心,研究包括了度量、工具、风险等各个方面
    http://seg.iit.nrc.ca/English/index.html 加拿大的一个研究软件工程质量方面的组织,可以提供研究论文的下载
    http://sepo.nosc.mil 内容来自美国SAN DIEGO的软件工程机构(Sofrware Engineering Process Office)主页,包括软件工程知识方面的资料
    http://www.asq.org/ 是世界上最大的一个质量团体组织之一,有着比较丰富的论文资源,不过是收费的
    http://www.automated-testing.com/ 一个自动化软件测试和自然语言处理研究页面,属于个人网页,上面有些资源可供下载
    http://www.benchmarkresources.com/ 提供有关标杆方面的资料,也有一些其它软件测试方面的资料
    http://www.betasoft.com/ 包含一些流行测试工具的介绍、下载和讨论,还提供测试方面的资料
    http://www.brunel.ac.uk/~csstmmh2/vast/home.html VASTT研究组织,主要从事通过切片技术、测试技术和转换技术来验证和分析系统,对这方面技术感兴趣的人是可以在这里参考一些研究的项目及相关的一些主题信息
    http://www.cc.gatech.edu/aristotle/ Aristole研究组织,研究软件系统分析、测试和维护等方面的技术,在测试方面的研究包括了回归测试、测试套最小化、面向对象软件测试等内容,该网站有丰富的论文资源可供下载
    http://www.computer.org/ IEEE是世界上最悠久,也是在最大的计算机社会团体,它的电子图书馆拥有众多计算机方面的论文资料,是研究计算机方面的一个重要资源参考来源
    http://www.cs.colostate.edu/testing/ 可靠性研究网站,有一些可靠性方面的论文资料
    http://www.cs.york.ac.uk/testsig/ 约克大学的测试专业兴趣研究组网页,有比较丰富的资料下载,内容涵盖了测试的多个方面,包括测试自动化、测试数据生成、面向对象软件测试、验证确认过程等
    http://www.csr.ncl.ac.uk/index.html 学校里面的一个软件可靠性研究中心,提供有关软件可靠性研究方面的一些信息和资料,对这方面感兴趣的人可以参考
    http://www.dcs.shef.ac.uk/research/groups/vt/ 学校里的一个验证和测试研究机构,有一些相关项目和论文可供参考
    http://www.esi.es/en/main/ ESI(欧洲软件组织),提供包括CMM评估方面的各种服务
    http://www.europeindia.org/cd02/index.htm 一个可靠性研究网站,有可靠性方面的一些资料提供参考
    http://www.fortest.org.uk/ 一个测试研究网站,研究包括了静态测试技术(如模型检查、理论证明)和动态测试(如测试自动化、特定缺陷的检查、测试有效性分析等)
    http://www.grove.co.uk/ 一个有关软件测试和咨询机构的网站,有一些测试方面的课程和资料供下载
    http://www.hq.nasa.gov/office/codeq/relpract/prcls-23.htm NASA可靠性设计实践资料
    http://www.io.com/~wazmo/ Bret Pettichord的主页,他的一个热点测试页面连接非常有价值,从中可以获得相当大的测试资料,很有价值
    http://www.iso.ch/iso/en/ISOOnline.frontpage 国际标准化组织,提供包括ISO标准系统方面的各类参考资料
    http://www.isse.gmu.edu/faculty/ofut/classes/ 821-ootest/papers.html 提供面向对象和基于构架的测试方面著作下载,对这方面感兴趣的读者可以参考该网站,肯定有价值
    http://www.ivv.nasa.gov/ NASA设立的独立验证和确认机构,该机构提出了软件开发的全面验证和确认,在此可以获得这方面的研究资料
    http://www.kaner.com/ 著名的测试专家Cem Kanner的主页,里面有许多关于测试的专题文章,相信对大家都有用。Cem Kanner关于测试的最著名的书要算Testing Software,这本书已成为一个测试人员的标准参考书
    http://www.library.cmu.edu/Re-search/Engineer- ingAndSciences/CS+ECE/index.html 卡耐基梅陇大学网上图书馆,在这里你可以获得有关计算机方面各类论文资料,内容极其庞大,是研究软件测试不可获取的资料来源之一
    http://www.loadtester.com/ 一个性能测试方面的网站,提供有关性能测试、性能监控等方面的资源,包括论文、论坛以及一些相关链接
    http://www.mareinig.ch/mt/index.html 关于软件工程和应用开发领域的各种免费的实践知识、时事信息和资料文件下载,包括了测试方面的内容
    http://www.mtsu.ceu/-storm/ 软件测试在线资源,包括提供目前有哪些人在研究测试,测试工具列表连接,测试会议,测试新闻和讨论,软件测试文学(包括各种测试杂志,测试报告),各种测试研究组织等内容
    http://www.psqtcomference.com/ 实用软件质量技术和实用软件测试技术国际学术会议宣传网站,每年都会举行两次
    http://www.qacity.com/front.htm 测试工程师资源网站,包含各种测试技术及相关资料下载
    http://www.qaforums.com/ 关于软件质量保证方面的一个论坛,需要注册
    http://www.qaiusa.com/ QAI是一个提供质量保证方面咨询的国际著名机构,提供各种质量和测试方面证书认证
    http://www.qualitytree.com/ 一个测试咨询提供商,有一些测试可供下载,有几篇关于缺陷管理方面的文章值得参考
    http://www.rational.com/ IBM Rational的官方网站,可以在这里寻找测试方面的工具信息。IBM Rational提供测试方面一系列的工具,比较全面
    http://rexblackconsulting.com/Pages/publicat-ions.htm
    Rex Black的个人主页,有一些测试和测试管理方面的资料可供下载
    http://www.riceconsulting.com/ 一个测试咨询提供商,有一些测试资料可供下载,但不多
    http://www.satisfice.com/ 包含James Bach关于软件测试和过程方面的很多论文,尤其在启发式测试策略方面值得参考
    http://www.satisfice.com/seminars.shtml 一个黑盒软件测试方面的研讨会,主要由测试专家Cem Kanar和James Bach组织,有一些值得下载的资料
    http://www.sdmagazine.com/ 软件开发杂志,经常会有一些关于测试方面好的论文资料,同时还包括了项目和过程改进方面的课题,并且定期会有一些关于质量和测试方面的问题讨论
    http://www.sei.cmu.edu/ 著名的软件工程组织,承担美国国防部众多软件工程研究项目,在这里你可以获俄各类关于工程质量和测试方面的资料。该网站提供强有力的搜索功能,可以快速检索到你想要的论文资料,并且可以免费下载
    http://www.soft.com/Institute/HotList/ 提供了网上软件质量热点连接,包括:专业团体组织连接、教育机构连接、商业咨询公司连接、质量相关技术会议连接、各类测试技术专题连接等
    http://www.soft.com/News/QTN-Online/ 质量技术时事,提供有关测试质量方面的一些时事介绍信息,对于关心测试和质量发展的人士来说是很有价值的
    http://www.softwaredioxide.com/ 包括软件工程(CMM,CMMI,项目管理)软件测试等方面的资源
    http://www.softwareqatest.com/ 软件质量/测试资源中心。该中心提供了常见的有关测试方面的FAQ资料,各质量/测试网站介绍,各质量/测试工具介绍,各质量/策划书籍介绍以及与测试相关的工作网站介绍
    http://www.softwaretestinginstitute.com 一个软件测试机构,提供软件质量/测试方面的调查分析,测试计划模板,测试WWW的技术,如何获得测试证书的指导,测试方面书籍介绍,并且提供了一个测试论坛
    http://www.sqatester.com/index.htm 一个包含各种测试和质量保证方面的技术网站,提供咨询和培训服务,并有一些测试人员社团组织,特色内容是缺陷处理方面的技术
    http://www.sqe.com/ 一个软件质量工程服务性网站,组织软件测试自动化、STAR-EASE、STARWEST等方面的测试学术会议,并提供一些相关信息资料和课程服务
    http://www.stickyminds.com/ 提供关于软件测试和质量保证方面的当前发展信息资料,论文等资源
    http://www.stqemagazine.com/ 软件策划和质量工程杂志,经常有一些好的论文供下载,不过数量较少,更多地需要通过订购获得,内容还是很有价值的
    http://www.tantara.ab.ca/ 软件质量方面的一个咨询网站,有过程改进方面的一些资料提供
    http://www.tcse.org/ IEEE的一个软件工程技术委员会,提供技术论文下载,并有一个功能强大的分类下载搜索功能,可以搜索到测试类型、测试管理、 测试分析等各方面资料
    http://www.testing.com/ 测试技术专家Brain Marick的主页,包含了Marick 研究的一些资料和论文,该网页提供了测试模式方面的资料,值得研究。总之,如果对测试实践感兴趣,该网站一定不能错过
    http://www.testingcenter.com/ 有一些测试方面的课程体系,有一些价值
    http://www.testingconferences.com/asiastar/home 著名的AsiaStar测试国际学术会议官方网站,感兴趣的人一定不能错过
    http://www.testingstuff.com/ Kerry Zallar的个人主页,提供一些有关培训、工具、会议、论文方面的参考信息
    http://www-sqi.cit.gu.edu.au/ 软件质量机构,有一些技术资料可以供下载,包括软件产品质量模型、再工程、软件质量改进等
  • QTP识别对象和操作原理

    huijuan0501 发布于 2009-12-07 16:08:41

    最近准备用qtp 来做项目的测试,收藏些东东先看看

    一、识别对象的原理QTP里的对象有两个概念,一个是Test Object(简称TO),一个是Runtime Object(简称RO)。
     
      这两个概念从字面上不大好理解,也容易混淆。
     
      但从实际作用上来看,应该说TO就是是仓库文件里定义的仓库对象,RO是被测试软件的实际对象。
     
      QTP识别对象,一般是要求先在对象仓库文件里定义仓库对象,里面存有实际对象的特征属性的值。
    然后在运行的时候,QTP会根据脚本里的对象名字,在对象仓库里找到对应的仓库对象,接着根据仓库对象的特征属性描述,在被测试软件里搜索找到相匹配的实际对象,最后就可以对实际对象进行操作了。
     
      仓库对象TO一般在录制/编写脚本时加入仓库文件,它不仅可以在录制编写时进行修改,也可以在运行过程中进行动态修改,以匹配实际对象。
     
      和TO、RO相关的几个函数有:GetTOProperty():取得仓库对象的某个属性的值GetTOProperties():取得仓库对象的所有属性的值SetTOProperty():设置仓库对象的某个属性的值GetROProperty():取得实际对象的某个属性的值理解了TO的含义,你就可以自由的用SetTOProperty()定义TO,以灵活的操作RO比如有个测试任务,窗口上有很多待检查的记录,每条记录右边都有一个Check按钮,用来检查各条记录。
     
      记录个数不定,所以Check按钮个数也就不定,只有一个Edit显示记录个数。
     
      我们要对每条记录进行检查,也就是要点击每个Check按钮。

    但是Check按钮个数不定,不好录制,而且个数可能也很多(上百个),即使能一一录制,那也很麻烦。
     
      那我有一个好办法,只录制一个按钮对象,它设有两个特征属性 label=OK, index=0然后用下面的脚本,就可以完成测试buttonNum = CInt(JavaWindow("Test")。JavaEdit("Record Num")。GetROProperty("value"))
     
      For buttonIndex = 0 to buttonNum - 1 JavaWindow("Test")。JavaButton("Check")。SetTOProperty("index", buttonIndex)
     
      JavaWindow("Test")。JavaButton("Check")。Click Next或者窗口上有New、Modify、Delete、Check等好几个按钮,要把这几个按钮一一按过去我在对象仓库里只设置一个按钮对象AnyButton,label特征属性值填任意值,然后用下面脚本执行测试JavaWindow("Test")。JavaButton("AnyButton")。SetTOProperty("label", "New")
     
      JavaWindow("Test")。JavaButton("AnyButton")。Click JavaWindow("Test")。JavaButton("AnyButton")。SetTOProperty("label", "Modify")
     
      JavaWindow("Test")。JavaButton("AnyButton")。Click JavaWindow("Test")。JavaButton("AnyButton")。SetTOProperty("label", "Delete")
     
      JavaWindow("Test")。JavaButton("AnyButton")。Click JavaWindow("Test")。JavaButton("AnyButton")。SetTOProperty("label", "Check")
     
      JavaWindow("Test")。JavaButton("AnyButton")。Click另外,QTP还支持脚本描述的方法来定义和访问对象,即不需要在仓库里定义,也能访问和操作实际对象如上面两个任务,可以如下实现1. 不需要在仓库里定义Check按钮对象,直接用下面脚本来实现测试buttonNum = CInt(JavaWindow("Test")。JavaEdit("Record Num")。GetROProperty("value"))
     
      For buttonIndex = 0 to buttonNum - 1 JavaWindow("Test")。JavaButton("label:=Check", "index:="+CStr(buttonIndex))。Click Next 2. 不需要在仓库里定义New、Modify、Delete、Check按钮对象,直接用下面脚本来实现测试JavaWindow("Test")。JavaButton("label:=New")。Click JavaWindow("Test")。JavaButton("label:=Modify")。Click JavaWindow("Test")。JavaButton("label:=Delete")。Click JavaWindow("Test")。JavaButton("label:=Check")。Click

      二、QTP操作对象的原理QTP为用户提供了两种操作对象的接口,一种就是对象的封装接口,另一种是对象的自身接口。
     
      对象的自身接口是对象控件本身的接口,只要做过软件开发,使用过控件的人应该很清楚。
     
      对象的封装接口是QTP为对象封装的另一层接口,它是QTP通过调用对象的自身接口来实现的。
     
      两种接口的脚本书写格式的差别在于:自身接口需要在对象名后面加object再加属性名或方法名,封装接口就不用在对象名后面加object.
    具体格式如下:对实际对象的操作:对象。object.自身属性对象。object.自身方法()
     
      对象。GetROProperty("封装属性")
     
      对象。封装方法()
     
      对仓库对象的操作:对象。GetTOProperty("封装属性")
     
      对象。GetTOProperties()      ‘获取所有封装属性的值对象。SetTOProperty("封装属性", "封装属性值")
     
      比如操作JavaEdit对象,通过QTP封装的封装接口,脚本如下:设置JavaEdit的内容:JavaDialog("Add NE")。JavaEdit("NE Name")。Set "NE1"读取JavaEdit的内容:msgbox JavaDialog("Add NE")。JavaEdit("NE Name")。GetROProperty("value")

    如果通过JavaEdit的自身接口,脚本如下:设置JavaEdit的内容:JavaDialog("Add NE")。JavaEdit("NE Name")。object.setText("NE1")
     
      读取JavaEdit的内容:Msgbox JavaDialog("Add NE")。JavaEdit("NE Name")。object.getText()
     
      QTP执行JavaEdit()。Set语句时,是通过执行JavaEdit()。object.setText()来实现的。
     
      QTP执行JavaEdit()。GetROProperty("value"),是通过执行JavaEdit()。object.getText()来实现的。
     
      JavaEdit对象的封装接口Set()和GetROProperty("value"),是QTP封装JavaEdit对象的自身接口setText()和getText()而得来的。

    对象的封装接口是QTP使用的缺省接口,我们录制出来的脚本都是使用封装接口,大家用的也都是封装接口。
     
      但是封装接口不如自身接口丰富,因为QTP只是封装了部分常用的自身接口嘛。
     
      所以我们在需要时,可以绕过封装接口,直接调用对象的自身接口。
     
      不过有些自身接口不够稳定,在实践中偶尔会出现问题,但是概率很少。
     
      封装接口有相应功能的话,就尽量用封装接口吧!
     
      理解了封装接口和自身接口的原理,我们就可以更加灵活的操作对象了。
     
      但是我们怎么知道对象都有哪些封装接口和自身接口呢?
     
      其实很简单,用对象查看器(Object Spy)查看对象,在查看窗口里有列出这些接口,包括属性和方法。
     
      窗口中间有选择栏让你选择Run-time Object或者Test Object,当你选择Runtime Object时,它显示的就是对象的自身接口(自身的属性和方法)
     
      当你选择Test Object时,它显示的就是对象的封装接口(封装的属性和方法)
     
      (注意:GetROProperty访问的是实际对象的封装接口,GetTOProperty访问的是仓库对象的封装接口,两者访问的都是对象的封装接口,即Object Spy窗口里选Test Object时显示的属性。
     
      不要以为GetROProperty访问的是自身接口,即Object Spy窗口里选Run-time Object时显示的属性。
     
      QTP里的Test Object/Run-time Object的概念太容易让人混淆了!
     
      它既用来区分仓库对象和实际对象,又用来区分对象的封装接口和自身接口。)



  • 测试架构师团队的管理

    架构师Jack 发布于 2009-10-25 23:31:11

    识人:通常有丰富工作经验的人已懂的如何伪装自己,如果你看不出一个员工的缺点,则你对员工沟通了解太少,是件危险的事。而一个员工的缺点是以相似案例2个以上为标准,才能认为是他的缺点。识人时,有个误区就是如何正确对待有创新思想的员工。创新固然是好,但要有限制的创新。并不是一个人越天马行空越好。应该围绕:提高测试质量,减少测试成本来创新,并有两个约束条件,即所在公司的资源是否支撑,创新是否能解决当前哪个问题?创新所依赖的人员技能现状是支持当前能落地,还是要等12年才是合适的落地时间,技术研究团队是否还有更重要的工作任务吗?

     绩效辅导:可以灵活采用教练式,告知式,训斥式。 

    爱心:我自己常感觉心里把他们当成了自己的几个儿子来关心,关爱他们的个人成长(虽然生理年龄相差不大,仅因我业务比他们强,思想比他们成熟些,更具有领导力) 

    排兵布阵:所有测试架构师都要求和产品测试组的同事坐在一起,直接解决一线的急迫问题。然后定期集中在一起,把各产品组的问题进行共性抽取,最后依据每个人自己的兴趣和特长,选取优先级高的共性方向进行专项技术研究。 

    团队目标:领导者根据公司的公共需求定大方向,员工根据自己所看到的问题进行目标分解。 

    技术研究:研究方向应该自下而上,来自一线。研究过程:帮助员工做好规划,充分信任,但不能放羊式管理。避免技术研究时工作思路仅局限于单个测试组单个工具的使用上,因为这应该是产品组高级测试工程师的主要工作,测试架构师应该思考你的工作成果如何在更多的产品组范围内,更长时间内帮助公司提高测试质量,减少测试成本。 

    防招聘陷阱:失败案例,招了一位在500强外企工作了十几年的测试经理,给予技术级别比在职人都高,只因为工作年限最长。结果,后来的工作表现只是一个测试经理,开会时最大的声音就只是对外企测试流程最熟悉。所以,专家招聘不能迷信外企或单纯的工作年限。我有一篇文章《测试实践更重于测试思想》正好说明了为什么工作年限长的人不一定是专家。一个人的能力70%来自实践后的反思,没有实践,玩不动。只有实践没有反思出东西,也白实践了,因为头脑依然是空的。

  • TD 中工作流的应用

    onlonely 发布于 2009-02-09 14:59:15

    前言:
    我使用TD时间也不是非常长,和牛人相比那是天壤之别!只是我有幸配置TD。相信不是哪么多测试人员有这种锻炼的机会!
    在我配置的过程中,发现关于工作流(workflow)的资料非常之少,给我配置起来带来了很大时间上的浪费。可是工作流却是TD功能宽度和自定义级别最大的,如果不学会来使用,TD很多应该能实现的功能都可能大打折扣或者不能使用。当然,本着对初学者和不太懂的人以借鉴的思想,我尽量写的简便通俗易懂点
    ­
    一、基础篇:    
    为了能够更好的开始讲解工作流,我先说明些东西。这些内容是基础。请耐心看,如果你已经知道可以跳过。
    1.作流其实就是TD中提供的一种可以达到编程效果的一个编辑器。我们可以直接编辑脚本,不用单独编译。
    2.工作流脚本是使用VB语言编写的,所以它支持如msgbox类的输入输出函数。
    3.您需要明确知道你想在什么时候执行你的脚本。比如Defects_Bug_New里面的语句只在你新建缺陷的时候执行,其他时候是不执行的。
          再比如Defects_Bug_FieldChange就是在缺陷内容发生改变了的时候执行的语句。
    4.一般默认的东西我们不要乱作修改。如:
    ­
        Sub Defects_Bug_FieldChange(FieldName)
            On Error GoTo 0
        End Sub
    ­
        这些内容我们就要保留。
    5.同样的Sub可以存在多个,也就是说如Sub Defects_Bug_FieldChange(FieldName)这样的函数我们可以编写几个,不必要修改系统原来的Sub Defects_Bug_FieldChange(FieldName)
    6.文中提到的,TD数据库中使用的字段(如BG_BUG_ID)。是那里来的?
    它是在你需要输入USER IDPassword那个页面(/start_a.htm),右上角有个叫CUSTOMIZE的链接,点击下,用admin用户登陆,在“Customize Project Entities” -> “DEFECT”里面的System Fields或者User Fields里面随便选择一个字段,右边查看里面“Field Name”后面的就是数据库中使用的字段了的名字了。比如你选择Subject,对应的Field Name就是BG_SUBJECT.
    7.工作流中的GoTo语句不能像VB里面那样使用。因为标签是无效的。
    8.理论上来讲,TD中的大部分功能东西都能通过这里编辑,比如按钮。事件。当然前提是你够熟悉。
    9.如果要脚本起作用,只要退出再登陆进TD.脚本就会立刻起作用。
    ­
    二、工作流的实践一  --新建缺陷时候的默认值
    需求说明:我们在打开添加缺陷的页面的时候(特别是使用了自定义字段的时候)我们最希望的就是给这些不是非常重要的,但是又不希望没有内容的字段,有些默认值。哪么我们第一个来做的就是这个需求。请先看代码。
    ­
       Sub Defects_Bug_New
            On Error Resume Next
                Bug_Fields("BG_DETECTION_VERSION").Value = "Ehome 2.0"
        On Error GoTo 0
        End Sub
    ­
        这段代码,你只要复制到工作流脚本中去,哪么你在添加缺陷的时候,版本这个字段里面就会自动有一个内容Ehome 2.0。这段代码中的Defects_Bug_New代表新建缺陷的时候执行的脚本,Bug_Fields("BG_DETECTION_VERSION")具体缺陷字段。这是最简单的工作流脚本了。你明白了没有?
    ­
    三、工作流的实践二   --记录修改人和修改时间
    需求说明:我们希望在开发修改了一个缺陷的状态为“修改完成“的时候,记录下修改他的人,和修改时间。方便我们管理。同样,请先看代码:
    ­
        Sub Defects_Bug_FieldChange(FieldName)
            On Error Resume Next
            if FieldName = "BG_STATUS" Then
                if Bug_Fields("BG_STATUS").Value = "P1-修改完成待验证" then
                    Bug_Fields("BG_RESPONSIBLE").Value = User.UserName
                    Bug_Fields("BG_USER_02").Value = now()
                end if
            end if
            On Error GoTo 0
        End Sub
    ­
    这段代码内容就多了几行,里面Defects_Bug_FieldChange(FieldName)代表的是缺陷字段发生改变的时候执行的语句。里面的BG_STATUS代表缺陷状态,BG_RESPONSIBLE代表负责人(Syestem Fields表里的),BG_USER_02代表用户自定义字段(User Fields里的)。User.UserName代表当前操作的用户名,now()代表当前时间。剩下的东西就很容易看懂了吧。
    ­
    三、工作流的实践三  --不修改我的缺陷必须说理由
    需求说明:有时候开发很懒,不喜欢写说明,哪么对我们测试来说,没有任何说明就返回我们。使我们很不好处理问题。哪么我们希望当程序员如果修改缺陷状态为”不修改””遗留”的时候,让程序员必须输入说明。
    ­
        Sub Defects_Bug_FieldChange(FieldName)
            On Error Resume Next
    ­
            dim i
            i=""
            msg1 ="遗留或不修改此缺陷需要输入说明!"
            title1 ="输入说明"
    ­
             If FieldName = "BG_STATUS" Then
                 if (Bug_Fields("BG_STATUS").Value = "P2-待遗留" or Bug_Fields("BG_STATUS").Value = "P3-暂时不修改") and Bug_Fields("BG_DEV_COMMENTS").Value = "" then
                     do
                         i= InputBox(msg1,title1)
                         if i="" then
                             msgbox"必须输入说明"
                         else exit do
                         end if
                     loop
                     Bug_Fields("BG_DEV_COMMENTS").Value = i
                  end if
              end if
            On Error GoTo 0
        End Sub
    ­
        这段代码内容就稍微多了点点,并且使用了VB的函数。我就简单的说下思路吧,具体解释,只要你看懂了上面的工作流。相信这个里面的代码也不是很复杂。
    1.开始声明和定义一些需要使用的变量。和内容。
    2.判断修改的字段是不是缺陷状态(BG_STATUS
    3.再判断修改成的内容是不是遗留或者不修改    
    4.最后判断说明(BG_DEV_COMMENTS)里面是不是没有内容
    5.如果是的话,就打开输入函数输入说明(InputBox(msg1,title1)
    6.做个循环,如果没有输入说明,就提示必须输入说明(msgbox"必须输入说明"
    7.最后吧输入的内容赋值给保存说明的字段(BG_DEV_COMMENTS
    ­
    最后,由于时间有限,没有写更多的内容。有需要讨论的可以发邮件给我,我的邮箱是onlonely@163.com
  • 一个自定义的BUG管理流程

    zte_boy 发布于 2008-05-21 17:00:27

    这两天一直在忙BUG管理流程的定制,从讨论到脚本开发,忙忙碌碌,终于有了个初步的成果

    1、 管理工具及平台

    采用QualityCenter9.0+SqlServer2000的Windows平台

    2、 组权限设置

    定义五个权限组,具有不同的权限,一个用户可以同时加入多个组

    A) TEST组

    提交BUG、验证BUG,测试人员最低权限组

    B) TESTLEADER组

    审核BUG

    C) DEVE组

    修复BUG

    D) PROJECTMANAGE组

    分配、延期、拒绝BUG等

    E) MANAGE组

    具体项目的设置权限,如配置组、定义实体、列表等

    3、 BUG状态定义了11种BUG状态:

    新建、确认、否决、打开、延期、拒绝、驳回、修复、固定、关闭、重新打开

    4、 BUG状态转换图

    见附件

    5、 BUG详细设置

    1) 新建

    A-D组都具有BUG提交权限,

    缺陷提交字段包括:摘要、项目、项目版本、模块、环境、检测者、检测日期、测试轮次、严重程度、可重现、状态、描述

    所有字段必填,检测者默认为登陆人,只读;检测日期默认为当前日期,只读;状态默认为“新建”,只读;

    缺陷详细信息界面包括:摘要、项目、项目版本、模块、环境、检测者、检测日期、测试轮次、严重程度、可重现、状态、描述、优先级、分配给、计划关闭轮次、估计修复时间、关闭于轮次、实际修复时间、关闭日期

    可修改字段:项目、项目版本、模块、环境、测试轮次、严重程度、是否重现、描述

    该状态下的BUG信息外只能提交人自己修改,他人无权修改,状态由TESTLEADER组权限人员修改

    2) 确认

    由TESTLEADER组权限人员修改,其他组成员只能修改自己所属的缺陷描述

    3) 否决

    由TESTLEADER组权限人员修改,终态之一,该状态下全部字段只读

    4) 打开

    由PROJECTMANAGE组权限人员修改,此状态下分配给、优先级、计划关闭轮次、估计修复时间字段必填

    5) 延期

    由PROJECTMANAGE组权限人员修改

    6) 拒绝

    由PROJECTMANAGE组权限人员修改,注释必填

    7) 修复

    由DEVE组权限人员修改,只能修改缺陷状态

    8) 固定

    由PROJECTMANAGE组权限人员修改,只能修改状态

    9) 驳回

    因描述不清由PROJECTMANAGE组权限人员修改,只能修改状态,可由由TESTLEADER组权限人员修改为“确认”,但必须填写注释

    10)已关闭

    由TEST组权限人员修改,此时实际关闭轮次、实际修复时间必填、实际关闭日期系统默认为当前时间,只读

    11)重新打开

    由TEST组权限人员修改,只能修改状态

    涉及到的状态转换和权限角色很多,就不一一描述了(偷个懒),呵呵

  • 测试过程定义 (转载)

    annayin 发布于 2007-09-10 10:06:35

    原文

    测试过程定义

    过程描述:

    需求阶段:
    形成基本稳定的需求文档后,测试介入需求评审,以便了解需求的相关内容以及测试工作的可行性分析(软件可测试性)。项目经理制定项目计划,测试部门测试
    经理/测试团队负责人制定测试计划,项目组测试人员阅读相关测试需求文档,如果存在疑问或者发现需求缺陷及时与需求人员沟通,如果是需求缺陷,可以将相
    关问题可以记录到bug管理工具以便进行跟踪。

    设计阶段:
    研发部门进行软件的概要设计、详细设计以及必要的单元测试工作;测试部门进行功能、性能测试用例的设计(用例不仅仅包括用例本身,还包括测试数据),测
    试所需软、硬件资源申请、准备。用例编写完成以后,需求、研发的主要负责人、测试部门项目组相关成员组织对用例进行评审(验证当前用例是否能够达到覆盖
    需求相应测试功能、性能点)。

    测试阶段:
    1.      每次提交新版本,必须提交测试项传递报告给测试负责人,并抄送给测试部门经理,(指出本版本提交的相应功能模块,测试环境,提供部署说明性文档
    (目的:1.清楚当前测试的功能、性能内容;2.减少程序员和测试人员间重复性的沟通,方便其他测试人员对环境的部署工作)。
    2.      开发人员在提交测试版本之前,需要对本次提交的功能模块做冒烟测试(保证本次提交的基本功能的实现且可用),测试人员在测试过程中如果发现版本错
    误、提供的相应功能模块存在严重缺陷,导致后续工作无法进行时,有权将该测试版本打回。
    3.      测试过程中按照测试用例执行测试,标记测试用例通过情况。如果进行了随机测试发现软件缺陷,需将该用例补充到用例中。测试过程中,发现缺陷后记录
    到bug管理工具。

    4.      测试工作完成后,测试负责人应提供测试总结报告,对测试过程予以总结,对遗留缺陷需要进行评审。评审人员包括:产品部门经理、产品经理、研发经
    理、测试部门经理、测试主要负责人及其质控相关人员,对待有争议的缺陷综合考虑各方意见,符合测试计划的准出条件以后,产品可以做发行工作。

  • TOMCAT数据库连接池:未释放connection资源造成的错误[转]

    ljhappy1 发布于 2009-01-15 11:13:26

    来源: ChinaUnix博客  日期: 2008.04.27 23:26 (共有0条评论) 我要评论
     
                                                        ----ruixj
    问题描述:
    有一个系统的功能很简单,就是几个表单的提交和几个页面的显示。但是这个网站的访问量很大,一周时间累计至少10万次访问,高峰时间可能每秒的 点击数会达到500次。OS为Redhat Linux 9 , Database为Oracle 8i,JSP容器为Tomcat 4,使用Struts框架。当使用工具进行压力测试时,如果连接数到100个,2、3分钟后几乎所有访问都出现404错误,无法访问此页面。这就是我接到 问题时候的状况。

    问题解决:
    首先我们需要知道产生瓶颈的地方,分析后可能影响效率的地方有如下几处:

    • Struts产生的瓶颈
    • 数据库的设置,最大连接数问题
    • Tomcat服务器的配置问题
    • Linux OS的配置问题
    • 服务器的机器硬件配置问题
    • 服务器的带宽不够

    测试是否是Struts瓶颈问题很容易,我们用压力测试工具中设置只访问index.jsp这个页面,此页面和Struts没有一点关系,在每 秒点击在100次左右的时候,网站访问速度只是稍微有些慢,但是到200个访问数后,错误404再次发生。说明不是Struts产生的瓶颈,或者说 Struts的瓶颈不是主要影响我们效率的问题所在。

    然后我们写了一个很简单的JSP测试页面,使用和在ActionServlet中调用数据库相同的方法进行一个Select操作,并且把那个结果显示到JSP页面中,针对这个test的页面,进行100次同时连接,错误出现了。此时还是不能判断什么是瓶颈所在。

    然后登录上服务器,察看Tomcat的配置文件server.xml,发现允许最大的并发连接数设置项maxProcessors= "75",说明Tomcat允许的同时连接最大为75,这个肯定是一个tomcat的配置失误。把它改为maxProcessors="1000",重新 启动服务器,进行测试。对index.jsp文件测试的时候,同时连接500人的时候没有出现问题,但是测试test页面的数据库查询时,仍然是到100 个左右的连接数的时候出现404错误。这两个测试说明了tomcat服务器配置的问题基本解决了,问题已经不在tomcat的设置上了,很有可能是在数据 库中。

    检查Oracle的设置,把最大连接数改成1000,再次测试test页面,仍然是错误。

    在Linux下使用[root@NetCom51 bin]# ulimit -a
    core file size        (blocks, -c) 0
    data seg size         (kbytes, -d) unlimited
    file size             (blocks, -f) unlimited
    max locked memory     (kbytes, -l) unlimited
    max memory size       (kbytes, -m) unlimited
    open files                    (-n) 1024
    pipe size          (512 bytes, -p) 8
    stack size            (kbytes, -s) 8192
    cpu time             (seconds, -t)
    发现允许使用的open files都达到了要求了。

    服务器的硬件问题和带宽不是我们能解决的,暂时不管。现在把我们能做的事情定位在优化程序和优化服务器上。
    Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个java虚拟机。Sun公司和其它一些公司一直 在为提高性能而对java虚拟机做一些升级改进,一些报告显示JDK1.4在性能上比JDK1.3提高了将近10%到20%。我们使用java -version命令查看JRE的版本,发现已经是1.4了。
    Tomcat默认可以使用的内存为128MB,在较大型的应用项目中,这点内存是不够的,需要调大。在linux下,修改{tomcat_home}/bin/catalina.sh文件,在
    echo "Using CATALINA_BASE: $CATALINA_BASE"
    echo "Using CATALINA_HOME: $CATALINA_HOME"
    echo "Using CATALINA_TMPDIR: $CATALINA_TMPDIR"
    echo "Using JAVA_HOME: $JAVA_HOME"
    后加上
    JAVA_OPTS='-Xms256m -Xmx512m'
    JAVA_OPTS='-Xms【初始化内存大小】 -Xmx【可以使用的最大内存】'
     这两个值的大小一般根据需要进行设置。初始化堆的大小执行了虚拟机在启动时向系统申请的内存的大小。一般而言,这个参数不重要。但是有的应用 程序在大负载的情况下会急剧地占用更多的内存,此时这个参数就是显得非常重要,如果虚拟机启动时设置使用的内存比较小而在这种情况下有许多对象进行初始 化,虚拟机就必须重复地增加内存来满足使用。由于这种原因,我们一般把-Xms和-Xmx设为一样大,而堆的最大值受限于系统使用的物理内存。一般使用数 据量较大的应用程序会使用持久对象,内存使用有可能迅速地增长。当应用程序需要的内存超出堆的最大值时虚拟机就会提示内存溢出,并且导致应用服务崩溃。因 此一般建议堆的最大值设置为可用内存的最大值的80%。

    重新启动服务器进行测试,发现服务器启动速度变慢,但是启动后服务器效率确实有提高,但是仍然未能达到我们要求的每秒500访问数的要求。

    重新检查程序,试着使用tomcat的数据库连接池,修改tomcat配置文件server.xml,在context标签中加上

             
             
                   
                       factory
                       org.apache.commons.dbcp.BasicDataSourceFactory
                   
                   
                       driverClassName
                       oracle.jdbc.driver.OracleDriver
                   
                   
                       url
                       jdbc:oracle:thin:@10.11.6.1:1521:dbname
                     
                   
                     username
                     yourname
                   
                   
                     password
                     yourpasswd
                  
                  
                     maxActive
                     1000
                  
                  
                      maxIdle
                      20
                  
                      maxWait
                      -1
             
            
       
    maxActive 是最大激活连接数,这里取值为1000,表示同时最多有1000个数据库连接。maxIdle是最大的空闲连接数,这里取值为20,表示即使没有数据库连 接时依然可以保持20空闲的连接,而不被清除,随时处于待命状态。MaxWait是最大等待秒钟数,这里取值-1,表示无限等待,直到超时为止,也可取值 9000,表示9秒后超时。
    修改web.xml文文件,加入

                    Oracle
              Datasource example
                    jdbc/OracleDB
                    javax.sql.DataSource
                    Container

    将Oracle的JDBC驱动classes12.jar拷贝到Tomcat安装目录的common/lib下。建立简单的测试页面test2.jsp:
    Context initCtx = new InitialContext();
    Context envCtx = (Context) initCtx.lookup("java:comp/env");
    ds = (DataSource)envCtx.lookup("jdbc/OracleDB");
    Connection cn=ds.getConnection();
    进行测试,发现问题还没有解决,在同时连接100人的时候再次出错。

    最后仔细检查后,发现是未释放connection资源,使用cn.close()方法,可以同时连接500个用户了。

    本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/10047/showart_602262.html

  • Google搜索引擎优化初级指南

    hjjlearning 发布于 2008-12-09 16:51:36

    这是一篇非常好的SEO入门资料,看了收获很大,推荐给大家看看:)

    什么是SEO?

    什么,SEO你都不知道吗?那你比我好不了多少,快看看这博文吧,看完你肯定就清楚了!

    原作地址:http://www.warrior-princess.org/google-seo.html


    Google搜索引擎优化初级指南

    欢迎阅读《Google搜索引擎优化初级指南》。这本是Google的内部文档,我们公开这份文档是因为考虑到这份文档对那些想提高自己网站的用户粘度和搜索引擎友好性的初步接触搜索引擎优化的站长同样有帮助。虽然这篇指南不会告诉您使您的网站自动在google上排名第一的秘诀(抱歉!),但是在下文提出的一些最佳做法会使得搜索引擎更容易地爬行和索引您网站的内容。

    搜索引擎优化一般是在您的网站上做一些小的改动。单独看这些改动,可能都是些微不足道的改进,但是综合其他方面的优化,你会发现您的网站在用户体验和搜索引擎自然排名方面都有很明显的提高。您可能对这篇指南的一些话题已经很熟悉了,因为这些都是网页构成的基本元素,但是您可能没有最有效地利用它们。


    搜索引擎优化影响到的是左侧的自然排名,而不是赞助商链接或者Adwords

    虽然指南的标题包含的词是“搜索引擎”,但是我们建议您在对网站进行优化的时候应该首先并优先考虑如何最大程度地提高用户体验。他们是通过搜索引擎找到您的产品的目标客户。如果您集中精力只关注网站的自然排名,那么呈献给目标客户的可能就不是他们所希望看到的内容。搜索引擎优化是指将您网站最吸引人的地方呈现给搜索用户。

    我们虚构一个网站并丰富网站的内容来举例说明我们想要陈述的观点,以下是这个虚构网站的基本信息:

    网站名称:”Brandon’s Baseball Cards”

    网站域名:brandonsbaseballcards.com

    网站主要信息:Online-only baseball card sales, price guides, articles and news content

    网站规模:小型站点,约250个页面

    您的网站不管内容或大小都跟我们举的例子大相径庭,但是下面我们讨论的关于优化的内容适用于所有规模和类型的网站。

    我们希望这篇指南能在网站优化方面给您一些新的观点,同时,我们也希望通过Google Webmaster Help Group看到一些您遇到的问题、反馈信息和成功案例。

    创建独一无二的、精确的网页标题

    网页标题告诉用户和搜索引擎这个网页的主题是什么。<title>标签包含在HTML文档的<head>标签里面。理想的情况是,您应该给您网站的每一个页面创建一个不同的标题。

    这是我们的baseball card网站的首页标题,列出了网站名称和该网站所涉及的三个领域。

    如果您的网页出现在Google的搜索页面,那么title标签里的内容会出现在搜索结果的第一行(如果您对Google的搜索结果的组成部分不是很了解,那么您可以通过Google工程师Matt Cutts搜索结果页剖析的视频或者Google搜索页面图解加以了解)。如果title里面包含了搜索用户搜索的关键词,那么这个关键词是加粗的,这样可以帮助用户初步了解这个网页是不是跟他想要搜索的内容相关。

    您网站首页的title可以包含网站名称或是公司名称,还可以包含一些重要的信息,如公司的地理位置、公司的经营范围或主要产品。

    用户在搜索框输入[baseball cards]

    我们网站的首页在搜索结果中,第一行是title标签里的内容(注意:用户搜索的关键词是加粗的)

    如果用户点击进去浏览该网页,那么网页的标题会出现在浏览器的顶部。

    网站内页的标题应该精确地描述了这个页面所关注的内容,同样也应该包含网站或者公司的名称。

    用户搜索[rarest baseball cards]

    我们网站的一个相关页面(标题是不同于其它所有页面的,即专属于这个页面的)出现在搜索结果里

    Title标签的优化建议

    1、 精确地描述页面内容——选择能有效传递网页主题信息的标题

    避免:

    选择跟网页内容毫无关系的标题

    使用像“Untitled”或者“New Page 1”这样的默认的含糊不清的标题

    2、 为网站的每一个网页创建不同的标题——理想的情况是您网站的每一个页面都有其专属的标题,这样有助于Google识别这个页面跟其它页面的区别。

    避免:

    网站所有网页或网站中大部分的网页都使用同样的标题

    3、 使用简短、精确的标题——标题可以内容充实但是要简短。如果标题太长,Google只能在搜索结果中显示其中的一部分。

    避免:

    使用对用户毫无帮助的冗长的标题

    title标签里面填充冗余的关键词

    利用meta标签里的“descrīption”标签

    一个网页的descrīption meta标签里的内容应该是提供给Google和其他搜索引擎的该网页的概述。一般title标签里包含的是几个关键词或一个短语,而descrīption meta标签里包含的是一两个句子或一个段落。Google管理员工具里面提供了一个很方便的内容分析工具,它会告诉您descrīption meta标签里的内容是太短、太长还是已经重复多次了(重复多次是指同样的内容已经包含在title标签里面了)。同样,这个标签也是包含在HTML文档的<head>标签里的。

    这个是我们网站首页的descrīption meta标签的开头部分,概括描述了这个网站提供的信息。

    Descrīption meta标签对Google来说是很重要的,因为它可能被用来当做是网页摘要。我们说“可能”是因为Google会选择您网页可视文本部分的一个段落来作为网页摘要,如果这个段落与用户的搜索跟匹配的话。另外,如果您的网站被Open Directory Project(开放式目录管理系统)收录的话,Google还有可能会选择您的网站在ODP里的描述作为网页摘要(您也可以阻止搜索引擎显示ODP中的数据)。总之,在Google找不到合适的文本作为网页摘要的时候,为网页添加descrīption meta标签的内容就是一个良好的习惯做法。更多的信息可以参考管理员中心的博客上的一篇文章通过descrīption meta标签改进网页摘要

    在搜索结果中,网页摘要出现在网页标题下面,网址上面。

    用户搜索[baseball cards]

    我们的首页出现在搜索结果中,网页摘要是descrīption meta标签中的部分内容。

    用户搜索的关键词在摘要中是加粗的,这就给用户一个提示:这个页面所提供的内容是不是符合他们的搜索。下面再举一个例子,这是一个包含一篇文章的内页(该页面拥有自己专属的descrīption meta标签内容),网页摘要仍然是descrīption meta标签里的内容。

    用户搜索[rarest baseball cards]

    这是我们网站的一个内页,descrīption meta标签里的内容显示为网页摘要。

    Descrīption meta标签的优化建议

    1、 准确概括网页的内容——如果用户搜索的结果是以您Descrīption meta标签里的描述作为网页摘要的话,请尽量使您的描述既能传递信息又能引起用户的兴趣。

    避免:

    撰写跟网页内容毫不相关的描述

    使用诸如“This is a webpage”或者“Page about baseball cards”这样笼统的描述

    单纯地堆积关键词

    将网页文档的全部内容都拷贝到descrīption meta标签中

    2、 为网站的每一个网页撰写描述——为每一个页面撰写不同的descrīption meta标签对用户和Google都很有帮助,特别是当Google的搜索结果页出现您网站的多个页面时(例如,用户使用site搜索命令:site:operator搜索时),不同的描述会帮助用户区分页面的内容。但如果您的网站有数以千万计的网页甚至更多的时侯,人工为每一个页面添加描述标签有点不大实际,这时,您可以基于网页的内容自动为网页生成描述。

    避免:

    整站或网站的大部分网站都使用相同的描述

    改进您的网站地址

    为网站的文档创建描述性的分类和文件名,不仅方便管理,而且更有利于搜索引擎的爬行。而且,这样可以为您网站的反向链接创建更简单、“友好”的网址。否则,别人会被您包含没几个能认识的单词的,冗长又晦涩的网址吓着的。

    这是我们的baseball card网站的一个页面的网址,用户肯定很费解。

    这样令人费解的网址是很不友好的,当别人想创建一个链向该网页的链接时,很难记起这样的网址。另外,但用户看到网址里很多不认识的参数时,他们有可能会删除掉一些他们认为是多余的参数,这样链接就断了。

    有些人会直接用您的网址做锚文本,如果您的网址中包含一些相关的词语,这比一个ID或包含莫名其妙的参数的网址要提供给用户和搜索引擎更多有价值的信息。

    在跟踪浏览这个页面之前,上面突出显示的词语告诉了用户和搜索引擎这个目标页面所包含的内容。

    最后要提醒大家记住的是,文档的网址会显示在搜索结果中标题和网页摘要的下方,类似于标题和网页摘要,网址中用户搜索的关键词会加粗显示。

    用户搜索[baseball cards]

    我们的首页显示在搜索结果中,网址显示在标题和网页摘要的下方,关键词加粗显示。

    下面是另外一个例子,显示的是我们的网站域名下一个包含一篇关于rerest baseball cards的文章的页面的网址,网址中包含的关键词远比一个像这样“www.brandonsbaseballcards.com/article/102125”只包含ID的网址更吸引用户。

    用户搜索[rarest baseball cards]

    这是一个显示在Google搜索结果页的内页,网址反映了这个页面的文章类型。

    Google可以爬行所有类型的网址结构,甚至是很复杂的网址。但是,尽量简化您的网址对用户和搜索引擎的爬行都会有帮助。一些站长试图通过动态地址静态化来达到简化网址的目的。虽然Google更善于爬行这样的网址,但是我们必须提醒您注意的是,动态地址静态化是一个高级程序,如果搞错了,这会给Google的爬行带来障碍。了解更多关于网址结构的信息,我们建议您阅读网站管理员中心的一篇文章创建对Google友好的网址结构

    网址结构优化建议

    1、 在网址中加入关键词——在网址中加入与您的网页内容相关的关键词,这样的网址结构可以更利于用户浏览您的网页,用户也更容易记住网址从而更愿意链向您的网站。

    避免:

    使用加入了不必要的参数和ID的冗长的网址

    选择像“page1.html”这样的普通的网页名称

    堆积关键词,例如“baseball-cards-baseball-cards-baseball-cards.htm

    2、 创建一个简单的目录结构——创建一个更利于您管理网站内容的目录结构,从而也更方便用户知道他们在您网站的什么位置。试着在网址中加入目录结构来表明网页内容的类型。

    避免:

    嵌套过深的子目录,例如“…/dir1/dir2/dir3/dir4/dir5/dir6/page.html

    使用跟网页内容毫无关联的目录名称

    3、 统一网站的网址结构——为了避免有不同的链接地址指向同一个网页(不同的链接地址指向同一个网页会分散这个网页的权威度),坚决使用和提交统一形式的网址,包括您网站的内部链接。如果您发现有用户从不同的地址进入到同一个网页,那么一个好的解决方法是使用301重定向将次域名指向主域名。

    避免:

    同时使用二级域名和根目录(例如:“domain.com/page.htm”和“sub.domain.com/page.htm”)指向同一个页面

    在您网站的内部链接中同时出现带有www.的网址和不带www.的网址

    在网址中使用大写字母(大多数用户习惯于使用也更容易记住小写字母的网址)

    优化网站导航

    网站导航可以帮助用户很快地找到他们想要浏览的内容,同样也告诉搜索引擎哪些内容是网站的重要内容。虽然Google的搜索结果是基于单个页面的,但是Google希望通过导航知道这个页面在整站中的地位。

    所有的网站都有首页,是整个网站访问量最高的页面,大多数用户都是通过首页进入其他页面的。除非您的网站只有几个页面,否则的话,您应该考虑用户怎样从您的首页进入具体的内容页。例如,您是否考虑到创建一个专题栏目页来索引所有跟这个专题有关的内容页(如:首页 -> 栏目页 -> 内容页)?您是否将所有的产品都进行分类,然后将产品归到各个分类下面?

  • 日期函数的常用实例

    wonew1228 发布于 2008-04-23 20:35:27

    日期函数应用

    '‘获取当前日期
    Dim MyDate1
    MyDate1= Date
    msgbox  MyDate1

    '获取系统当前时间
     Dim MyTime
    MyTime = Time   ' Return current system time.
    msgbox MyTime


    '判断是否当前日期
    Dim MyDate, YourDate, NoDate
    MyDate = "October 19, 2008": YourDate = #10/19/62#: NoDate = "Hello"
    msgbox( IsDate(MyDate) ) ' Returns True.
    msgbox( IsDate(YourDate))  ' Returns True.
    msgbox( IsDate(NoDate) )  ' Returns False.

    '判断是否当前日期是否为空
    Dim MyCheck
    MyCheck = IsEmpty(MyVar)   ' Returns True.
    MyVar = Null   ' Assign Null.
    MyCheck = IsEmpty(MyVar)   ' Returns False.
    MyVar = Empty   ' Assign Empty.
    MyCheck = IsEmpty(MyVar)   ' Returns True.


    '判断是否当前日期
    Dim MyVar, MyCheck
    MyCheck = IsEmpty(MyVar)   ' Returns True.
    MyVar = Null   ' Assign Null.
    MyCheck = IsEmpty(MyVar)   ' Returns False.
    MyVar = Empty   ' Assign Empty.
    MyCheck = IsEmpty(MyVar)   ' Returns True
    '获取日
    Dim MyDay
    MyDay = Day("October 19, 1962")

    '获取当前分钟
     Dim MyVar
    MyVar = Minute(Now)

    '获取获取小时
    Dim MyTime, MyHour
    MyTime = Now
    MyHour = Hour(MyTime) ' MyHour contains the number representing

    '获取当前秒
     Dim MySec
    MySec = Second(Now)
    ' MySec contains the number representing the current second.

    '日期相加

    Dim text
    text=DateAdd("yyyy", 1, "31-08-2008")

    msgbox text

    可以通过修改来改变日期变化,比如要在当前日期前要加2个月

    Dim text
    text=DateAdd("m", 2, date)

    msgbox text

    Setting Descrīption
    yyyy Year
    q Quarter
    m Month
    y Day of year
    d Day
    w Weekday
    ww Week of year
    h Hour
    n Minute
    s Second

  • CPPUnit在WIN32平台安装说明

    ssy2010 发布于 2007-08-21 23:16:37

     目前,CPPUnit在WIN32平台下仅支持Microsoft Visual C++,而且你的VC++编译器至少应该是6.0版本的。

            使用GUI TestRunner编译运行示例程序的步骤如下:

            在VC++中打开examples/examples.dsw(包含所有的示例) 
            将HostApp设为active project 
            编译之 
            在VC中选择Tools/Customize.../Add-ins and Macro Files,点击Browse... 
            选择lib/TestRunnerDSPlugIn.dll文件,并按ok以注册该附加件(add-ins)
    运行project

    [Project创建结果]

    框架 & 工具:

            cppunit(cppunit.lib):单元测试的框架库,你将用它来编写单元测试。 
            cppunit_dll(cppunit_dll.dll/lib):同上,只是以DLL方式呈现。 
            TestRunner(testrunner.dll):一个MFC的扩展DLL,用来以GUI方式运行单元测试和查看结果。 
            DSPlugIn(lib/TestRunnerDSPlugIn.dll):一个VC++的附加件,为testrunner.dll所使用。有了它之后,你若在MFC TestRunner中双击某个failure,就会启动VC++,打开failure所在文件并定位到某行。 
            TestPlugInRunner:(警告:实验性的)一个VC++应用程序,用以运行测试插件。测试插件就是一个公开特定接口的DLL。该应用程序目前尚未完成(auto-reload特性丢失)。

    所有库文件都被置于lib/目录下。

    [示例]

            CppUnitTestMain:一个实际的测试包(test suite)用来测试CppUnit。使用了TextTestRunner(文本方式的单元测试环境),利用CompilterOutputter进行post-build testing(即在编译结束之后紧跟着进行测试)。在配置中设定连接了cppunit的静态库和动态库。

            CppUnitTestApp:包含了与CppUnitTestMain相同的测试包,但使用了MFC TestRunner(GUI方式的单元测试环境)

            hierarchy : 一个演示如何子类化测试的例子(你也许更愿意使用HelperMacros.h以及宏CPPUNIT_TEST_SUB_SUITE,这种方式更为简洁清晰。本示例已经很久没有更新了)。

            HostApp : 一个用MFC TestRunner演示各种失败测试的例子。也演示了MFC Unicode TestRunner。

            TestPlugIn : 一个演示如何为TestPlugInRunner编写TestPlugIn的例子(实验性的).


    [配置(Configuration)]

            CppUnit和TestRunner带有3种配置。

            Release():多线程DLL,release模式

            Debug(d):Debug多线程DLL,debug模式

            Unicode Release(u):Unicode多线程DLL,release模式

            Unicode Debug(ud):Unicode Debug 多线程DLL,debug模式

            Debug Crossplatform (cd): Debug 多线程DLL,没有使用type_info从类名中提取测试用例的包名。

            对CppUnit而言,当创建dll时,字母“dll” 将被添加到后缀之后。

            括号内的字母标明了添加到库名之后的后缀。例如,debug配置的cppunit静态库名为cppunitd.lib。debug配置的cppunit动态库名为cppunitd_dll.lib.

    [创建(Building)]

            在VC++中打开src/CppUnitLibraries.dsw工作区文件。 
            将TestPlugInRunner设为active project。 
            在'Build'菜单中选择'Batch Build...' 
            在Batch Build对话框中,选中所有的project 并按下build按钮。 
            所有的库文件可以在lib/目录下找到。

    测试(Testing)]

            打开工作区文件examples/Examples.dsw。 
            将CppUnitTestApp设为active project. 
            为你要创建的库选择合适的配置。 
            编译运行project。TestRunner GUI将会出现。

    [库(Libraries)]

            所有编译后生成的库均可在'lib'目录中找到。多数库可以在src/CppUnitLibraries.dsw工作区中创建。

    lib\:

    cppunit.lib : CppUnit静态库“Multithreaded DLL”
    cppunitd.lib : CppUnit静态库“Debug Multithreaded DLL”
    cppunit_dll.dll : CppUnit动态库(DLL)“Multithreaded DLL”
    cppunit_dll.lib : CppUnit动态导入库“Multithreaded DLL”
    cppunitd_dll.dll : CppUnit动态库(DLL)“Debug Multithreaded DLL”
    cppunitd_dll.lib : CppUnit动态导入库“Debug Multithreaded DLL”
    qttestrunner.dll : QT TestRunner动态库(DLL)“Multithreaded DLL”
    qttestrunner.lib : QT TestRunner导入库“Multithreaded DLL”
    testrunner.dll : MFC TestRunner动态库(DLL)“Multithreaded DLL”
    testrunner.lib : MFC TestRunner导入库“Multithreaded DLL”
    testrunnerd.dll : MFC TestRunner动态库(DLL)“Debug Multithreaded DLL”
    testrunnerd.lib : MFC TestRunner导入库“Debug Multithreaded DLL”
    testrunneru.dll : MFC Unicode TestRunner动态库(DLL)“Multithreaded DLL”
    testrunneru.lib : MFC Unicode TestRunner导入库“Multithreaded DLL”
    testrunnerud.dll : MFC Unicode TestRunner动态库(DLL)“Debug Multithreaded DLL”
    testrunnerud.lib : MFC Unicode TestRunner导入库“Debug Multithreaded DLL”
    TestRunnerDSPlugIn.dll : 注册到你的VC++中的附加件。

            注意:当你使用CppUnit DLL(cppunit*_dll.dll)时,你必须连接相关的导入库,并在project中定义预处理标识CPPUNIT_DLL。

    [使用CppUnit]

    编写单元测试:

            为了编写单元测试,你需要连接cppunitXX.lib,此处的XX即所选配置对应的后缀字母。 你必须在你的project中打开RTTI开关(Project Settings/C++/C++ Language)。 CppUnit的include目录必须包含在include查找路径中。你可以通过在Project Settings/C++/Preprocessor/Additional include directories或者Tools/Options/Directories/Include中添加include目录做到这一点。

    简言之:

            打开RTTI开关 
            连接lib/cppunitXX.lib 
            include/ 必须包含在include查找路径中


    使用TestRunner GUI: 
            为了使用GUI的test runner,你需要连接testrunnerXX.lib和cppunitXX.lib,此处的XX即所选配置对应的后缀字母。 你必须在你的project中打开RTTI开关。 文件testrunner.dll必须位于你的应用程序所在的路径(Debug或Release目录,project的dsp文件所在目录,或环境变量PATH中所指定的目录)。 一个最简单的办法是,要么添加一个post-build命令,或者,将位于lib/目录下的testrunner.dll添加到你的project中来,并定制创建步骤,将dll文件拷贝到你的“中间结果”目录(通常是Debug或Release目录)。

            因为TestRunner GUI是一个MFC的扩展DLL,它能够访问当前应用程序的CWinApp。 参数设置将使用应用程序的注册键。这意味着,设置项“最近使用的测试”对每个应用程序而言都是不同的。

    简言之:

            打开RTTI开关 
            连接lib/cppunitXX.lib和lib/testrunnerXX.lib 
            include/必须包含在include查找路径中 
            为了运行你的project,lib/testrunnerXX.dll必须可用


    使用DSPlugIn: 
            你必须在VC++中注册该插件。在Tools/Customize/Add-ins and Macro files中点击browse,并选择lib/TestRunnerDSPlugIn.dll(你可以注册release版或者debug版,都能运行)。

            若VC++正在运行,当你双击一个failure后,VC++将打开相关文件并定位到出错行。

    使用Test Plug In Runner: 
            你的DLL必须导出(export)一个函数,该函数实现了在include/msvc6/testrunner/TestPlugInInterface.h中所定义的接口。作为范例,参见examples/msvc6/TestPlugIn/TestPlugInInterfaceImpl.*。注意:该runner仍处于实验阶段并未作足够多的测试。

  • 转载~怎样才算是好的软件测试

    sweetxmy 发布于 2009-04-27 14:49:01

     (1)清晰的质量概念

      常言道没有规矩不成方圆,产品交到您手上,各方面质量标准您要心中有数。安装卸装、功能性能、用户界面、出错与恢复......等等,您可列出大纲式的CheckList,不一定很详细但一定要全。

      不同的开发队伍,规范化水平不同,他们不一定能提交完善的规格书、品质书,如果您自己也没有这个概念,测试中就容易疏漏很多东西。比如,界面上的Button大小、用词、字体、颜色等有规范吗?页面响应时间呢?总之,您要让人家明白,您对这些方面是有要求的。

      (2)善作计划

      按照CheckList,要测试的东西真的是很多,但人力、时间等资源是有限的,您需要考虑重要性、优先级等因素,作一个测试计划。确定测试内容是重要的,确定哪些不测或暂缓测试、同样也是重要的。针对需要测的内容,安排测试环境、人员、时间等,这些大的方面要与上司、相关人员讨论清楚,获得他们的支持。接下来再细化大的Check点,形成详细的测试方案。

      (3)明确进入退出标准

      需要明确进行测试所必须具备的条件,如:测试环境、送测产品的媒介形式、文档等。如果达不到基本要求可明确地提出来,暂时退出直到问题得到解决,否则很浪费大家时间的。如:环境不具备、根本就安装不上、有大量严重错误等。

      (4)对测试人员的要求

      逻辑思维要强,说到底,测试就是一种逻辑覆盖,要用尽量少的测试实例覆盖尽量多的逻辑,这就是效率。细心很重要,在每一个测试点,您需要静下来好好想想,还有哪些可能的情况?细心一定会给您带来高产量的Bug的。

      (5)关于自动测试工具

      任何工具都是在人的安排下发挥作用,您自己如何测永远是第一位的。一般说来,自动测试工具只能在压力、容量等某些性能领域发挥作用,其他绝大部分需要的是勤奋和智慧。

      (6)不断积累、持续改善

      您无论多么出色还是会漏掉Bug,您需要有一个方法能够不断地、持续地改善。分析总结原因、不断完善测试计划、测试方法等,并用文档整理出来,您的基础就会越垫越厚,工作越来越有效。

      (7)明确自己的责任

      作为测试人员,您的任务就是找出缺陷、及时清晰的汇报给相关人员,让管理者清楚产品的质量状况。有时,您测出的问题他们决定不改,或者您认为没达到 Release标准他们决定Release,这是可能的。影响一个决定的因素是多方面的,有经费、市场、策略、质量等,虽然测试通常是产品开发的最后一关,但我还没有见过测试人员决定一切的。

  • QTP连接数据库进行增删改查脚本

    qicyt1812 发布于 2008-06-24 15:33:24Top 1 Digest 1

    步骤:
    1、首先创建数据源
    2、在QTP的Exper View中开发脚本如下脚本

    增删改脚本为:

    Dim conn,strSql
        '定义变量
    set conn = CreateObject("ADODB.Connection")
       '创建连接
    conn.ConnectionString="DSN=test_access_odbc;DBQ=E:\test.mdb;DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;"
       '设置连接字符串
    conn.open
      '开启连接
    'strSql="insert into email_value values(11,'123')"
      '设置插入语句
    'strSql="update email_value set email_value='tester' where ID=11"
    strSql="delete from email_value where ID=11"
    If conn.state=0 Then
       '如果连接状态为0,表示连接失败,写入reporter对象中,否则表示连接成功
        Reporter.ReportEvent micFail,"testing","数据库连接失败"
        conn.close
        Set conn = nothing
    else
       Reporter.ReportEvent micPass,"testing","数据库连接成功"
       conn.execute strSql    '执行更新语句
       conn.close
       Set conn = nothing
    End If


    查询脚本为:

    Dim conn,res,strSql
        '定义变量
    set conn = CreateObject("ADODB.Connection")
       '创建连接
    conn.ConnectionString="DSN=test_access_odbc;DBQ=E:\test.mdb;DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;"
       '设置连接字符串
    conn.open
      '开启连接
    Set res = CreateObject("ADODB.RecordSet")
       '创建一个记录集对象
    strSql="select * from email_value"
      '设置查询雨具
    If conn.state=0 Then
       '如果连接状态为0,表示连接失败,写入reporter对象中,否则表示连接成功
        Reporter.ReportEvent micFail,"testing","数据库连接失败"
        res.close                               '关闭结果集和连接,并且置为空
        Set res = nothing
        conn.close
        Set conn = nothing
    else
       Reporter.ReportEvent micPass,"testing","数据库连接成功"
       res.open strSql,conn    '执行查询语句
       res.MoveFirst        '将记录集游标指到记录集的最开始
       Do
          Reporter.ReportEvent micPass,"file",cstr(res(0))+" : "+cstr(res(1))  '循环遍历查询结果,并且保持到reproter对象中,直到记录集到达末尾,循环结束
          res.MoveNext
       Loop until res.eof = true
       res.close
       Set res = nothing
       conn.close
       Set conn = nothing
    End If

  • 功能自动测试工具大全

    飞翔天空 发布于 2007-04-23 11:12:32

    Rational Robot
    是业界最顶尖的功能测试工具,它甚至可以在测试人员学习高级脚本技术之前帮助其进行成功的测试。它集成在测试人员的桌面 IBM Rational TestManager 上,在这里测试人员可以计划、组织、执行、管理和报告所有测试活动,包括手动测试报告。这种测试和管理的双重功能是自动化测试的理想开始。
    网址:http://www-306.ibm.com/software/rational/

    WinRunner
    是一种企业级的用于检验应用程序是否如期运行的功能性测试工具。通过自动捕获,检测,和重复用户交互的操作,WinRunner 能够辨认缺陷并且确保那些跨越多个应用程序和数据库的业务流程在初次发布就能避免出现故障,并且保持长期可靠运行。
    网址:http://www.mercury.com

    QuickTest Professional
    是一个功能测试自动化工具,主要应用在回归测试中。QuickTest针对的是GUI应用程序,包括传统的Windows应用程序,以及现在越来越流行的Web应用。它可以覆盖绝大多数的软件开发技术,简单高效,并具备测试用例可重用的特点。其中包括:创建测试、插入检查点、检验数据、增强测试、运行测试、分析结果和维护测试等方面。
    网址:http://www.mercury.com

    AdventNet QEngine
    AdventNet QEngine是一个应用广泛且独立于平台的自动化软件测试工具,可用于Web功能测试、web性能测试、Java应用功能测试、Java API测试、SOAP测试、回归测试和Java应用性能测试。支持对于使用HTML、JSP、ASP、.NET、PHP、Javascrīpt/VBscrīpt、XML、SOAP、WSDL、e-commerce、传统客户端/服务器等开发的应用程序进行测试。此工具以Java开发,因此便于移植和提供多平台支持。
    网址:http://www.adventnet.com

    SilkTest
    是业界领先的、用于对企业级应用进行功能测试的产品,可用于测试Web、Java或是传统的C/S结构。SilkTest提供了许多功能,使用户能够高效率地进行软件自动化测试。这些功能包括:测试的计划和管理;直接的数据库访问及校验;灵活、强大的4Test脚本语言,内置的恢复系统(Recovery System);以及具有使用同一套脚本进行跨平台、跨浏览器和技术进行测试的能力。
    网址:http://www.segue.com

    QA Run
    QARun的测试实现方式是通过鼠标移动、键盘点击操作被测应用,即而得到相应的测试脚本,对该脚本可以进行编辑和调试。在记录的过程中可针对被测应用中所包含的功能点进行基线值的建立,换句话说就是在插入检查点的同时建立期望值。在这里检查点是目标系统的一个特殊方面在一特定点的期望状态。通常,检查点在QARun提示目标系统执行一系列事件之后被执行。检查点用于确定实际结果与期望结果是否相同。
    网址:http://www.compuware.com

    Test Partner
    是一个自动化的功能测试工具,它专为测试基于微软、 Java和Web技术的复杂应用而设计。它使测试人员和开发人员都可以使用可视的脚本编制和自动向导来生成可重复的测试,用户可以调用VBA的所有功能,并进行任何水平层次和细节的测试。TestPartner的脚本开发采用通用的、分层的方式来进行。没有编程知识的测试人员也可以通过TestPartner的可视化导航器来快速创建测试并执行。通过可视的导航器录制并回放测试,每一个测试都将被展示为树状结构,以清楚地显现测试通过应用的路径。
    网址:http://www.compuware.com

    Holodeck - 强大的故障植入软件测试工具
    Holodeck is an advanced fault-injection tool that gives you the power to attack an application while it monitors and logs everything your application does - every function call, registry entry, piece of data read or written.
    网址:http://www.securityinnovation.com/holodeck/

    Telelogic TAU
    TAU第二代包含三个最新的、最强大的技术用来加速大规模软件开发和测试:统一建模语言(UML) 及它的许多最新修订版本中的特性,UML2.0;功能强大的测试语言TTCN-3和新的构造系统的方法:Model Driven Architecture(模型驱动构架)。这三个新的业界标准结合成TAU的已经过认可的软件开发平台,形成了一个系统,一个一流的稳定可靠的工具解决方案。TAU第二代是系统与软件开发解决方案的一个突破,它把业界从使用了太长时间的手工、易出错、以代码为中心的方法中释放出来,自然而然地迈向下一步,一个更加可视化、自动化及可靠的开发方法。
    Telelogic TAU/Tester是基于通用测试语言TTCN-3,用于自动化的系统和集成测试的强大工具。TAU/Tester以现代化的开发工具为基础,提供高层测试功能,支持整个测试生命周期,加速自动化测试。TAU/Tester可使用户特别关注于测试的开发,因为TTCN-3语言是独立于开发语言或测试设备的,且是抽象和可移植的。
    网址:http://www.telelogic.com

361/212>
Open Toolbar