以前一直觉得自己没有写代码的资质,太急于求成,以为一天就能写好几个功能,几千行代码,于是就没耐心了,没心情学下去了....但是最近发现其实写代码是一个漫长的过程,都是在修修改改中成长起来的。于是今天试着慢慢用QTP测下参数限制,虽然代码量不多,其实也算不上编程,O(∩_∩)O哈哈~但也是个慢慢积累的过程。
转载要说明来自 博客园--邦邦酱好 哦~
首先,我有一段登陆系统的测试模块,可以把它设为可重用的,并且参数化必要的信息,比如登陆用户名密码等等,这些就不细说了。可以参见《QTP自动化测试实践》8.3节 Action测试输入的参数化,调用过程见上一篇关于action的文章。
现在我要测试参数的限制:
第一步,必须要在当前项目下新建一个action,步骤如下:
选择Insert|Call to New Action:
然后在弹出框中填写新建action的name和description,可不可重用,以及新action的位置,这里我的参数检查功能是在登陆模块之后,所以选择第一个At the end of the test。
这样我们就可以在左侧栏看到2个action:
第二步,既然2个action都是测试同一个软件,可以重用它们的对象库respositories,操作步骤是:
先保存login这个action的对象库,后缀是“.tsr",然后选择Resources|Associate Respositories,选定刚刚保存的对象库文件,然后下面的Available Action选择login模块,右边的Associated Action选择Test_Parameters模块:
于是,在测试参数的模块中就可以直接使用login的对象库了。
第三步,因为测试参数是一个繁杂的过程,有很多种组合方式,而且每个参数输入框都要求输入一遍,但是好在参数输入框的规则都是一样的,比如不能输入符号,字母,负数,小数,空格等等,除此之外还有范围限制,于是我就采用数据驱动测试的方法来做这个脚本。先写好输入参数的过程:
1
2
3
4
5
6 |
Dialog( "App(1.0.1.0)" ).WinEdit( "MINS" ). Set
”1“ Dialog( "App(1.0.1.0)" ).WinEdit( "MINX" ). Set
”1“ Dialog( "App(1.0.1.0)" ).WinEdit( "MAXS" ). Set
”2“ Dialog( "App(1.0.1.0)" ).WinEdit( "MAXX" ). Set
”2“ Dialog( "App(1.0.1.0)" ).WinEdit( "IR" ). Set
”1“ Dialog( "App(1.0.1.0)" ).WinEdit( "OR" ). Set
”2“ |
然后根据数据驱动测试的步骤设置参数根据table中的值来输入,详情参见我博客《QTP:数据驱动测试》,Expert View的显示如下:
1
2
3
4
5
6 |
Dialog( "App(1.0.1.0)" ).WinEdit( "MINS" ). Set
DataTable( "minS" , dtLocalSheet) Dialog( "App(1.0.1.0)" ).WinEdit( "MINX" ). Set
DataTable( "minX" , dtLocalSheet) Dialog( "App(1.0.1.0)" ).WinEdit( "MAXS" ). Set
DataTable( "maxS" , dtLocalSheet) Dialog( "App(1.0.1.0)" ).WinEdit( "MAXX" ). Set
DataTable( "maxX" , dtLocalSheet) Dialog( "App(1.0.1.0)" ).WinEdit( "IR" ). Set
DataTable( "IR" , dtLocalSheet) Dialog( "App(1.0.1.0)" ).WinEdit( "OR" ). Set
DataTable( "OR" , dtLocalSheet)<br>Dialog( "App(1.0.1.0)" ).WinButton( "应用参数" ).Click ‘ 点击开始应用参数 |
我设置了2种参数范围边界的数据,9种服务端会拒绝应用的参数组合,30种客户端限制的参数类型组合。
第四步,对测试结果进行判断并显示在QTP生成的测试报告中:
开始我是这么写的:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 |
If
Dialog( "App(1.0.1.0)" ).Dialog( "提示" ).Exist(3) Then Dialog( "App(1.0.1.0)" ).Dialog( "提示" ).WinButton( "应用参数成功-确定" ).Click ‘ 应用成功 reporter.ReportEvent micDone, "yes" , "前2个:可以应用成功" else reporter.ReportEvent micFail, "yes" , " 前2个:服务端拒绝应用" End If If Dialog( "App(1.0.1.0)" ).Dialog( "错误" ).Exist(3) Then Dialog( "App(1.0.1.0)" ).Dialog( "错误" ).WinButton( "服务器不支持该参数-确定" ).Click reporter.ReportEvent micDone, "server no" , "中间9个:服务端拒绝应用" else reporter.ReportEvent micFail, "server no" , "中间9个:服务端居然应用了" End If If
Dialog( "App(1.0.1.0)" ).Dialog( "警告" ).Exist(3) Then Dialog( "App(1.0.1.0)" ).Dialog( "警告" ).WinButton( "客户端不支持该参数-确定" ).Click reporter.ReportEvent micDone, "client no" , "后30个:DTC拒绝应用" else reporter.ReportEvent micFail, "client no" , "后30个:DTC居然应用了" End If |
运行之后发现,每一行参数的结果都有2个fail,因为我设置的三个主if是并列关系!符合其中一种情况之后,另外2种情况都会失败。
于是,我再写成这样的:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 |
If
Dialog( "App(1.0.1.0)" ).Dialog( "提示" ).Exist(3) Then Dialog( "App(1.0.1.0)" ).Dialog( "提示" ).WinButton( "应用参数成功-确定" ).Click ‘ 应用成功 reporter.ReportEvent micDone, "yes" , "前2个:可以应用成功" elseif Dialog( "App(1.0.1.0)" ).Dialog( "错误" ).Exist(3) Then Dialog( "App(1.0.1.0)" ).Dialog( "错误" ).WinButton( "服务器不支持该参数-确定" ).Click reporter.ReportEvent micDone, "server no" , "中间9个:服务端拒绝应用" elseif Dialog( "App(1.0.1.0)" ).Dialog( "警告" ).Exist(3) Then Dialog( "App(1.0.1.0)" ).Dialog( "警告" ).WinButton( "客户端不支持该参数-确定" ).Click reporter.ReportEvent micDone, "client no" , "后30个:客户端拒绝应用" else reporter.ReportEvent micFail, "fail" , " 结果跟预期不一致" End If |
现在如果全部测试通过,不会出现fail的情况,但是需要在测试报告中一层层点开,查看对于每个测试数据行的测试结果是不是符合以下描述:
1.前2个:可以应用成功
2.中间9个:服务端拒绝应用
3.后30个:客户端拒绝应用
虽然上面的脚本避免了重复输入41种数据,但是后期的结果查看还是一个艰辛的过程,不知道QTP有没有把测试人员要求的结果描述统一到一个页面来的功能呢,有待挖掘。
原文地址:http://www.cnblogs.com/bangbangjiang/p/3723689.html