Winrunner中的脚本和函数调用
Winrunner与Robot的不同之处在于,每个脚本都不是由函数或Sub来分隔的,也就是说,脚本是由从头到尾的记录操作生成的语句,没有头和尾的具体划分。脚本和函数的调用方法与机器人有很大不同。
机器人对脚本的调用或者是调用。一个是不需要传递参数的调用,这纯粹是脚本调优,另一个是对脚本中的函数或子函数的调用,它可以传递参数(请参见我写的关于机器人函数调用的文章了解详细信息)。在Winrunner中如何调用脚本和函数?让我详细解释一下WR8.2中调用的方法
脚本模块化是一个应该始终坚持的方向。在WR8.2中,我还希望建立一个主脚本和几个子脚本。但是,我们将涉及以下几种不同的调用方法:
1.只需调用另一个脚本,不传递参数,需要一个脚本的返回值
2.调用另一个脚本,传递参数并要求多个脚本返回值
3.调用另一个脚本中的函数需要多个函数返回值
4.调用另一个脚本,将参数传递给脚本,根据参数判断执行脚本中的函数,需要函数的返回值
举一个最简单的例子来演示不同的情况。
在第一种情况下,只调用另一个脚本,不传递任何参数。
创建一个新的主脚本:main,加载图形用户界面文件并打开记事本程序:
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
关闭所有();如果(图形用户界面_加载("。\ \记事本. gui ")!=0){report_msg("gui加载错误");}否则{report_msg("gui加载正常");}
if(invoke _ application(" c:\ \ windows \ \ system32 \ \ notepad . exe ","","",SW_SHOW)!=0){report_msg("记事本错误");}其他{report_msg("记事本确定");}
re1 =呼叫”。\ \ notepad input "();
#记住调用函数的句型,并在相对路径下给出子脚本的名称。不需要在括号中传递参数。re1将获得script notepadinput的返回值。如果你不想得到返回值,就用call。
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
创建一个新的子脚本:记事本输入,将输入记录到记事本:
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
Set_window(“无标题记事本”,1);编辑_设置_插入_位置(“编辑”,0,0);obj_type(“编辑”、“123”);obj_type(“编辑”,“& lt克雷蒂安>);编辑文本(“编辑”,文本);treturn文本;
#脚本的返回语句是treturn
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
可以看出,上面的例子是最简单的一种调用。子脚本都是通过记录生成的语句(没有开始和结束的描述,请与机器人比较)。最后一个treturn语句是脚本的返回值。
第二种情况是调用另一个脚本,传递参数并要求多个脚本返回值
脚本的参数传递和返回需要在脚本属性中设置。具体操作是创建一个新的子脚本记事本输入,并在文件->测试属性的弹出提示框中选择参数选项卡。在这里,您可以在这个脚本中设置传入和传出参数。我们在“输入参数”中创建了两个新参数:notepadinput1和notepadinput2(最好的描述),并在“输出参数”中创建了两个新参数:result1和result2。保存设置并将其推出,然后开始编辑主脚本主脚本和子脚本便笺输入。
主脚本:主
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
关闭所有();如果(图形用户界面_加载("。\ \记事本. gui ")!=0){report_msg("gui加载错误");}否则{report_msg("gui加载正常");}
if(invoke _ application(" c:\ \ windows \ \ system32 \ \ notepad . exe ","","",SW_SHOW)!=0){report_msg("记事本错误");}其他{report_msg("记事本确定");}
re1 =呼叫”。\ \ notepaddinputcrpt "(1,2,result1,result 2);#一定要在这里写结果1,结果2
暂停(结果1);暂停(结果2);
#和第一种情况的区别在于call语句需要传递参数。括号中的1和2分别对应于记事本输入脚本设置中两个新创建的输入参数:记事本输入1和记事本输入2。下面的弹出框显示了便笺式输入中的两个输出参数:结果1和结果2。
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
接下来,让我们看看子脚本记事本input如何处理传入和返回的参数:
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
Set_window(“无标题记事本”,1);编辑_设置_插入_位置(“编辑”,0,0);obj_type(“编辑”,便笺输入1);obj_type(“编辑”,便笺输入2);编辑文本(“编辑”,文本);结果1 =文本;结果2 =结果1+1;treturn结果2+1;
#obj_type函数的输入部分被脚本的传入参数直接替换。通过编辑获取文本函数获得的内容被分配给脚本的输出参数。最后,脚本还可以使用treturn语句返回脚本的返回值。
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
执行脚本后,您可以看到notepadinput1=1,notepadinput2=2,text=12,result1=12,result2=13。脚本的返回值被分配给re1=14。
从这个例子中可以看出,如果我们想要传递给脚本并获得多个参数,我们可以使用脚本属性中的参数设置来实现这一点,而不必像机器人一样在脚本中进行函数或子声明(机器人在调用脚本的calls crpt和pt时不能有参数)。这是WR脚本调用的好处之一。
第三种情况:调用另一个脚本中的函数需要多个函数返回值
该脚本不仅可以记录操作,还可以编写函数。如果您想要创建一个新的子脚本函数,您需要在脚本属性中将测试类型设置为编译模块(测试中不会报告任何设置或错误)。您不需要设置传入和传出参数。在函数中写入以下函数:
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
函数notepad1有三种类型的参数(inpotepad输入、outresult1、outresult2) #函数:in是传入参数,out是传出参数,inout是传入和传出参数{ static text#记住,文本需要在这里声明,因为下面的edit_get_text函数使用这个参数,但是在这个函数中没有#无标题记事本set_window(“无标题记事本”,1);编辑_设置_插入_位置(“编辑”,0,0);obj_type(“编辑”,记事本输入);编辑文本(“编辑”,文本);结果1 =文本+1;结果2 =文本+2;
}
函数notepad2(在notepadinput中){静态文本;
#无标题-记事本设置_窗口(“无标题-记事本”,3);编辑_设置_插入_位置(“编辑”,0,0);obj_type(“编辑”,记事本输入);编辑文本(“编辑”,文本);返回文本;#return是函数中的返回值
} # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
主脚本main中也需要一些更改:
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
关闭所有();如果(图形用户界面_加载("。\ \记事本. gui ")!=0){report_msg("gui加载错误");}否则{report_msg("gui加载正常");}
if(invoke _ application(" c:\ \ windows \ \ system32 \ \ notepad . exe ","","",SW_SHOW)!=0){report_msg("记事本错误");}其他{report_msg("记事本确定");}加载("。\ \功能”);#这是加载编译模块。加载后,编译模块中的函数可以直接在主脚本中使用。
re1 =便笺1(15,result1,result 2);#直接使用函数中的函数注释1 1、15作为传入参数,结果1和结果2作为传出参数。re2 =结果1;re3 =结果2;re4 =记事本2(8);#在函数中使用便笺2函数
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
执行脚本以获得正确的值,注意在使用函数时必须写入函数的所有参数,无论它是传入还是传出。例如,如果没有写出输出参数,在主脚本中只有re1 =记事本(15);re2 =结果1;re3 =结果2;结果1和结果2不能在主脚本中获取值(它们可以在函数子脚本中有值)。记住!!
第四种情况:调用另一个脚本,将参数传递给这个脚本,并根据参数判断执行脚本中的函数,这需要函数的返回值
这种情况更复杂,使用脚本参数和函数参数。结合上述方法,我们首先建立一个子脚本,notepadinput,并在脚本属性中设置两个输入参数:mode(用于判断脚本中哪个函数被执行)和记事本input(用于将参数传递给脚本中的函数)。书面声明如下:
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
函数记事本1 (Innotepadinput) #第一个函数,记事本输入是输入参数{静态文本;#无标题-记事本集_窗口(“无标题-记事本”,1);编辑_设置_插入_位置(“编辑”,0,0);obj_type(“编辑”,记事本输入);编辑文本(“编辑”,文本);
返回文本;#第一个函数的函数返回值
}
功能记事本2 (Innotepadinput) #第二个功能,记事本输入是输入参数{静态文本;
#无标题-记事本设置_窗口(“无标题-记事本”,3);编辑_设置_插入_位置(“编辑”,0,0);obj_type(“编辑”,记事本输入);编辑文本(“编辑”,文本);
返回文本;#第二个函数的函数返回值
}
Switch(mode)#mode是由脚本定义的传入参数,用于确定运行哪个函数{case0: {re =记事本1(记事本输入);#函数,您可以直接使用treturre#将函数的返回值作为脚本返回值分隔符;#跳出开关}情况1:{ re = not pad 2(not pad input);treturn re休息;}}
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
主脚本main修改如下:
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
关闭所有();如果(图形用户界面_加载("。\ \记事本. gui ")!=0){report_msg("gui加载错误");}否则{report_msg("gui加载正常");}
if(invoke _ application(" c:\ \ windows \ \ system32 \ \ notepad . exe ","","",SW_SHOW)!=0){report_msg("记事本错误");}其他{report_msg("记事本确定");}re1 =呼叫”。\\notepadinput"("8 ",0);#调用脚本,通过记事本输入和模式,该调用将执行子脚本的第一个函数暂停(re1);#re1获取子脚本的脚本返回值,即t return的值
re2 =呼叫”。\\notepadinput"("5 ",1);#调用脚本,传递参数并执行第二个函数暂停(re2);