以前一直觉得自己没有写代码的资质,太急于求成,以为一天就能写好几个功能,几千行代码,于是就没耐心了,没心情学下去了....但是最近发现其实写代码是一个漫长的过程,都是在修修改改中成长起来的。于是今天试着慢慢用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的对象库了。
第三步,因为测试参数是一个繁杂的过程,有很多种组合方式,而且每个参数输入框都要求输入一遍,但是好在参数输入框的规则都是一样的,比如不能输入符号,字母,负数,小数,空格等等,除此之外还有范围限制,于是我就采用数据驱动测试的方法来做这个脚本。先写好输入参数的过程:
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的显示如下:
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)
Dialog("App(1.0.1.0)").WinButton("应用参数").Click ' 点击开始应用参数
我设置了2种参数范围边界的数据,9种服务端会拒绝应用的参数组合,30种客户端限制的参数类型组合。
第四步,对测试结果进行判断并显示在QTP生成的测试报告中:
开始我是这么写的:
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种情况都会失败。
于是,我再写成这样的:
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有没有把测试人员要求的结果描述统一到一个页面来的功能呢,有待挖掘。