zoukankan      html  css  js  c++  java
  • QTP连载四:神一样的参数化方式?

      这次我们来介绍下当前用的比较多的参数化方法及参数文件组织方法,也就是上一篇中介绍的那5种,链接如下:http://www.cnblogs.com/SilenceCity/archive/2012/11/06/2757913.html

      首先来看第一种:使用datatable参数化,先看一个简单的例子吧。

      首先在Global表中的A列插入两行数据:GlobalTestParameter1、GlobalTestParameter2;Action1表中的A列插入三行数据:localTest1、localTest2、localTest3。

      然后编写如下代码:

     1 print "-------------------------------------------------------"
     2 print datatable.GlobalSheet.GetCurrentRow
     3 print datatable.Value("A","Global")
     4 print "-------------------------------------------------------"
     5 
     6 datatable.SetCurrentRow(1)
     7 
     8 For i = 0 to datatable.GetRowCount
     9     print datatable.Value(1,"Action1")
    10     datatable.LocalSheet.SetNextRow
    11 next

      执行结果如下:

    -------------------------------------------------------
    1
    GlobalTestParameter1
    -------------------------------------------------------
    localTest1
    localTest2
    LocalTest3
    -------------------------------------------------------
    2
    GlobalTestParameter2
    -------------------------------------------------------
    localTest1
    localTest2
    LocalTest3

      在这里面,global表控制测试脚本的执行次数,每一次循环里面的参数由对应的local表来完成。获取datatable表里面单元格的值可以用datatable.Value(1,"Action1")。

      关于datatable需要说明的有以下几点:

      1. 使用datatable对象时,默认为当前action所对应的sheet(datatable.SetNextRow = datatable.LocalSheet.SetNextRow);

      2. datatable表不会自动换行,所以需要手动换行datatable.LocalSheet.SetNextRow

      3. datatable对象是qtp封装的对象,所以它里面的数据不会在执行完一次脚本后清空;在执行脚本时,最好对datatable的起始数据行进行初始化datatable.SetCurrentRow(1),否则在第二次循环的时候,数据就会发生异常。有兴趣的朋友可以自己试试效果。

      再来说说第二种参数化方法:外部数据文件+datatable参数化。

      这种方法和上面的datatable操作基本一样的,只是多了一个导入和导出的操作,并且由于是动态数据,所以datatable的相关设置不会对这里的数据有影响。来看看一段简单的代码:

     1 datatable.ImportSheet "C:\Users\Silence\Desktop\test.xls","Action2","Action1"
     2 
     3 datatable.LocalSheet.SetCurrentRow(1)
     4 
     5 For i = 1 to datatable.LocalSheet.GetRowCount
     6     print datatable.Value(1,"Action1")
     7     datatable.LocalSheet.SetNextRow
     8 next
     9 
    10 datatable.ExportSheet "C:\Users\Silence\Desktop\test.xls",1

      在这里主要用到了datatable的两个封装函数importsheet和exportsheet来实现数据的导入和导出,具体的用法和参看帮助。在这里简单说明下:

      1. excel文件作为外部数据源时,最好采用97-2003的excel文件;因为目前qtp10还不能很好的支持xlsx文件,也许11或11.5会支持好一点吧。

      2. 外部文件第一行必须为表头,否则导入后第一行数据会被覆盖。

      下面说下第三种和第四种直接采用外部文件参数化的方法。

      采用外部文件做参数化需要自己编写调用外部文件对象的方法,在这里简单提供一个获取excel单元格的方法,至于其他的可以从网上搜到很多,如果有兴趣可以去搜下:

    1 Function getExcelValue(filename,sheetname,cell)
    2     dim oExcel,oWb,oSheet 
    3     Set oExcel= CreateObject("Excel.Application") 
    4     Set oWb = oExcel.Workbooks.Open(filename) 
    5     Set oSheet = oWb.Sheets(Sheet1) 
    6     getExcelValue = oSheet.Range(B2).Value
    7 
    8     Set oExcel = nothing
    9 End Function

      最后来说下利用qtp自定义环境变量和外部文件来进行参数化的方法,这个也是当年从zzxxbb123的书里面学到的。

      以txt文件为例。首先准备一个txt文件,里面内容为

    [Environment]
    test1 = hello
    test2 = what's your name?

      然后编写如下代码:

    1 Environment.LoadFromFile "C:\Users\Silence\Desktop\parameter.txt"
    2 
    3 print Environment.Value("test1") & "," & Environment.Value("test2")

      这样就可以快速使用txt里面的参数了,比起直接使用txt文件作为外部参数文件要简单易用的多,同时也节省了代码量。

      但是同时也有自己的缺点,因为文件内容全部读取到了环境变量中,所以如果参数值需要进行变化传递,则必须通过其他方法进行转换。

      好了,以上是几种常见的参数化方法,至于具体使用,还是看个人喜好和项目实际情况吧。

      如果大家有需要补充的,欢迎进行回复讨论

  • 相关阅读:
    (hash) leetcode 49. Group Anagrams
    (Manacher Algorithm, 中心拓展法,动态规划) leetcode 5. 最长回文串
    (KMP) leetcode 28. Implement strStr() 字符串匹配
    (字符串,哈希) leetcode 8. atoi,12. Integer to Roman
    (贪心) leetcode 435 Non-overlapping Intervals, 455 design cookies
    (Divide and Conquer) Closest Pair of Pairs
    (栈,双端队列,双指针) leetcode. 844 Backspace String Compare
    write、writelines
    *、**
    inf
  • 原文地址:https://www.cnblogs.com/SilenceCity/p/2759577.html
Copyright © 2011-2022 走看看