太郎

发布新日志

  • 庆祝51Testing软件测试网成立五周年

    2009-05-06 13:43:52

    不知不觉的过了1年,一年以前在51培训了,然后顺利的走上工作岗位,谢谢51的栽培。

    经常来51的网站逛,技术含量挺高的,特别是测试这块。

    有兴趣的朋友请访问:

    www.51testing.com

  • action间的传值

    2009-05-04 16:14:06

      当不同的action间要传递参数的时候,需要用到传入参数(input)和传出参数(output。首先在被调用的action的property内增加参数,比如action2增加x1为传入参数,X2为传出参数。  在action1内使用调用语句。RunAction "Action2", oneIteration, Myinput, myoutput  。第一个是传入,第二个是传出,如果有多个,按照排列顺序来赋值,且可以赋值为变量也可以是数值,这里赋值的是myinput这个变量,其值假设为100。具体可以在call property内设置,也可以直接在expert模式添加。

      如此action1的接口就设置完毕,然后进入action2 .在这里,使用Parameter("xx")的方法调用参数,比如Parameter("x2")=Parameter("x1"),这样就已经将传出参数设置好。然后在action1内使用msgbox myoutput可以查看结果为100了。这就是最基本的参数传递了,希望对大家有帮助。

  • eval的用法

    2009-04-08 23:21:15

    QTP的VB语言内有个特殊的函数,就是eval

    这个函数的作用和赋值是反过来的,是取出一个变量或者常量的值,无论是否带引号的字符串,只要是赋值过的变量,都得到他的值。

    dim a

    a=5

    print eval(a)

    print eval("a")

    两行都输出为5

    这个的作用应该在于去除参数化被强制字符串化的结果,而提取出原先的数据类型。

  • 将默认的表改为其他的路径

    2009-03-15 19:42:00

    当我们需要讲数

    据集中管理的时候,讲所有的表都放置于某个路径下是最好的方法,这样不同的脚本都可以调用自己的表。

    Dim qtApp 'As QuickTest.Application ' Declare the Application object variable

    Dim qtTestResources 'As QuickTest.Resources ' Declare a Resources object variable
    Set qtApp = CreateObject("QuickTest.Application") ' Create the Application object
    qtApp.Launch ' Start QuickTest
    qtApp.Visible = True ' Make the QuickTest application visible
    qtApp.New ' Open a new test
    ' Return the Resources object
    Set qtTestResources = qtApp.Test.Settings.Resources
    ' Specify an external Data Table file
    qtTestResources.DataTablePath = "C:\Resources\Default.xls"

     

    另外使用'在数据前讲使其成为文本格式,就算是时间格式的列都可以保持需要的样子,比如2009/02/02如果不加'会自动变为2009-2-2,这样使得数据不再好用,所以当加入'后依然为2009/02/02,满足测试的需要和方便。

  • 一次iteration调用同一个action但是参数要求不同的解决方法

    2009-03-02 17:38:09

    今天,上面要求录制1个脚本,此脚本对于公共action的调用不止一次,使用call exist action调用2次。

    然后在第2次调用前使用datatable.value("","")来设置参数(所有的参数都在Global内),这样就可以重复调用了。

    比如在一次迭代中要调用两次登录脚本,每次登录不一样,先调用一次后,在第二次调用前将username和password的参数重新赋值,就可以完成此脚本的要求。

  • exit的秘密

    2009-02-19 15:40:06

    QTP内可以使用EXIT来做很多事情,如下

    1 exit for 退出for循环

    2 exit do 退出DO循环

    3 exittestiteration 退出此次运行迭代,进入下一次迭代

    4 exittest  退出测试

  • 使用wscript来模拟键盘操作

    2009-02-16 17:14:48

    利用WINDOW自带的接口,我们可以很方便的模拟键盘操作,首先要创建一个wscript.shell对象,然后利用这个对象的sendkeys方法来模拟。如下,实现的是‘tab’键的模拟输入。

    set WshShell =CreateObject("WScript.Shell")
    WshShell.SendKeys "{Tab}"

  • QTP的ACTION之相互调用以及关联函数库

    2009-02-04 23:16:59

    QTP中的ACTION可以调用其他的ACTION,即使不在一个脚本内。

    点击insert,选择call to existing action ,这是调用已经存在的ACTION,节约了时间又提高了复用率,另外这个方法占有空间较小。被调用的ACTION必须在ACTION properties 中将reuseable勾上。

    还有一种为call to copy action,这是将被调用的ACTION的对象库也一并拷贝过来,不推荐使用。

    关联函数库 将函数保存到文件夹内,后缀为.VBS

    点击setting,选择RESOURCE,找到文件夹,保存。

    现在就可以随意的使用函数了。

     

  • 牛年的计划

    2009-01-21 17:07:12

    1 工作 工作上继续向自动化延伸,争取录制在FF以及其他系统都进行最好最成熟的脚本。

    2 学习  学习软件评测师,一门外语(待定)

    3 身体  要开始锻炼身体了,一周保证一次运动,争取每天锻炼

    4 社交  善待身边每一个人,多结交朋友

    5 其他  不要再宅了,少玩游戏多活动

    6 MM   继续。。

  • QTP访问oracle10g数据库的方法

    2009-01-20 15:20:23

    通过在网上学习各位高手的资料,自己也依葫芦画瓢的写了一个。

    set conn=CreateObject("ADODB.Connection")

    conn.ConnectionString="provider=OraOLEDB.Oracle.1;Data Source=sitdb2;User ID=dms_adm;Password=oracleabcd;Persist Security Info=True"   '恩 连接字符串,真是麻烦的东东
    conn.open  
    if conn.State = 0 Then
         Reporter.ReportEvent micFail, "testing", "连接数据库失败"
    else
         Reporter.ReportEvent micPass, "testing",   "连接数据库成功"
    end if
    set rs=CreateObject("ADODB.recordset")
    rs.Open "select begdocno from ids_card", conn
    Do until    rs.EOF   '查询所有记录
    for each x in rs.fields
    print  (x.name&"="&x.value)
    next
    rs.MoveNext  '指向下一条记录
    loop

  • 一个老外的VBS连接ORACLE数据库资料

    2009-01-20 14:39:59

    I have a VB app that connects successfully to a 10g database using the following code:

    Private m_Connection As Object
    sConnectionString = "PROVIDER=OraOLEDB.Oracle.1;USER ID=QUESTAPP;PASSWORD=xxxxx;DATA SOURCE=XOQLTEST;"
    ...
    Set m_Connection = CreateObject("ADODB.Connection")
    m_Connection.Open sConnectionString

    However I also have a c++ app that connects in an extremely familiar way but fails with the error 'Provider cannot be found' see code:

    b_tConnectionString = _bstr_t("PROVIDER=OraOLEDB.Oracle.1;USER ID=QUESTAPP;PASSWORD=xxxxx;DATA SOURCE=XOQLTEST;");
    ...
    _ConnectionPtr spConnection;
    HRESULT hr = spConnection.CreateInstance(__uuidof( Connection ));
    spConnection->PutCursorLocation(adUseClient);
    spConnection->Open(b_tConnectionString, L"", L"", adConnectUnspecified);

    Anyone know why this would be the case? I am running both apps on the machine that hosts the database.
  • 利用VBS自动化QTP

    2009-01-19 09:33:02

        dim time1,time2,path1
        time1 = inputbox("请输入预定执行的小时","复蓝你好") '输入要执行脚本的小时数,为24进制
        time2 = inputbox("请输入预定执行的分钟","复蓝你好") '输入要执行脚本的分钟数
        path1 = inputbox("请输入脚本路径","复蓝你好")       '输入要执行脚本放置的文件夹
    Do While  True   '隔1秒判断一次是否达到运行时间
        Wscrīpt.Sleep 1000  
    if cstr(Hour(now)) = time1  then
    if cstr(Minute(now)) = time2 then
        driver(path1)
    exit do
    end if
    end if
    Loop 
    Function driver(path1)  '函数,功能为运行QTP和脚本
     Dim qtApp 'As QuickTest.Application ' Declare the Application object variable
     Dim qtTest 'As QuickTest.Test ' Declare a Test object variable
     Dim qtResultsOpt 'As QuickTest.RunResultsOptions ' Declare a Run Results Options object variable
     Set qtApp = CreateObject("QuickTest.Application") ' Create the Application object
     qtApp.Launch ' Start QuickTest
     qtApp.Visible = True ' Make the QuickTest application visible
     ' Set QuickTest run options
     qtApp.Options.Run.CaptureForTestResults = "OnError"
     qtApp.Options.Run.RunMode = "Fast"
     qtApp.Options.Run.ViewResults = False
            Set ōbjFSO = CreateObject("scrīpting.FileSystemObject") '创建文件系统目标
            Set ōbjFolder = objFSO.GetFolder(path1)  '取得指定文件夹
    for each subfolder in objFolder.SubFolders '将所有脚本执行一遍
     qtApp.Open subfolder, False, False  ' 打开入口的测试脚本,可写,不保存
            Set qtTest = qtApp.Test
            qtTest.Settings.Run.OnError = "NextStep"  '错误处理机制为NextStep
            Set qtResultsOpt = CreateObject("QuickTest.RunResultsOptions")
            qtResultsOpt.ResultsLocation = subfolder&"\001"  '运行结果保存到临时文件夹001中
     qtTest.Run qtResultsOpt, True  
     qtTest.Close
     Set qtResultsOpt = Nothing ' Release the Run Results Options object
     Set qtTest = Nothing ' Release the Test object
    next 
     qtApp.quit
     Set qtApp = Nothing ' Release the Application object
    End Function

     

     

  • import的问题

    2009-01-07 14:09:58

    嗯,datatable.import导入到global会有问题,导入的行数决定了循环导入的次数!

    所以尽量使用action1这种本地的。

    Dim mylink,Row,i
    DataTable.ImportSheet "C:\\Documents and Settings\Administrator\桌面\data.xls" ,1 ,2
    DataTable.SetCurrentRow(1)
    b= datatable.GetSheet("Action1").GetRowCount
    msgbox (b)
    for  i =1 to  Datatable.GetSheet("Action1").GetRowCount
     mylink=DataTable.LocalSheet.getparameter("mylink")
    Browser("中国测试社区 powered by www.3atestin).Page("中国测试社区 powered by www.3atestin").Link("text:="&mylink).Click
    DataTable.getsheet("Action1").SetNextRow
    next

     

  • childitem方法的疑惑

    2009-01-06 17:47:52

    本人用childitem来定义个link对象,第3行居然为false,第4行又为True了。第6行可以取到name这个属性,第7行直接报错。
    请问exist是不是不可以用啊。
    Dim bl
    set  bl = Browser("Future First_2").Page("Future First").Frame("gd_coverages").WebTable("48").ChildItem(1, 3, "Link",0)
    msgbox (bl.exist)
    msgbox(Browser("Future First_3").Page("Future First").Frame("gd_coverages").Link("太平盛世系列组合保险之长顺安全保险B款(类型:").Exist)
    msgbox (bl.getroproperty("name"))
    bl.click
  • option explicit用于变量纠错

    2009-01-05 17:20:42

    Option Explicit是什么呢?、
    就是不允许脚本中变量名重名之类的情况发生。

    如果发生重名会怎么样?

    会给提示啊,报语法错误。

    PS:qc上的附件文件都是转换为二进制流存放于表内保存的。。

  • 与access数据库相连接

    2009-01-04 15:05:35

     

    Objku = InputBox("请输入单位数据库的路径","默认位置","C:\Program Files\Mercury Interactive\QuickTest Professional\samples\flight\app\flight32.mdb")
    Set ōbjconn = createobject("adodb.connection")
    objconn.connectionstring = "provider=Microsoft.Jet.OLEDB.4.0;"
    Objconn.open "Data Source="&objku
    Set ōbjrs = CreateObject("ADODB.Recordset")
    sql = "SELECT *  FROM orders"
    Objrs.open sql,objConn
    Do until objrs.eof
    For each x in objrs.Fields
    msgbox (x.name&"="&x.value)
    Next
    objrs.MoveNext
    Loop
    Objrs.close
    Objconn.close

  • dictionary的用法

    2008-12-31 11:10:29

    VBS中存在一个特殊的对象-dictionnary,是一个集合对象。一般情况霞,我把这个特殊的集合想象为数组,可以使用其中内建的函数完成存储和操纵数据等基本任务,无须担心数据是在哪些行列,而是使用唯一的键进行访问或者是一个只能运行在内存中的数据库,并只有两个字段分别是:key和item,在使用中,字段key是索引字段。

    set sdict=CreateObject("scrīpting.Dictionary")
    sdict.add a,"apple"  '添加一个值
    sdict.add "b","banana"
    sdict.add "c","copy"
    msgbox (sdict.count)  '返回数目
    msgbox ( sdict.item(a))  ' 返回建是a的条目
    for each key in sdict.keys  '使用循环取所有的条目
    msgbox     "键名" &   key     & "是" & " = " & sdict (key)
    next
    sdict.removeall

     

    这个好像比数组好用,可以试下。

  • Browser属性之CreationTime

    2008-12-31 10:02:28

    Browser("CreationTime:=0").Object.gohome
    利用描述性编程来识别browser对象,CreationTime的意思是第几个打开的浏览器,应该是可以唯一识别的。

    后面接上方法,就可以很随意的进行模拟操作了。

  • qtp的datatable

    2008-12-25 11:16:49

    今天有人发帖,问如何取excel的数据

    本人写了一个,另外导入的xls文件第一行会被当做sheet的字段名,切记.

    使用split返回的是数组 ,最后使用m(i)来存放取到的数据.

    Dim p(9),i,input
    i =1
    sub put1(excelname)
    Dim out1
    datatable.ImportSheet excelname,1,"Global"  '
    out1= datatable.GetSheet("Global").GetParameter("A")
    p(i-1) = out1
    end sub
    Do
     Input = InputBox("Enter excel name")
     If   Input ="" Then
      Exit do
     End If
    call put1("D:\"&input)
    i=i+1
    Loop
    Dim a ,q,m(9)
    i = 0
    do  until p(i)=""
    q= split(p(i),"_",-1,1)
    m(i)=q(0)
    i =i+1
    loop

Open Toolbar