zoukankan      html  css  js  c++  java
  • qtp安装和使用

    QTP许可证密钥的破解步骤:

    以前使用QTP9.2 使用此方法成功破解,现在本人使用的HP QuickTest Professional 11 英文版,也成功适用。

    一、准备工作:

    1. 由于注册码文件自动生成到C:Program FilesCommon FilesMercury InteractiveLicense Manager目录下,所以如果缺少这个路径文件,请先创建;

    2. 关闭杀毒软件。

    二、运行注册码应用程序

    1. 下载QTP注册机-见附件,应用程序mgn-mqt82.exe,双击运行,来创建注册码,见页面提示:

    -- e!l console v1.01 ---

    Geting MachineID...
    MachineID: 8-45036
    Generating License...
    License Generated Successfuly.
    License Saved: 'C:Program FilesCommon FilesMercury InteractiveLicense Managerlservrc'.
    All Done!

    注:如果提示框没有出现:'C:Program FilesCommon FilesMercury InteractiveLicense Managerlservrc',请先确保Mercury Interactive、License Manager文件夹是否创建,lservrc不用手工创建,当运行注册码运用程序时会自动生成。

    2. 进入‘C:Program FilesCommon FilesMercury InteractiveLicense Manager’目录下,打开lservrc文件,Copy文件第一行或者第三行以#结尾的的字符串,此字符串就是注册码;

    3. 打开QTP应用程序,选择License Type: Seat License, 在注册码输入框paste注册码。

    当出现提示信息:License Type installed successfully

    恭喜你!注册成功

    四则运算生成脚本的方法:

    在Automation的record and Run Settings中加入计算器程序URL

    首先录制一个5+3的运算生成脚本,然后我们来逐步完善加强。

    Window("计算器").WinButton("5").Click
    Window("计算器").WinButton("+").Click
    Window("计算器").WinButton("3").Click
    Window("计算器").WinButton("=").Click
    Window("计算器").WinButton("CE").Click
    Window("计算器").Close

    1.首先,我们因为我们打开计算器的地址不同,如果想把脚本下来以后用,打开的地址需要每次设置,所以我们把录制设置里的地址去掉,改成手动在脚本里添加打开方式,当然这一步也可以不做。在脚本最前面加上打开计算器
    If Window("计算器").Exist(2)<> true Then
    SystemUtil.Run "C:WINDOWSsystem32calc.exe"
    End If


    2.输入第一个数字,我们希望的是1-5位数字,比如一个三位数,是不是我们需要在计算器上点击三个数字,所以click操作得点击三次,
    所以我们需要给他一个数字的位数,数字的位数我们给他一个变量first_length,这个变量取值是一个1-5位的随机 数RandomNumber(1,5).
    然后开始在计算机上点次数,所以用for语句 For i=1 to first_length(从1到first_length随机生成几个数字就点几次
    然后给一个0-9的随机数字num=RandomNumber(0,9),就是计算器当前点的数字是几。
    把Window("计算器").WinButton("5")中的5换成num,得是字符型的Winbutton(Cstr(num)),运行一下报错,说没找到按钮,在对象库中不存在,所以我们需要把计算器的所有东西都加到对象库中用object repository。
    然后在运行一次。那么计算中的第一位数字设置完成了
    计算中的第二位数字跟第一位是一样的,所以脚本直接复制过去,把变量换成second_length

    3.下面开始增强运算符号,我们录制的是加法运算,但我们要做的是四则运算,所以这个运算符是随意的,让它自己随机在加减乘除中选择,给一个变量oper_num=RandomNumber(1,4),如果随机生成1,那么就点击加号,生成2时减。。。
    我们用select case语句。oper_num=RandomNumber(1,4)
    Select Case oper_num
    Case 1
    Window("计算器").WinButton("+").Click
    Case 2
    Window("计算器").WinButton("-").Click
    Case 3
    Window("计算器").WinButton("*").Click
    Case 4
    Window("计算器").WinButton("/").Click
    End Select


    4.前面的值都设置完了,下一步我们想是不是要把计算结果看下是否正确,那我们把点击=后的结果输出来。这时我们打开active screen预览窗口,找到点击等号那个屏,在计算结果处右击选择insert output value,选择text那个值输出,然后弹出界面选择输出到哪里,我们输出到data table中的一列,写一个名字actual_result。选择放到当前步骤后面after current step.也就是按完等号之后把结果输出来的操作。这时我们看到点击等号后的脚本后面生成一句代码Window("计算器").WinEdit("Edit").Output CheckPoint("Edit")
    运行一下


    这就是一个最简单的1-5位的四则运算。


    6.但是我们在实际中并不是只跑一次,我们得跑很多次,所我们需要在整个脚本的前面加一个for...next循环,让他多跑几次。我们可以设置10次。for times=1 to 10 。


    7.我们还有一个问题,刚刚我们让点击等号后的结束输出了,现在我们跑十次,那我们最后十次的结果都输出,最后显示的只能是最后一次的运算结果。因为我们是在这个action给他for的,所以只写到第一行里。

    这时我们可以把计算结果的文本值手工拿出来赋值到actual_result列的下面几行。
    Data Table.value("actual_result,",dtGlobalSheet)=Window("计算器").WinEdit("Edit").GetROProperty("text"),
    这是赋值的,这样还是会赋值到第一行,所以还得在这段脚本前面加上行号,Data Table.SetCurrentRow(times)(当前运行到哪一行,就执行下面语句给他赋值)(times是for循环的那个times)


    8.运行一下,这时有可能出现总跑不完的问题,这时把file-》setting中的run改成只迭代一次,因为我们设置的for循环语句跑十次,是这个action里面跑十次,但是这个action还得按照setting中设置的迭代次数跑,这样就是相当多遍,所以我们改成一次迭代,就相当于只跑十次了


    当然也可以设置一个预期结果except_result用来比对实际与预期结果,并且给个状态status,相同就pass,不相同就fail。

    脚本里,第一个数字点击完成next后加入代码:first_num=Window("计算器").WinEdit("Edit").GetROProperty("text"),这就是计算机运算的第一位数字,然后第二位second_num=Window("计算器").WinEdit("Edit").GetROProperty("text")

    这两位经过运算让他显示在data table的expect_result中
    在等号后,Select Case oper_num
    Case 1
    Data Table.Value("expect_result",dtGlobalSheet)=CDbl(first_num)+CDbl(second_num)
    Case 2
    Data Table.Value("expect_result",dtGlobalSheet)=CDbl(first_num)-CDbl(second_num)
    Case 3
    Data Table.Value("expect_result",dtGlobalSheet)=CDbl(first_num)*CDbl(second_num)
    Case 4
    Data Table.Value("expect_result",dtGlobalSheet)=CDbl(first_num)/CDbl(second_num)
    End Select

    至于结果的比对,自己去写下。
    当然我们的脚本还是有些漏洞,比方说除时除数不能为零等,这个自己去研究完善下。

    四则运算具体的脚本语言:

    For times=1 to 2

    SystemUtil.Run "C:WINDOWSsystem32calc.exe","","C:WINDOWSsystem32","open"

    first_length=RandomNumber(1,5)
    For i=1 to first_length
    num1=RandomNumber(0,9)
    Window("计算器").WinButton(Cstr(num1)).Click
    Next
    first_num=Window("计算器").WinEdit("Edit").GetROProperty("text")  做判断时取的第一个数的值
    oper_num=RandomNumber(1,4)
    Select Case oper_num
    Case 1
    Window("计算器").WinButton("+").Click
    Case 2
    Window("计算器").WinButton("-").Click
    Case 3
    Window("计算器").WinButton("*").Click
    Case 4
    Window("计算器").WinButton("/").Click
    End Select
    sencond_length=RandomNumber(1,5)
    For i=1 to sencond_length
    num2=RandomNumber(0,9)
    Window("计算器").WinButton(Cstr(num2)).Click
    Next
    second_num=Window("计算器").WinEdit("Edit").GetROProperty("text")  做判断时做的第二个数的值
    Window("计算器").WinButton("=").Click
    DataTable.SetCurrentRow(times)                                                               当前行数
    DataTable.value("actual_result",dtGlobalSheet)=CDbl(Window("计算器").WinEdit("Edit").GetROProperty("text"))  把实际结果赋值
    Select Case oper_num
    Case 1
    DataTable.Value("expect_result",dtGlobalSheet)=CDbl(first_num)+CDbl(second_num)
    Case 2
    DataTable.Value("expect_result",dtGlobalSheet)=CDbl(first_num)-CDbl(second_num)
    Case 3
    DataTable.Value("expect_result",dtGlobalSheet)=CDbl(first_num)*CDbl(second_num)
    Case 4
    DataTable.Value("expect_result",dtGlobalSheet)=CDbl(first_num)/CDbl(second_num)
    End Select
    If DataTable.value("actual_result",dtGlobalSheet)=DataTable.Value("expect_result",dtGlobalSheet) Then   实际结果和理论将结果的判断
    DataTable("status",dtGlobalSheet)="PASS"
    else
    DataTable("status",dtGlobalSheet)="FAIL"
    End If
    Window("计算器").Close

    Next

    小飞机所有页面的录制和脚本加强

    1.首先把小飞机的登录,订飞机票,还有传真页面的对象分别存入对象库中保存。
    有一点需要注意订单页面设计的到对象比较多,但我们最好是用到哪个存哪个,不用的就不存,因为多了系统也会运行比 较慢。就像人的大脑记得东西多了,就会累。影响性能。
    2.可以用associate repository把对象和action关联起来。

    3.录制小飞机的登录,订飞机票,传真。
    4.分别拆分到不同的action中。那怎么分呢?可以把鼠标放到要拆分的地方,点击菜单edit->action->aplit action,或者点击快捷菜单。分成login,insert,fax。拆分时拆分的两部分可以是兄弟关系,也可以是父子关系。而且可以分别起名字。


    5.拆分完后我们可以分别给每一部分关联它的对象,不需要的删除。(因为有些事关联着的所以删除不了,这时把关联的地方去掉关联即可)

    注意:首先flight页面中有个menu对象,这个menu是fax中的,可以去掉。共享对象库是只能读的。
    fax中我们发现fax中有两个order号,其实我们只需要11那个,先把下面的删除,等会运行可能会有问题,到时我们会 解决。而且我们发现menu虽然是需要的在fax中,但menu没有在fax中,所以我们需要完善下对象库。点击resource-》object repository,把menu导出。为fax2.然后点击object repository中的tool-》object repository merge tool,把fax和fax2关联下。保存为fax3.然后把action fax与fax3关联。


    6.首先我们还是把飞机启动的改成手动的
    If Dialog("Login").Exist(2)=false Then
    SystemUtil.Run"C:Program FilesHPQuickTest Professionalsamplesflightappflight4a.exe"
    End If
    把设置密码那改为跟上面输入用户名一样的形式set "mercury"


    7.运行一下,发现到传真页面出问题了,说找不到传真页面,其实传真页面有,只是叫传真18了,比对象库中加1了,那我们怎么匹配到这个加1 的窗口呢?我们打开对象库的fax3,我们的传真号那写的是11,那我们编辑下,把传真号11改为Num,这样还是不行,因为下面text中是11,所以text中的11也要改,我们要改为一个自动匹配的数字,那怎么匹配呢?点击点击下面的单选框regular expression,然后选择一个字符让它代表里面的东西是数字,我们去帮助文档中找regular expression(reg exp)object下有一个pattern property,找到d代表的是数字,所以我们把11改成d,d出现次数用{n,},所以text文本内容改为fax order No.d{1,}至少匹配一次。

    同时脚本中相应传真编号那也把名字改一下fax order No.Num

    在接着运行一下,跑通后可以继续完善脚本


    8.那我们登录页面,第一节课讲的那些登录的用例可以放进去了。但有一点要注意:最后一条记录一定要保证他能正常进行。才能进入到insert订单页面,这样流程就能跑起来了,也就是程序只要从头走一遍就都能验证了,这个过程一直重复进行。这就是自动化的好处

    大家可以自己设计下,这里就不写了
    这里我们只加一点,我们只验证它流程的正确定。

    在点击了login点击ok后,或者在insert之前,验证定飞机票的那个页面是否出现。即验证登录是否成功,我们在insert页面之前加吧。加一个检查点,看那个页面是否跳出来

    9.订单中输入日期,我们知道是随机的,所以我们设置一个变量randomDate=Date+XXX,date是当前时间,我们让他去加一个时间(1-30天中的任意一天),所以,定义变量iDay=RandomNumber(1,30),让randomDate=Date+iDay,当然如果我们不知道写的对不对可以新开一个窗口编写完,写个msgbox让他输出来看下,正确了在贴到这边来。这样我们得到输入随机日期的脚本:
    iDay=RandomNumber(1,30)
    randomDate=Date +iDay

    下面是构造mmddyy格式的,并且当日期或者天是一个数字时需要前面加0,
    mm=month(randomDate)
    If Len(month)(randomDate)=1 Then
    mm="0"&mm
    End If

    dd=day(randomDate)
    If Len(day(randomDate))=1 Then
    dd="0"&dd
    End If
    fmtDate=mm&dd&right(year(randomDate),2)


    把fmtDate贴到
    Window("Flight Reservation").WinObject("Date of Flight").Type "fmtDate"

    当然这个也可以用函数写

    这就是我们的随机时间
    10.下面是我们的fly from随机。那这个地方怎么随机呢?
    fromIndex=RandomNumber(),因为我们的ComboBox从哪出发是一个下拉列表形式,从里面选择,它的个数就是下拉列表有多少项,所以我们可以通过Window("Flight Reservation").WinComboBox("Fly From:")里面的个数减一,我们用一个函数GetltemsCount,
    按照我们的理解也就是可以写成:
    fromIndex=RandomNumber(0,Window("Flight Reservation").WinComboBox("Fly From:").GetItemsCount-1)
    但是因为RandomNumber里面不支持表达式,所以我们写成

    fromCount=Window("Flight Reservation").WinComboBox("Fly From:").GetItemsCount-1
    fromIndex=RandomNumber(0,fromCount)
    Window("Flight Reservation").WinComboBox("Fly From:").Select fromIndex

    同样fly to也是一样的。所以目的地随机是:

    toCount=Window("Flight Reservation").WinComboBox("Fly To:").GetItemsCount-1
    toIndex=RandomNumber(0,toCount)
    Window("Flight Reservation").WinComboBox("Fly to:").Select toIndex

    11.下面的选择航线winlist也是一个列表,我们要选择当前航线中的某一条航线。
    所以


    listCount=Window("Flight Reservation").Dialog("Flights Table").WinList("From").GetltemsCount-1
    listIndex=RandomNumber(0,listCount)
    Window("Flight Reservation").Dialog("Flights Table").WinList("From").Select listIndex


    12.下面订单的设置用户名是我们的登录用户,即登录用户名,所以我们可以从login action里面的输出到data table表里。然后到insert action设置用户名这从data table表取。

    所以我们在login action中登录名那行的脚本右键选择insert output value,有可能报错。那我们换另一种方式
    在输入用户名那行脚本后面空出一行,鼠标放空出的一行,打开小飞机的登录页面,然后点击record,选择菜单中insert-》output value-》text output value,然后选中login页面的agent name输入框,然后点击ok弹出text output value properties对话框,选择modify,然后选中global sheet,name输入框自己取名字agent_name,就可以了。


    然后insert action中的Window("Flight Reservation").WinEdit("Name:").Set "mercury"改为Window("Flight Reservation").WinEdit("Name:").Set Data Table("agent_name",dtGlobalSheet)

    这样我们取得值就是登录人的信息了。

    13.Window("Flight Reservation").WinEdit("Tickets:").SetSelection 0,1这行信息不需要的。

    14.下面是设置集票数,因为我们经过实践知道集票数只能是最高10张,所以写成:

    tickets=RandomNumber(1,10)
    Window("Flight Reservation").WinEdit("Tickets:").Set Cstr(tickets)

    这样就是我们的随机机票数。


    15.最后就是机舱随机,跟加减乘除随机一样的,1-3中情况

    num=RandomNumber(1,3)
    Select Case nun
    Case 1
    Window("Flight Reservation").WinRadioButton("First").Set
    Case 2
    Window("Flight Reservation").WinRadioButton("Business").Set
    Case 3
    Window("Flight Reservation").WinRadioButton("Economy").Set

    End Select

    16.fax里不需要修改。然后运行一下试试。这就是我们做的让整个流程能够跑通的操作。这个没有人工控制,都是机器自动运行的。

     小飞机脚本加强语言:

    login:暂未做加强

    If Dialog("Login").Exist(2)=false Then
    SystemUtil.Run"D:HPQuickTest Professionalsamplesflightappflight4a.exe"
    End If


    Dialog("Login").WinEdit("Agent Name:").Set "mercury"
    Dialog("Login").WinEdit("Password:").Set "mercury"
    Dialog("Login").WinButton("OK").Click

    flight:

    iday=RandomNumber(1,30)
    randomdate=date+iday

    mm=month(randomdate)
    If Len(mm )=1 Then
    mm=0&month(randomdate)
    End If

    dd=day(randomdate)
    If Len(dd)=1 Then
    dd=0&day(randomdate)
    End If

    fmtdate=mm&dd&right(year(randomdate),2)

    Window("Flight Reservation").WinObject("Date of Flight:").Type fmtdate

    fromindex=RandomNumber(0,Window("Flight Reservation").WinComboBox("Fly From:").GetItemsCount-1)

    Window("Flight Reservation").WinComboBox("Fly From:").Select fromindex

    toindex=RandomNumber(0,Window("Flight Reservation").WinComboBox("Fly To:").GetItemsCount-1)

    Window("Flight Reservation").WinComboBox("Fly To:").Select toindex

    Window("Flight Reservation").WinButton("FLIGHT").Click
    flight=RandomNumber(0,Window("Flight Reservation").Dialog("Flights Table").WinList("From").GetItemsCount-1)

    Window("Flight Reservation").Dialog("Flights Table").WinList("From").Select flight

    Window("Flight Reservation").Dialog("Flights Table").WinButton("OK").Click


    Window("Flight Reservation").WinEdit("Name:").Set "mercury"  此处未做增强,可参照四则运算第四步

    tickets=RandomNumber(1,10)
    Window("Flight Reservation").WinEdit("Tickets:").Set Cstr(tickets)

    num=RandomNumber(1,3)
    Select Case nun
    Case 1
    Window("Flight Reservation").WinRadioButton("First").Set
    Case 2
    Window("Flight Reservation").WinRadioButton("Business").Set
    Case 3
    Window("Flight Reservation").WinRadioButton("Economy").Set

    End Select

    Window("Flight Reservation").WinButton("Insert Order").Click
    Window("Flight Reservation").WinMenu("Menu").Select "File;Fax Order..."

    fax:  未做增强

    SystemUtil.Run "C:Program FilesSogouInputSogouExeSogouExe.exe","/check","","open",0
    Window("Flight Reservation").Dialog("Fax Order No. d{1,}").WinObject("Fax Number:").Type "1111111111"
    Window("Flight Reservation").Dialog("Fax Order No. d{1,}").Drag 264,211
    Window("Flight Reservation").Dialog("Fax Order No. d{1,}").WinObject("Fax").Drop 338,248
    Window("Flight Reservation").Dialog("Fax Order No. d{1,}").WinCheckBox("Send Signature with order").Set "ON"
    Window("Flight Reservation").Dialog("Fax Order No. d{1,}").WinButton("Send").Click
    Window("Flight Reservation").Close

  • 相关阅读:
    Map容器家族(LinkedHashMap源码详解)
    树篇3-平衡二叉查找树之红黑树
    树篇2-平衡二叉查找树之AVL树
    树篇1-二叉查找树
    Map容器家族(HashMap源码详解)
    位运算符的基本使用和注意事项
    android中获取屏幕的信息
    获取activity的根视图
    初来咋到,请多指教
    linux死机解决办法
  • 原文地址:https://www.cnblogs.com/wanglisong/p/7122334.html
Copyright © 2011-2022 走看看