QTP 问与答

本文汇总了QTP自动化测试中的常见问题与解决方案,包括动态调用Action、使用WSH执行任务、参数化测试数据、连接TD、处理弹窗等实用技巧。
 

1.Q:runaction 后面能不能接变量(动态调用action,所以从数据库取数据做action名字了,但是调用总是找不到)?


  A:脚本中原有RunAction "testbase [case1]", oneIteration
    把引号中的内容放到Global表中的第22行,然后将代码修改为:
    datatable.getsheet("Global")
    datatable.setcurrentrow(22)

    strLogin=DataTable("ActionName","Global")
    RunAction strLogin, oneIteration
  
    help中也有相关帮助
    如:
    Syntax
    RunAction ActionName, [IterationMode , IterationRange , Parameters]
    ActionName : String : The name of the action

2.QTP8.2 中调用VB函数的问题(用VBScript写了一些测试脚本需要的几个通用函数,有没有办法可以用类似include

的方式进行调用,而不需要每次都把这些函数Copy到新的脚本中)?
  A:程序开头加上ExecuteFile "../../../project/DeVariable.vbs"

3.QTP 如何做回归测试(300多个TestCase,TD是否可以管理) ?
  A:TD可以实现,可以生成测试集,一个测试集可以包含若干个测试脚本
    QTP8.2本身提供一个工具Test Batch Runner但是运行完没有报告。
    MI有另一个工具叫MTM(multitestmanager)

5.Q: 在QTP中如何设置使用别的浏览器(XP系统,用IE访问程序时,每次总提示屏蔽安装ActiveX插件,需要手动

安装.但把这个过程录制到QTP后,回放一次是成功的。当我给某个输入框参数化了好多数据后,回放过程中,某

些就会失败.
    可能有两个方面可以解决这问题1、每个动作设置延迟时间 2、设置为用别的浏览器。)
    (失败的提示信息是  object not visible)
  A:1.延迟可用WAIT X(X单位是秒)
    2.可以安装插件添加新的浏览器
       SystemUtil.Run "file” "params" "dir" "op'' "mode"
       QTP运行可执行文件的方法及其参数
     ps: 建议是用IE浏览器,或者IE内核浏览器做测试

6.Q:checkpoint 检查网页,是否能实现只要网页出现乱码就返回错误报告?
  A:Text not displayed能解决问题
    关于 Text Checkpoint 的总结。
    1)Text Checkpoint 的检查部分分为三个部分。Checked Text 、Text Before 、Text After。在默认的情况下,

Checked Text执行的是精确检查,其余两个部分执行的是模糊检查。Text Before(After)检查的内容可以比实际的

内容少。但是不能有和是实际内容不相符的地方,否则就失败。
    2) Exact match选项。如果选择了这个选项,三部分完全都进行精确检查。个人觉得和只检查checked Text部分

没有区别。
    3) Text not displayed。这个选项本质上就是一个结果取反的过程。就是把检查的结果给反过来,把pass变成Fail,Fail变成pass。我觉得这样就很容易理解。

7.Q:WSH 的应用方法
  A:WSH 实际上是一个脚本语言的运行环境,它之所以具备强大的功能,是在于其充分挖掘了脚本语言的潜力。

因此,如果抛开脚本语言而空谈 WSH ,那实际上就没有了意义。而如果再展开来讲述脚本语言,显然就离开了

今天的主题。

在这种情况下,只好采取一种折衷的方法:给大家推荐几个脚本文件利用 WSH 执行任务的实例,希望大家能通

过这些例子对 WSH 的使用有一个初步的认识。

  脚本文件的编写十分方便,你可以选用任意一个文字编辑软件进行编写,编写完成后,只需将它保存为

WSH 所支持的文件名就可以了(如.js 文件和.vbs 文件)。最常用的就是记事本编辑器,下面的实例都是以它作

为工具编写的。

打开记事本编辑器,在上面编写如下内容:
  WScript.Echo("走近 WSH")
  将它保存为以 .vbs 或 .js 为后缀名(千万不要写成了 .txt)的文件并退出记事本。双击执行这个文件。
  这一次,我们要利用 WSH 完成一次创建十个文件夹的工作。代码如下:
  dim objdir
  set objdir=wscript.createobject("scripting.filesystemobject")
  for k=1 to 10
  anewfolder="c:/chapter" & k
  objdir.createfolder(anewfolder)
  next

同样,将它存为 .vbs 文件并退出。运行后,我们会发现,C 盘根目录下一次性多出了十个新文件夹。

    最后,再举一个在服务器上的运用。下面的代码将帮助你重新启动指定的 IIS 服务:  ' define a constant for

stopped services
  Const ADS_SERVICE_STOPPED = 1

' get an ADSI object for a computer
  Set objComputer = GetObject("WinNT://MYCOMPUTER,computer")

' get an object for a service
  Set objService = objComputer.GetObject("Service","MYSERVICE")

' check to see if the service is stopped
  If (objService.Status = ADS_SERVICE_STOPPED) Then

' if the service is stopped, then start it
  objService.Start

  End If

将它以 startsvc.vbs 为名保存在 C: 盘根目录。并通过如下命令执行:CSCRIPT C:/STARTSVC.VBS。运行后,经

你指定的 IIS 服务项将被重新开启。

其实,在 Windows 的 samples 目录下,有个 WSH 文件夹,那里面有不少很具代表性的 .vbs 和. js 脚本文件。

此外,利用 WSH 还可以自己编写脚本文件来提高网络管理方面的效率。


8.Q; 从 EXCEL 中导出数据进行测试

datatable.AddSheet("51sheet")
datatable.ImportSheet "f:/test.xls","testsheet","51sheet"

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

datatable.getsheet("51sheet")
datatable.setcurrentrow(i)

' 执行过上面两句后, CurrentRow 是第一行。

tempData=DataTable.GetSheet("51sheet").GetParameter("Name").Value
                 
' 现在,我们调用 msgbox 看看下面这种调用方法得到的是什么值?没错,是第一行的值,下一次循环呢?
' 得到的是第二行的值么?
msgbox "GetParameter-Name:"&tempData ' 这里弹出我们要看的值。
' 下面我们用另外一种方法来得到。
msgbox "GetParameter-i:"&DataTable.GetSheet("51sheet").GetParameter(1).Value ' 这里我用 GetParameter(1) 去

得到 sheet 中第一列的值。
loop

9.Q: 关于 dtGlobalsheet 与 dtGlobalsheet

1) dtGlobalsheet 只有一个,它的 index 值比较特殊,它有两个 index 值,一个是 1 还有一个是内置的默认的 1000


你可以用 1 或者 1000 去引用它都是正确的。当然了,如果你用 dtGlobalsheet 来引用它也是正确的。这个 sheet

的 Name 叫做 "Global" 。注意: SheetName 是区分大小写的。
2) dtLocalsheet 可以用 index:1001 来引用,当然,也可以用 2 来引用。至于其它自定义的 sheet 嘛,你就只能用

index:3 来引用了。
它没有内置的默认的类似前两个那样的 index 值。
3) datatable 这个对象只有一个。就是所有 sheet 的集合。或许你把它理解为 excel 文件比较好。
dtsheet 呢?就是其中的每个 sheet 。所不同的就是 MI 为他们做了一些默认值。在我们的应用中,可能会有多个

action, 如: actiion1,actiion2,actiion3
这些 action 也分别对应有各自默认的 LoaclSheet. 即: actiion1 , actiion2 , actiion3 。

如果每个 action 中,我们都只用到一个 sheet ,那就好办了,在每个 action 中都可以用 localsheet 来引用,但是

如果我们有两个及两个以上的 sheet. 那么就比较容易乱套了。

10.Q: 移动当前位置的行

For i=1  to 3
datatable.getsheet("Global")
datatable.setcurrentrow(i)
DataTable("C","Global") = DataTable("nodename","Global") ‘把表Global中的nodename字段中的内容取出来。
Next

11.Q: 如何能记录到页面的校验码?(Output value能不能得到web页面的校验码,一般的校验码是由图片随即生成

的 ,用QTP怎么录脚本在登陆前得到校验码并输入到校验码一栏)
   A:1)一个很简单的方法:测试时叫开发屏蔽掉检验码的功能后,再录制脚本。检验码的功能可以手工很简单测

试出来。
     2)想得到图片的校验码,唯一的方法就是跟程序员拿程序,然后自己在脚本里面写FUCNTION!
        其它就要手动输入了!

12.自动测试实施计划
   1)分析实施自动化测试可能存在的风险:就是决定是否实施, 用成本 时间 效果 。。
   2)制定实施的时机:也就是在什么阶段
   3)研究所要测试的功能 性能
   4)分析在测试中可能遇到的问题 和困难
   5)预估所需要的人时和相应的硬件
   7)确定负责人员和相关测试人员
   6)制定详细的测试计划 方案
   7)最后是执行计划

 

14.Q: 一个Action里如何调用在另一个Action中定义的函数、过程(或变量、常量)
   例如:
   -----------------------------------
   'Action_A
     Public strURL   
        ...... ......
    Function QueryList()
        ...... ......
        ...... ...... 
    End Function
   ------------------------------------
   'Action_B
   '如何调用 QueryList函数和strURL
   A:1)可以把这些变量和Function放在vbs文件作为resource文件共享,在每个Action中添加该文件.         

如果function中出现控件调用,那么必须确保该控件在相应的Action的object repository中是存在的.
  2)定义一个可被调用的ACTION里面唯一的放一个FUNCTION
15.Q: 如何管理QTP的源代码?(QTP生成的源代码比较多,而且和环境控件都有关,假如需要多人同时开发, 请问如

何管理源代码?)
   A: 一个是代码你可以通过vss,cvs等来进行管理
     一个是通过td或者qc的基于用例的代码管理     

其实第一种方法是基于版本控制来进行的,第二种方法是基于用例管理进行的
     角度不同,管理方法也不同,不过团队协作需要的大家分工明确,进度控制。代码管理可以借鉴开发的方法。

16: 脚本不能回放,IE中的AtiveX设置有问题??
   A: TOOL---OPTIONS----Ative screen
     然后点开advanced..,把LOAD  ACTIVEX CONTROLS打勾
     TOOL---OPTIONS----Ative screen
     然后点开advanced..,run scripts-->disabled!

 

17 .Q: 如何参数化link

Browser("Browser").Page("age").Sync
Browser("Browser").Navigate "http://bbs.51testing.com/index.php"
Browser("Browser").Page("51Testing 软件测试论坛---软件测试,软件质量工程师").Sync

Set tags=Browser("Browser").Page("51Testing软件测试论坛---软件测试,软件质量工程师").Object.links
Dim i,j, arr()
i=0
For Each element in tags
    If Ucase(element.tagname)="A" and left(element.InnerText,1)="[" Then
                        ReDim Preserve arr(i+1)
                    arr(i)=element.InnerText
    i=i+1
        end if
Next

For j=0 to i
                        Browser("Browser").Page("51Testing软件测试论坛---软件测试,软件质量工程师").Link("[ 版主讨论区

]").SetTOProperty "Text",arr(j)
            Browser("Browser").Page("51Testing软件测试论坛---软件测试,软件质量工程师").Link("[ 版主讨论区 ]").Click
                        Browser("Browser").Back
Next

这段代码先是打开一个空的页面,然后输入url.
到达论坛首页。

然后得到所有版面的名称,也就是link的名称。
存到数组里面。
然后使用SetTOProperty更换录制时候录下的link的属性。
这时候再click

18. QTP 在Debug狀態,在Export View 區域不能寫入任何東西

A: 如果你的目的是在debug过程中修改已执行过的命令,可以在Debug view的Command中执行命令,如重新执行

已经执行过的命令,修改变量的值等等。

如:Window("Flight Reservation").WinEdit("Name:").Set "51testing"
已经执行,如果现在想修改“51testing”为“testing”,可以在command中执行
Window("Flight Reservation").WinEdit("Name:").Set "testing"

19 .Q: 动态变化值如何获取

A:VAL=Browser("欢迎使用我的工作台").Page("欢迎使用我的工作台").Frame

("managePlace_7").WebRadioGroup("userAccountId_0").GetROProperty("Value")
Browser("欢迎使用我的工作台").Page("欢迎使用我的工作台").Frame("managePlace_7").WebRadioGroup

("userAccountId_0").select val


20 .Q: 如何一一获得Table中 某栏 link 的 text?

A:通过上面link 的学习. 我终于融会贯通,完成了我的问题: 与大家共享:


//////////////////////////////////////////////////////////////////////////////////////
Browser("Login").Page("age").Frame("contents").ViewLink("treeview").Image("Tplus").Click
Browser("Login").Page("age").Frame("contents").ViewLink("treeview").Image("Tplus_2").Click
Browser("Login").Page("Page").Frame("contents").ViewLink("treeview").Link("开课设置").Click
Browser("Login").Page("Page").Frame("main").WebList("drpStatus").Select "任意"
Browser("Login").Page("Page").Frame("main").WebButton("查找").Click
Browser("Login").Page("Page").Sync

Dim finded,findCode,Nowout
'define a constrat for find
findCode = 110901  
finded = false

Function MaxPage(pageString)
   'msgbox pageString
   Dim ilen,i,j
   ilen = len(pageString)
   i=ilen
   While i>0
        j = mid(pageString,i,1)
           'msgbox j
           If instr("123456789",j)>0 Then
           MaxPage = j
                   'msgbox MaxPage
                   Exit function
           End If
           i=i-1
   Wend
End Function


Dim trowcount,maxp
trowcount = Browser("Login").Page("Page").Frame("main_8").WebTable("开课代码").RowCount
msgbox "Rowcount: "&trowcount
Nowout = Browser("Login").Page("Page").Frame("main_8").WebTable("开课代码").GetCellData(trowcount,1)
Nowout = trim(Nowout)
maxp = MaxPage(Nowout)
msgbox "max page: "& maxp

Dim nowPage,checkid
For nowPage = 1 to maxp
   If  finded Then
           Exit for
   End If
  ' link to the 当前所需page
  If nowpage>1 Then
    Browser("Login").Page("Page").Frame("main_8").Link("[2]").SetTOProperty "Text","["&nowpage&"]"
    Browser("Login").Page("Page").Frame("main_8").Link("[2]").Click
    Browser("Login").Page("Page").Sync
   end if

  ' Get the rowcount of table in now page
   trowcount = Browser("Login").Page("Page").Frame("main_8").WebTable("开课代码").RowCount
   msgbox "Rowcount: "&trowcount

  'link every record in the table of the page
   for i = 2 to trowcount  - 2
        Nowout = Browser("Login").Page("Page").Frame("main_8").WebTable("开课代码").GetCellData(i,2)
        'msgbox i&": "&Nowout

    checkid = "dgCourse:_ctl" &(i+1)& ":_ctl0"
    Browser("Login").Page("Page").Frame("main_8").WebCheckBox("dgCourse:_ctl3:_ctl0").SetTOProperty

"name",checkid
    Browser("Login").Page("Page").Frame("main_8").WebCheckBox("dgCourse:_ctl3:_ctl0").Set "ON"
       
    Browser("Login").Page("Page").Frame("main_8").Link("0901").SetTOProperty "Text",Nowout
    Browser("Login").Page("Page").Frame("main_8").Link("0901").Click
    Browser("开课设置详细信息").Page("开课设置详细信息").Sync
        'wait(1)
        msgbox "begun"
        msgbox findCode
        msgbox Nowout
        msgbox "finished"
        If  trim(findCode) = trim(Nowout) Then
        finded = true
                msgbox "find is ok!"
                wait(2)
                Exit for
        End If
    Browser("开课设置详细信息").Close
    Browser("Login").Page("Page").Sync
  next

Next


21 .Q:网页下拉框的选择

A:For i =1 to 10
    Randomize
    IndexNum=Int((10 - 5 + 1) * Rnd + 5)
    Browser("Mercury Tours").Page("Find Flights_2").WebList("arrive").Select "#"&IndexNum
    wait(3)
Next

 

Sub ChildObjects_Example()
'The following example uses the ChildObjects method to find all the
'list objects on a Web page, and then to select an item in each list.

Set oDesc = Description.Create()
oDesc("micclass").Value = "WebList"
Set Lists = Browser("Mercury Interactive").Page("Mercury Interactive").ChildObjects(oDesc)
NumberOfLists = Lists.Count()
For i = 0 To NumberOfLists - 1
Lists(i).Select i + 1
Next


End Sub

 

22 .Q: 将测试数据单独拿出来

A: 取得一个
Browser("Browser").Page("").WebList("fid").GetItem (1)
取得全部
Browser("Browser").Page("").WebList("fid").GetROProperty("all items")

 

以下可以在自带的例子中实现
Window("Flight Reservation").WinComboBox("Fly From:").Select "Frankfurt"
a=window("Flight Reservation").wincombobox("Fly From:").GetItem(1)
reporter.ReportEvent 2,"下拉列表的值",a

 

23 .Q:和TD连接

A:在QTP中不是有个Quality Center Connection,选择服务器连接,服务器处输入类似http://computer_name/tdbin,其

中computer_name为服务器的名字,连接后在测试结果中添加defect就可以与TD相连了。

 

24 :Q:处理Windows弹出窗口

A:IF Not Window("Flight Reservation").Exist(1) Then
                        'Calling  open flight
               If    not Dialog("Login").Exist(1)  Then
                                                    Browser("管理系统").Dialog("Microsoft Internet Explorer").WinButton("确定").Click

                                         End If

 

25 .Q:查询结果的比较

这是查询一个字段的,对查询结果多页的情况也涉及了,其实应该把所有查询字段联合起来的,也就是改改sql语

句和判断条件。

Set Conn = CreateObject("ADODB.Connection")
Set Rs = CreateObject("ADODB.Recordset")
Conn.Open "Description=kml-it;DRIVER=SQL Server;SERVER=KML-IT;UID=sa;PWD=password;APP=QuickTest

Professional;WSID=KML-MICHELLE;DATABASE=kml_db"
sql="select distinct grn_no from grn_dtl where grn_no like '%"&grnNo&"%' order by grn_no DESC"
Rs.open sql,Conn,1,3
Dim i,j,cell
        i=1
        j=2 'j=2 的原因是因为页面上table是的数据是隔一行一条,不知   道怎么回事,开发人员弄的怪把
                Do while not rs.eof
                        If i=13 Then  '13是每页显示出的最大行数,是个常数
                                i=1
                                j=2
                                 Browser("::").Page("::").Frame("mainFrm_5").Link("下一页").Click
                        end if
                        cell=Browser("::").Page("::").Frame("mainFrm_5").WebTable("收货单号").GetCellData(j,2)
                        If cell<>rs("grn_no") Then
                Reporter.ReportEvent 1, "查询功能"&cell, "查询结果错误."
                                Exit do
                        else
                                Reporter.ReportEvent 0, "查询功能"&cell, "查询结果正确."
                        End If
                        rs.movenext
                        j=j+2
                        i=i+1
                Loop
rs.close
conn.close
set conn=nothing

标题SpringBoot智能在线预约挂号系统研究AI更换标题第1章引言介绍智能在线预约挂号系统的研究背景、意义、国内外研究现状及论文创新点。1.1研究背景与意义阐述智能在线预约挂号系统对提升医疗服务效率的重要性。1.2国内外研究现状分析国内外智能在线预约挂号系统的研究与应用情况。1.3研究方法及创新点概述本文采用的技术路线、研究方法及主要创新点。第2章相关理论总结智能在线预约挂号系统相关理论,包括系统架构、开发技术等。2.1系统架构设计理论介绍系统架构设计的基本原则和常用方法。2.2SpringBoot开发框架理论阐述SpringBoot框架的特点、优势及其在系统开发中的应用。2.3数据库设计与管理理论介绍数据库设计原则、数据模型及数据库管理系统。2.4网络安全与数据保护理论讨论网络安全威胁、数据保护技术及其在系统中的应用。第3章SpringBoot智能在线预约挂号系统设计详细介绍系统的设计方案,包括功能模块划分、数据库设计等。3.1系统功能模块设计划分系统功能模块,如用户管理、挂号管理、医生排班等。3.2数据库设计与实现设计数据库表结构,确定字段类型、主键及外键关系。3.3用户界面设计设计用户友好的界面,提升用户体验。3.4系统安全设计阐述系统安全策略,包括用户认证、数据加密等。第4章系统实现与测试介绍系统的实现过程,包括编码、测试及优化等。4.1系统编码实现采用SpringBoot框架进行系统编码实现。4.2系统测试方法介绍系统测试的方法、步骤及测试用例设计。4.3系统性能测试与分析对系统进行性能测试,分析测试结果并提出优化建议。4.4系统优化与改进根据测试结果对系统进行优化和改进,提升系统性能。第5章研究结果呈现系统实现后的效果,包括功能实现、性能提升等。5.1系统功能实现效果展示系统各功能模块的实现效果,如挂号成功界面等。5.2系统性能提升效果对比优化前后的系统性能
在金融行业中,对信用风险的判断是核心环节之一,其结果对机构的信贷政策和风险控制策略有直接影响。本文将围绕如何借助机器学习方法,尤其是Sklearn工具包,建立用于判断信用状况的预测系统。文中将涵盖逻辑回归、支持向量机等常见方法,并通过实际操作流程进行说明。 一、机器学习基本概念 机器学习属于人工智能的子领域,其基本理念是通过数据自动学习规律,而非依赖人工设定规则。在信贷分析中,该技术可用于挖掘历史数据中的潜在规律,进而对未来的信用表现进行预测。 二、Sklearn工具包概述 Sklearn(Scikit-learn)是Python语言中广泛使用的机器学习模块,提供多种数据处理和建模功能。它简化了数据清洗、特征提取、模型构建、验证与优化等流程,是数据科学项目中的常用工具。 三、逻辑回归模型 逻辑回归是一种常用于分类任务的线性模型,特别适用于二类问题。在信用评估中,该模型可用于判断借款人是否可能违约。其通过逻辑函数将输出映射为0到1之间的概率值,从而表示违约的可能性。 四、支持向量机模型 支持向量机是一种用于监督学习的算法,适用于数据维度高、样本量小的情况。在信用分析中,该方法能够通过寻找最佳分割面,区分违约与非违约客户。通过选用不同核函数,可应对复杂的非线性关系,提升预测精度。 五、数据预处理步骤 在建模前,需对原始数据进行清理与转换,包括处理缺失值、识别异常点、标准化数值、筛选有效特征等。对于信用评分,常见的输入变量包括收入水平、负债比例、信用历史记录、职业稳定性等。预处理有助于减少噪声干扰,增强模型的适应性。 六、模型构建与验证 借助Sklearn,可以将数据集划分为训练集和测试集,并通过交叉验证调整参数以提升模型性能。常用评估指标包括准确率、召回率、F1值以及AUC-ROC曲线。在处理不平衡数据时,更应关注模型的召回率与特异性。 七、集成学习方法 为提升模型预测能力,可采用集成策略,如结合多个模型的预测结果。这有助于降低单一模型的偏差与方差,增强整体预测的稳定性与准确性。 综上,基于机器学习的信用评估系统可通过Sklearn中的多种算法,结合合理的数据处理与模型优化,实现对借款人信用状况的精准判断。在实际应用中,需持续调整模型以适应市场变化,保障预测结果的长期有效性。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值