pcl_首页_51Testing软件测试网 - powered by X-Space

日历

« 2008-07-09  
  12345
6789101112
13141516171819
20212223242526
2728293031  

RSS订阅

统计信息

  • 访问量: 3248
  • 日志数: 36
  • 文件数: 2
  • 建立时间: 2006-11-30
  • 更新时间: 2008-07-08
第一次 从上海开始 改变 第二次 从北京开始 成长 第三次 从深圳开始 奋发

我的最新日志

  • 自动化测试框架设计

    2008-7-08

  • qtp动态脚本执行-Execute

    2008-7-08

    动态脚本代码执行,灵活性在于字符串的组合,如何让脚本动态执行关键是Execute

    样例代码如下:

    Systemutil.Run "notepad.exe"

    Window("记事本").Activate
    Window("记事本").WinMenu("Menu").Select "帮助(H);关于记事本(A)"

    tempString= "Window(""记事本"").Dialog(""关于 记事本"").WinButton(""确定"")"

    pcl_Click tempString

    '------------------------------------------
    Function pcl_Click(ByVal str)
     Dim obj
     Execute "Set ōbj = " & str '关键点
     obj.Click
    End Function

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

     

  • 配置QTP录制flex2.0.1技巧

    2008-7-08

       Flex 是 Macromedia发布的presentation server(展现服务),它是java web container或者.net server的一个应用,根据.mxml文件(纯粹的xml描述文件和actions cript)产生相应得.swf文件,传送到客户端,由客户端的flash player或者shockwave player解释执行,给用户以丰富的客户体验。
       Flex就像Flash一样, Flex能够制作出可以被Flash Player播放的SWF文件。但是,Flex主要是开发者(程序员)的工具,并且开发Flex应用程序的方式和开发Flash RIA(Rich Internet Application,富互联网应用程序)的方式完全不同。所有的Flex开发都基于一个Flex开发框架,该框架为你提供可重复使用、可扩展的UI组件、数据获取服务和事件处理模块等等

    关键信息:

    1. must have QTP 9.1, flex 2.0.1, IE 6+, and install the QTP plug-in.

    2. must recomiple the app in flex 2.0.1 with automation testing libraries.

    3. must put the swf and html file to the QTP machine.

    4. When testing, access the html(not the swf) file from a browser via web server. don't open the html from the file system.

    • Before you start to test your flex app with QTP, you have to make sure you have all the necessary software installed and configured correctly.
    1. Make sure you installed QTP 9.1, not 9.0.
    2. Make sure you installed flex 2.0.1 , and your flex app should be recompiled using flex 2.0.1.
    3. Make sure you have installed the QTP plug-in. You can download it from our website. You will need to register to login the page first. After you login into the page, scroll down and you will see "Flex Automation Package". From there you can download Flex_Automation.zip. After you unzip the zip file, you can see QTP_Plugin_Installer.exe. Run that exe file and that will install the plugin. Note, To verify if you have installed the plug-in or not, go to your registry, and search for entry of TEAPluginIE.dll and TEAPluginQTP.dll. If those dlls are not in the registry, then your plug-in has not been installed correctly.
    • If you have above installation and configuration, but the QTP does not record the flex app, then check the following:
    1. QTP plug-in is only supported on IE 6+, you need to make sure your browser is using IE 6 or higher version. And your flash player must be version 9.0.28. or higher. To verify your flash player version, request the following link from your testing browser: http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=tn_15507
    2. The flex app you are going to test with QTP must be prepared for automation. You need compile your app with automation testing libraries, such as automation.swc, automation_agent.swc, and qtp.swc, etc. You can compile this via Command-line compiler or flex builder. If you have compiled your flex app in flex 2.0.1 already, and want to Test run-time loading, then you can compile RunTimeLoading. Please follow the instruction step by step described here.
    3. If you request your flex app from a browser, you have to use the html wrapper file. Do not accessing the swf directly, it needs to be loaded from an object tag with an ID. You can open the wrapper or the SWF file from the file system, but it is not a recommended practice. You should try to deploy the SWF file to a web server and request the html wrapper through HTTP from the server. See page 13 of Testing Flex Applications with Mercury QuickTest Professional for more details.
    • If you still have trouble getting up and running with Flex QTP plugin, you can create a log by following the steps below:
    1. Go to the mercury installation/bin directory say: "C:\Program Files\Mercury Interactive\QuickTest Professional\bin" and run MicLogSetting.exe .
    2. Select the log settings as: Level: MicLogLevelDebug2 Folder:C:\Program Files\Mercury Interactive\QuickTest Professional\ Selected Categories:LogCatPackTEA
    3. Run QTP and record a flex application say flexstore.html
    4. A log file would have been generated like C:\Program Files\Mercury Interactive\QuickTest Professional\MicLogFile_QTPro_pid1912_11_32_32.html
    5. Check whether you are seeing the following in the log: "Read Flex environment and matching ProgId TEAPluginQTP.TEAFlexAgentQTP.
  • 老婆测试工具培训记 - 启动应用程序的方式

    2008-7-07

    前几天给老婆讲了自动化测试工具的实现,并让他独立完成了工具的实现,今天晚上给老婆培训了下qtp的启动方式,由于老婆有TestComplete和Wr的基础,工具上手还是很快的。

    常用的启动应用程序的方式

    '1.systemutil.Run
    SystemUtil.Run "calc.exe"

    '2.wscrīpt.shell
    Dim wsh 'as wcript.Shell
    Dim strExe_Path 'as string

    strExe_Path = "calc.exe"
    Set wsh=CreateObject("wscrīpt.shell")

    wsh.Exec strExe_Path

    Set wsh=nothing


    '3.录制的方式,虽然比较傻,但是很有效

    Dialog("运行").WinEdit("打开(O):").Set "calc.exe"
    Dialog("运行").WinButton("确定").Click
    SystemUtil.Run "calc.exe","","C:\Documents and Settings\piaochunlong",""
    Window("计算器").Close

    '4 api方式 难度在于了解win32消息机制
    'vb api变换成 QTP的api声明才能用
    'Public Declare Function WinExec Lib "kernel32" Alias "WinExec" (ByVal lpCmdLine As String, ByVal nCmdShow As Long) As Long


    Extern.Declare micLong,"WinExec","kernel32","WinExec",micString,micLong
    Extern.WinExec "calc.exe",5

    备注:针对最后一种情况提供一个声明转换的工具。

    '5 InvokeApplication

    InvokeApplication "calc.exe"

  • 性能监控随笔点滴 - pcl

    2008-7-07


     

    吞吐量:

      定义:单位时间内完成工作的度量。
      评估点:在C/S环境中通常是从服务器方进行评估。
      表象:随着负载的增加,吞吐量往往增长到一个峰值后,然后下降,队列变长。
      分析:
          在C/S架构的系统中,吞吐量依赖每个部件的运行,系统地最慢点决定了整个系统的吞吐量,这个点我们称之为瓶颈。一般使用率最高的资源就是瓶颈(但也不总是这样,因为可能这种情况是某种资源正在处理多种请求),只要没有队列就没有瓶颈。
      LoadRunner监控:选择Windows资源监控器,对资源进行监控

    队列:
      
       定义:处理请求排队
       评估点:服务器端进行评估
       表象:对资源的请求的速率大于资源的吞吐量。
       分析:当队列变长,请求不能被有效的处理,响应时间就会变慢。
     
    响应时间:
       定义:从客户端发出请求到服务器端返回最后一个字节的时间
       评估点:通常从客户端来度量(LoadRunner通过事务来度量)
       表象:响应时间通常随着负载的增加而增加(虚拟用户数的增加,请求数的增加)
       分析:可以利用资源的队列的长度除以资源的吞吐量可以计算响应时间
       LoadRunenr:自定义事务是度量的关键,最后分析图中可以通过看平均事务响应时间图分析


    Window性能监控原理

      操作系统本身时时采集系统资源如PhysicalDisk,Memory,CPU,NetWork等数据。缺省情况下,操作系统是通过注册表来收集系统资源。同时它也支持WMI(Window Management Infrastructure)收集数据,
      所以很多性能测试工具都宣称是通过无代理进行性能数据采集,在window平台上基本上所有的工具都可以做到(其他平台有些工具就不能达到loadrunner无代理方式的性能采集了),
     
       背景知识:在WMI出现之前,所有的 Windows管理工具都依赖于 Win32 应用程序编程接口(Application Programming Interfaces,APIs)来访问和管理 Windows 资源。因为在 WMI 之前,能够以编程方式访问 Windows 资源的惟一方法就是通过 Win32 API。这种情况使 Windows 系统管理员无法通过一种简便的方法利用常见的脚本语言来自动化常用的系统管理任务,因为大多数脚本语言都不能直接调用 Win32 API。通过提供一致的模型和框架,WMI 改变了这种情况 — 通过模型和框架,所有的 Windows 资源均被描述并公开给外界。最好的一点是,系统管理员可以使用 WMI 脚本库创建系统管理脚本,从而管理任何通过 WMI 公开的 Windows 资源!


    例子代码:WMI脚本检索远程计算机上安装的物理内存量
    strComputer = "pcl"

    Set wbemServices = Getobject("winmgmts:\\" & strComputer)
    Set wbemObjectSet = wbemServices.InstancesOf("Win32_LogicalMemoryConfiguration")

    For Each wbemObject In wbemObjectSet
        Wscrīpt.Echo "Total Physical Memory (kb): " & wbemObject.TotalPhysicalMemory
    Next

    定位瓶颈:
       定位瓶颈是监控整个系统开始,如果某个环节限制了整个系统更快的执行才会存在瓶颈,即使系统中的一个或者多个使用超负荷,但是作为一个整体系统没有受到任何的影响,就不存在瓶颈。

    瓶颈的产生的原因:主要是服务的请求数,请求的频率,请求的持续时间


     

  • AIX上安装配置DB2

    2008-7-07

    2P550数据库主机上安装DB2 V8.2,两台数据库主机间进行数据库HA配置,实现数据库双机互备。

    本文档编写以磁盘大小360G,数据库名CRAMS_JS为例.

    设备准备

    请系统管理员协助划分DB2需要的共享磁盘,本文以磁盘大小共360G为例,做以下划分:

    建数据库需要的文件系统:

    /db2log1    10G

    /db2_db     3G 

    建数据库需要的裸设备:

    device '/dev/db2_dta01   99G

    device '/dev/db2_dta02   98G

    device '/dev/db2_dta03   49G

    device '/dev/db2_idx01   48G

    device '/dev/db2_idx02   48G

    device '/dev/db2_tmp    6G

    1.    主服务器安装

    1.1   安装先决条件

    (1)确保系统满足安装内存和磁盘需求,磁盘空间不足的话通过 Smitty fs 或者 Smitty jfs扩展。

    (2)打开系统异步IO,通过SMITTY工具将异步状态置为Available,

     The state  to be configured at system restart : available

    (3)以超级用户root登陆,手工创建必需的 DB2 用户组和用户:

    您可以通过Smitty工具来创建用户和组,也可以通过下列命令来创建:

    mkgroup id=999 db2iadm1

    mkgroup id=998 db2fadm1

    mkgroup id=997 db2asgrp

     

    mkuser id=1004 pgrp=db2iadm1 groups=db2iadm1 home=/home/db2inst1

    db2inst1 passwd db2inst1

     

    mkuser id=1003 pgrp=db2fadm1 groups=db2fadm1 home=/home/db2fenc1

    db2fenc1 passwd db2fenc1

     

    mkuser id=1002 pgrp=db2asgrp 1 groups=db2asgrp home=/home/db2as

    db2as passwd db2as

    1.2安装DB2

    1.         root 用户登录系统                                                      

    2.         mount /cdrom                                                              

    3.         cd /cdrom                                                                 

    4.         将安装文件ese.dbcs.tar.gz 复制到临时文件系统中。                            

    5.         输入命令gunzip //ese*.gz 解压得到 ese.dbcs.tar                               

    6.         输入命令 tar -xvf ese*.tar 解压得到安装目录ese.dbcs                            

    7.         通过cd  ese.dbcs/进入安装目录,                                             

    8.         运行 ./db2setup执行安装,,接受许可协议,选择安装DB2 ESE SERVER,安装类型为典型安装,按照安装向导的提示安装。其中一个界面需要输入DB2管理服务器的用户密码,一般情况下我们默认使用,用户名:  dasusr1,密码:dasusr1

    1.3 数据库配置

    1.3.1建数据库实例

    使用 db2icrt 命令来创建实例,具体步骤如下:

    1.       作为具有 root 用户权限的用户登录,

    2.       cd /usr/opt/ db2_08_01/instance/

    3.       db2icrt -a AuthType -s ese –w 64 –u db2fenc1 db2inst1

    参数说明:

    n         -a AuthType  表示实例的认证类型。AuthType 可为 SERVERCLIENTDCSSERVER_ENCRYPT DCS_ENCRYPT 其中之一。SERVER 是缺省值。此参数是可选的。

    n         -s ese 表示将要创建的实例类型,其中ese表示服务器端的实例,CLIENT表示客户端的实例。

    n         -w 64 表示要创建的实例是64位的。

    n         -u FencedID  表示将用来运行受防护用户定义函数(UDF)和受防护存储过程的用户的名称。若您正在 DB2 客户机上创建实例,则此标志不是必需的。指定您创建的受防护用户的名称。

    n          db2inst1表示实例的名称。实例的名称必须与拥有实例的用户的名称相同。指定您创建的拥有实例的用户的名称。将在拥有实例的用户的主目录中创建该实例。

    1.3.2创建数据库和数据库对象

    1.3.2.1 创建数据库

    (1)   输入命令su – db2inst1 切换到db2inst1用户

    (2)   执行DB2进入db2命令行处理器,输入以下命令来创建数据库:

    create database CRAMS_JS on '/ db2_db ' using codeset GBK territory CN

    1.3.2.2 创建和调整缓冲池

    (1)   输入命令su – db2inst1 切换到db2inst1用户

    (2)   执行DB2进入db2命令行处理器,输入以下命令来创建数据库:

    CREATE BUFFERPOOL "BUFFPOOL8K" SIZE 65536 PAGESIZE 8192 NOT EXTENDED  STORAGE

    ALTER BUFFERPOOL IBMDEFAULTBP SIZE 65536

    1.3.2.3 创建表空间

    (1)   输入命令su – db2inst1 切换到db2inst1用户

    (2)   执行DB2进入db2命令行处理器,输入以下命令来创建数据库:

     

    CREATE TEMPORARY TABLESPACE TMPSPACE8K IN DATABASE PARTITION GROUP  IBMTEMPGROUP PAGESIZE 8192 MANAGED BY DATABASE

              USING (device '/dev/rdb2_tmp' 786432)

              EXTENTSIZE 8

              BUFFERPOOL BUFFPOOL8K

     

    CREATE REGULAR TABLESPACE SDB1 IN DATABASE PARTITION GROUP IBMDEFAULTGROUP PAGESIZE 8192 MANAGED BY DATABASE

              USING (device '/dev/rdb2_dta01' 12976128)

              EXTENTSIZE 8

              BUFFERPOOL BUFFPOOL8K

     

    CREATE REGULAR TABLESPACE SDB2 IN DATABASE PARTITION GROUP IBMDEFAULTGROUP PAGESIZE 8192 MANAGED BY DATABASE

              USING (device '/dev/rdb2_dta02' 12845056)

              EXTENTSIZE 8

              BUFFERPOOL BUFFPOOL8K

     

    CREATE REGULAR TABLESPACE SDB3 IN DATABASE PARTITION GROUP IBMDEFAULTGROUP PAGESIZE 4096 MANAGED BY DATABASE

              USING (device '/dev/rdb2_dta03' 12845056) 

              EXTENTSIZE 16

     

    CREATE REGULAR TABLESPACE IDB1 IN DATABASE PARTITION GROUP IBMDEFAULTGROUP PAGESIZE 4096 MANAGED BY DATABASE

              USING (device '/dev/rdb2_idx01' 12582912)

              EXTENTSIZE 16

     

    CREATE REGULAR TABLESPACE IDB2 IN DATABASE PARTITION GROUP IBMDEFAULTGROUP PAGESIZE 4096 MANAGED BY DATABASE

              USING (device '/dev/rdb2_idx02' 12058624)

              EXTENTSIZE 16!

    1.3.3操作系统参数设置

    n         与网络相关的设置

    修改/etc/rc.net文件,将文件末尾处

    if [ -f /usr/sbin/no ] ; then

            /usr/sbin/no -o extendednetstats=0 >>/dev/null 2>&1

    fi

    修改为:
    if [ -f /usr/sbin/no ] ; then

            /usr/sbin/no -o extendednetstats=0 >>/dev/null 2>&1

    /usr/sbin/no –o thewall=1048576

    /usr/sbin/no –o rfc1323=1

    /usr/sbin/no –o tcp_sendspace=655360

    /usr/sbin/no –o tcp_recvspace=655360

    /usr/sbin/no –o udp_sendspace=65536

    /usr/sbin/no –o udp_recvspace=655360

    /usr/sbin/no –o sb_max=1310720

    fi

     

    n         系统虚拟内存设置

    vmo -r -o minperm%=15

    vmo -r -o maxperm%=25

    vmo -r -o maxclient%=15

    vmo -r -o maxfree=184

    vmo -r -o v_pinshm=1

    vmo -r -o lgpg_size= 16777216

    vmo -r -o lgpg_regions= 1207959552

    ioo -r -o lvm_bufcnt=16

    ioo -r -o maxpgahead=64

    chdev -l sys0 -a maxuproc=4096

    1.3.4 数据库服务器参数设置

    (1) 如果当前用户是root用户,通过su – db2inst1 切换到db2inst1用户

    (2)通过输入以下命令设置数据库服务器环境:

     

    db2set DB2_EVALUNCOMMITTED=on

    db2set DB2_EXTENDED_OPTIMIZATION=on

    db2set DB2_SKIPDELETED=on

    db2set DB2_PARALLEL_IO=*

    db2set DB2_ANTIJOIN=ON

    db2set db2comm=tcpip

    db2set db2codepage=1386

      db2set DB2_USE_ALTERNATE_PAGE_CLEANING=ON

    1.3.5数据库管理器参数设置

    (1) 如果当前用户是root用户,通过su – db2inst1 切换到db2inst1用户

    (2)通过输入以下命令设置数据库服务器环境:

           db2 update dbm cfg using SHEAPTHRES 100000

           查看/etc/services文件末尾关于服务的名字和端口号,通过以下命令更新相应服务名:

           db2 update dbm cfg using svcename DB2_db2inst1

     

    1.3.6数据库参数设置

    (1) 如果当前用户是root用户,通过su – db2inst1 切换到db2inst1用户

      (2) 通过执行以下命令配置数据库。

    db2 UPDATE DB CFG FOR CRAMS_JS USING LOCKLIST  20480

    db2 UPDATE DB CFG FOR CRAMS_JS USING LOGBUFSZ 256

    db2 UPDATE DB CFG FOR CRAMS_JS USING SORTHEAP  32768

    db2 UPDATE DB CFG FOR CRAMS_JS USING LOCKTIMEOUT 60

    db2 UPDATE DB CFG FOR CRAMS_JS USING LOGFILSIZ 10000

    db2 UPDATE DB CFG FOR CRAMS_JS USING LOGRETAIN ON

    db2 UPDATE DB CFG FOR CRAMS_JS USING NUM_IOSERVERS 7

    db2 UPDATE DB CFG FOR CRAMS_JS USING NEWLOGPATH /db2log1

    db2 UPDATE DB CFG FOR CRAMS_JS USING LOGPRIMARY 50 LOGSECOND 10

     

    1.4准备HACMP切换脚本

    1.         root用户登录

    2.         mkdir /hacmp

    3.         cp /home/db2inst1/sqllib/samples/hacmp/hacmp-s1.sh /hacmp/pbc-ha-start.sh

    4.        

  • WinRunner Tips 整理(以前整理)

    2008-7-07

    WinRunner测试技巧集 - 1

    1.WinRunner如何把Real类型转化为指数表示方法
    答:
       指数类型转化为real类型,可以通过下边的代码
       var = 5.3569E+10;
       pause(var);
       #显示 53569000000
      
       Real类型转化为指数表示方式
       var = sprintf("%e",53568544768);
       pause(var);
       #displays 5.356854e+010

    2.什么是同步点,怎样用它?他和Wait有什么不同?
    答: 从功能上他们都可以实现脚本和被测试程序同步的问题,不过同步点有window/object,bitmap方式,她等待的是某个等待的对象     窗体,bitmap的出现,一定程度她也可以作为验证点
         wait这点上无法实现相同的效果。有的脚本中即使你加入wait,但是你无法知道下边的对象窗体图片是否就是成需要运行的正确     出现的
    3.tl_step和tl_step_once的区别
    答:tl_step和tl_step_once都是把运行状态信息放到运行结果中去,区别在如果连接TD,TL_STEP把每步状态信息都插入到测试结果中去,tl_step_once如果连接td,只是插入一次运行步骤的名字
       
    代码例子:
    --------------------------------------------------------------------------------

    for (i=1;i<4;i++){ 
         tl_step("Step", PASS, "reporting step, #" &i); 
         tl_step_once("Step Once", PASS, "reporting step once, #" &i);
    }

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

    WR中的报告:
    Step: Step, Status: PASS, Descrīption: reporting step, #1
    Step: Step Once, Status: PASS, Descrīption: reporting step once, #1
    Step: Step, Status: PASS, Descrīption: reporting step, #2
    Step: Step Once, Status: PASS, Descrīption: reporting step once, #2
    Step: Step, Status: PASS, Descrīption: reporting step, #3
    Step: Step Once, Status: PASS, Descrīption: reporting step once, #3

    TD中的报告:
    Step: Step, Status: PASS, Descrīption: reporting step, #1
    Step: Step Once, Status: PASS, Descrīption: reporting step once, #1
    Step: Step, Status: PASS, Descrīption: reporting step, #2
    Step: Step, Status: PASS, Descrīption: reporting step, #3

    4.WinRunner和TD集成后脚本运行很慢是什么原因呢?
    答:安装TD和WinRunner服务器上需要独占100GByte,TD需要10OGHZ时钟速度16GB RAM的处理平台
      

    5.WR是否支持vs.net
      根据Mercury的介绍,他们的对.Net的支持转移到QuickTest Pro上了,如果你需要自动化测试.Net程序(不是web的),建议用QuickTestPro。也就是说wr不支持vs.net开发的程序
     
    6.我对比两个文件file1.txt和file2.txt,文本内容如下
      file1.txt 内容如下:
      10523 8315 6804 8387 3643 4550 3457 3649

      file2.txt内容如下:
      190176 155737 117417 145194 65314 81431 64522 63324
     
      代码如下:file_compare("C:\\file1.txt","C:\\file2.txt","save");
      为什么每次对比这两个文件结果都是通过的。
    答:这个问题的原因在于它在前面的脚本中对文件进行了操作,没有关闭,所以这段代码运行总是通过

    7.如何在winRunner中用Windows的API函数
      在使用该API函数前需要先加载该函数然后声明API函数,代码如下
     load_dll("user32.dll");
     extern int PostMessageA(in long, in long, in long, in long);
     win_get_info("{class:window, MSW_class:AfxMDIFrame42, label:\"!WinRunner.*\"}", "handle", hWnd);
     PostMessageA(hWnd, 16, 0, 0);
     
     请在尝试以上代码的时候,保存脚本,呵呵! 
    8.怎样处理跟踪键盘操作?
    答:下边的代码希望对你有帮助
        function GetKeyStatus(in vKey){ 
          auto pid, thread_id, win_desc, hWnd, KeyState, win_log_name, win_full_desc, focused_obj_desc;
          win_desc = "{active:1}"; 
          if (win_exists(win_desc)==0) {     
             win_get_desc(win_desc, "", "", "", win_full_desc);
             GUI_map_get_logical_name( win_full_desc, "", win_log_name, "bla");
          win_get_info(win_desc, "handle", hWnd);
           pid = GetWindowThreadProcessId(hWnd, NULL);
         thread_id=GetCurrentThreadId();
            AttachThreadInput(pid,thread_id,TRUE);
          KeyState=GetKeyState (vKey);
         AttachThreadInput(pid,thread_id,FALSE);
          if (KeyState < 0)       
                return(0); # Key is pressed
        else     
                return (1); # Key is not pressed 
            }
     else
      return (-1); # No active window found, so cannot determine key state
        }

    9.WinRunner如何处理excel?
    答:其实解决方法有很多,这里列举两种。
       一.利用其他语言特性开发出dll提供给winrunner使用(vb,vc,delphi等)
       二.在其他环境中实现,用winrunner调用
       第一种我在这里不举例子了,第二种我利用vbs往excel中赋值给大家提供一种思路,代码如下:

    'vbs中的代码
       Dim ExcelApp
       Dim itemX
       if Wscrīpt.Arguments.Count < 2 then
        r = msgbox("Requires 2 arguments", 48, "change_sheet")
       else
        dim fso
        set fso = createobject("scrīpting.filesystemobject")
        xlBook = fso.GetAbsolutePathName(Wscrīpt.Arguments(0))
        xlSheet = Wscrīpt.Arguments(1)
        set fso = Nothing
        Set ExcelApp = CreateObject("Excel.Application")
        ExcelApp.Workbooks.Open(xlBook)
        Set itemX = ExcelApp.ActiveWorkbook.Worksheets.Item(xlSheet)
        itemX.Activate
       
        excelApp.ActiveWorkbook.Worksheets(xlSheet).Range("A1").Select
        excelapp.ActiveCell.FormulaR1C1 = "1"
        excelApp.ActiveWorkbook.Worksheets(xlSheet).Range("B1").Select
        excelapp.ActiveCell.FormulaR1C1 = "2"
        excelApp.ActiveWorkbook.Worksheets(xlSheet).Range("c1").Select
        excelapp.ActiveCell.FormulaR1C1 = "3"

        ExcelApp.ActiveWorkbook.Save()
        ExcelApp.ActiveWorkbook.Close(1)
        ExcelApp.Quit()
       
        Set itemX = Nothing
        Set ExcelApp = Nothing

    end if

    winrunner中的调用代码:
    dos_system("wscrīpt \"C:\\excel_sheet.vbs\" \"C:\\SheetBook.xls\" \"Sheet2\"");  
      
    10.在WinRunner中如何实现得到transaction时间?
    答:一般情况下transaction的时间只能在最后结果中得到,如何在脚本得到这个时间呢,下边的代码可以帮助你:
    public transactions[];
    function start_my_transaction(in transaction_name)
    {
     transactions[transaction_name] = get_time();
     tl_step("Start transaction: \"" & transaction_name & "\"",PASS,"Timestamp: " & transactions[transaction_name]);
     return (transactions[transaction_name]);
     }
    function end_my_transaction(in transaction_name)
    {
     auto end_time = get_time();
     auto rc;
     if(transactions[transaction_name] == "")
     {
      tl_step("End transaction: \"" & transaction_name & "\"",FAIL,"Transaction was never started.");
      rc =  -1;
     }
     else
      tl_step("End transaction: \"" & transaction_name & "\"",PASS,"Elapsed Time: " & (rc =  end_time - transactions[transaction_name]));
     delete transactions[transaction_name];
     return rc;
     }

    start_my_transaction("my_transaction");
    wait(2);
    rc = end_my_transaction("my_transaction");
    pause("Elapsed time = " & rc);

     

     

      
     
       

     

  • qtp tips 整理(以前整理)

    2008-7-07

    1.我下载了一个新的试用版本,但是不能使用
      你的机器上是否安装了老的版本的QTP?如果安装了老的版本也会有问题的。你可以把QTP安装在没有安装QTP的机器上。
    2.如何在QTP中使用API?
    '声明FindWindow方法
    Extern.Declare micHwnd, "FindWindow", "user32.dll", "FindWindowA", micString, micString
    'Declare SetWindowText method
    Extern.Declare micLong, "SetWindowText", "user32.dll", "SetWindowTextA", micHwnd, micString

    '获得记事本窗体的Handle
    hwnd = Extern.FindWindow("Notepad", vbNullString)
    if hwnd = 0 then
        MsgBox "Notepad window not found"
    end if
    '改变记事本窗体的标题
    res = Extern.SetWindowText(hwnd, "PCL")

    3.动态打开IE

    创建StartUrl 环境变量
    StartURL = Environment("StartUrl")
    Set IE = CreateObject("InternetExplorer.Application")
    IE.Visible = true
    IE.Navigate StartURL

    4.如果我随机调用不同的函数如何实现
    x = some random number
    select case x
     case 1call function1
    case 2
     call function2
    case
       else'error handlingend
    end select

    5.通过命令行启动应用程序
    Set ōShell = CreateObject ("Wscrīpt.shell")
    oShell.run "cmd /K CD C:\Winnt\system32 & calc.exe"
    Wait(1)
    Set ōShell = Nothing

    6.如何添加验证点
    步骤1. Add object to the object repository
    步骤2. use the GETROproperty()
    步骤3. retrive the value of one property of an object
    步骤4. compare manually

    7.如何禁止运行结束之后显示测试结果?
    禁止脚本运行结束之后显示测试结果
    1. Go to Tools -> Options.
    2. Select the Run tab.
    3. Clear the "View results when run session ends" checkbox.
    4. Click <OK>.
    激活运行结束之后显示测试结果
    1. Go to Tools -> Options.
    2. Select the Run tab.
    3. Select the "View results when run session ends" checkbox.
    4. Click <OK>.

    8.QuickTestPro中是否可以编写调试vb代码?
       不可以在QTP的Expert view中写入VB代码,但是你可以写vbs代码。vbs代码的语法和vb很类似,很多的vb函数可以在vbs中调用,但这不代表qtp中可以写vb的代码。
     

    9.怎样通过GetWindowThreadProcessId从window的句柄得到线程的ID。
    代码
    MyVarPtr = 0
    extern.Declare micLong,"GetWindowThreadProcessId","user32.dll","GetWindowThreadProcessId", micLong , micLong+micByRef
    MyVarPtr = 0
    pid = extern.GetWindowThreadProcessId (hWnd, MyVarPtr)

    10.如何进行文件对比?
    Set fso = CreateObject("scrīpting.FileSystemObject")
    Set file1 = fso.OpenTextFile("C:\file1.txt", 1)
    Set file2 = fso.OpenTextFile("C:\file2.txt", 1)

    if file1.readall=file2.readall then
    msgbox "Files are equal"
    else
    msgbox "Files are not equal"
    end if

    11.如何对比两个xml文件?
    Set doc = XMLUtil.CreateXML()
    doc.LoadFile "c:\example.xml"
    Set doc1 = xmlutil.CreateXML()
    doc1.Load doc.ToString
    Set doc2 = doc.Clone()
    res = doc1.Compare(doc2,resultDoc,micXMLValues+micXMLCDataSections)
    if res = 1 then
     msgbox "Documents match :-)"
    else
     msgbox "Documents do not match :-("
    end if

    12.如何使用Excel对象处理数据?
    Dim xl
    打开excel文件
    Function OpenExcelFile(strFilePath)
    Set xl = CreateObject("Excel.Application")
    xl.Workbooks.Open strFilePath
    End Function
    获得指定单元格数据
    Function GetCellData(strSheet,rwIndex,colIndex)
    GetCellData = xl.WorkSheets(strSheet).Cells(rwIndex,colIndex)
    End Function
    填充单元格数据
    Function PutCellData(strSheet,rwIndex,colIndex,varData)
    xl.WorkSheets(strSheet).Cells(rwIndex,colIndex) = varData
    End Function
    保存并推出
    Function SaveAndQuit()
    xl.Activeworkbook.save
    xl.Quit
    Set xl = nothing
    End Function

    13.QuickTestPro版本多少
    QTP Major releases
    5.6 (branded Astra QuickTest I believe)
    6.0
    6.5
    8.0
    8.2
    9.0

    14.如何更新classpath?
    Set Sh = CreateObject("Wscrīpt.Shell")

    key =  "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Environment\CLASSPATH"

    Sh.RegWrite key ,  Sh.RegRead(key) & ";C:\Oracle\Ora92\jdbc\lib\classes12.zip"


    15.回放的过程中提示"Unable to launch the browser. The specified browser is not installed"
    Certain installation combinations of IE 5.x or upgrades to IE 6.x and QuickTest Professional may result in the inability of QTP to launch IE and result in the error message, "Unable to launch the browser. The specified browser is not installed." A workaround is to make a copy of the "IEXPLORE.EXE" loader stub found in "<drive>:\Program Files\Internet Explorer\..." and place it in the "<drive>:\WINNT" subdirectory. In addition, the following registry key and string values must be added (if absent) to maintain backward compatibility:

    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\IEXPLORE.EXE]
    "Path"="D:\\Program Files\\Internet Explorer\\"
    @="D:\\Program Files\\Internet Explorer\\IEXPLORE.EXE"

  • 如何用Rational进行压力测试-Test Manager篇

    2008-7-07

                 本篇文章为翻译整理文章。

                 http://www.51testing.com/?72/action_viewspace_itemid_86933.html

  • LoadRunner 代码样例

    2008-7-05

       输出信息到外部文件?

       #include "as_web.h"


    Action()
    {
     long stream;
     char kmp1[6];

     lr_vuser_status_message("Iteration: %s", lr_eval_string("{it_number}"));

     if( (stream = fopen( "D:\\LTProjects\\Log\\order1.txt", "a" )) == NULL ){
           
        return(-1); 
     }

     lr_output_message("Iteration Number:""%s",lr_eval_string("{it_number}"));
     strcpy (kmp1,lr_eval_string("{it_number}"));
     fprintf(stream,"Iteration number:%s",kmp1);
     fCLose(stream);
     return 0;

    }

      ip欺骗的时候得到主机机器名字?

      #include "as_web.h"


    Action()
    {

    char *my_ip;
    char *my_host;

    my_ip = lr_get_vuser_ip();

    my_host = lr_get_host_name( );

    web_url("yahoo.com",
    "URL=http://yahoo.com/",
    "Resource=0",
    "RecContentType=text/html",
    "Referer=",
    "Snapshot=t1.inf",
    "Mode=HTML",
    LAST);

    lr_output_message("The IP address is %s", my_ip);

    lr_output_message("Host IP address is %s", my_host);
     return 0;
    }