注:做测试也有好一段时间了,在整理测试工具的使用资料时,想通过比较生动有趣的方式来描述相关工具的概念、用法。下文就是针对自动化功能测试工具QTP(Quick Test Professional)的特点来写的,拟作为此工具的入门教程的……入门教程。
但问题是:
1、测试耗时很长(关系到成本);
2、测试过程很单调,就是放入弹药(输入),看它会用哪种发射器去发射(输出),如此重复相当多次,并且不用查看中间的工作过程,(即黑盒测试,根据输入检查输出是否符合要求);
3、此机批量生产后每台都要做完全相同的测试,如果有测试模板,那就省力又省心,一个模板顶过去十个(可重复测试)……
而孔明日理万机,故无暇顾及此机,然则何人来测?发愁之际,吏部调一人前来助测。此人名叫齐铁炮,英文名是QTP,他不懂汉语,只会VBscript,最擅模仿,最听话,动作神速,能工作数月而不知疲倦。那不就是传说中的变形金刚?不,因为他的缺点是智商为零,非常死板,不知变通。
根据这些特点,孔明这样安排他工作:
1.录脚本:
孔明先以石头为例做一遍测试过程给QTP看,然后QTP把孔明的动作都逐一记在本子上(即脚本),再依照脚本来做就完全重现了孔明的测试过程。
2.插入检查点:
然后孔明又告诉他如何(根据预设的期望值)判断功能是否正确:对于放入的石头,按发射按钮后,如果输出端可见一投石器升起并投掷此石,则表示该功能通过。QTP也把它记下来并也成功照做。
3.参数化
“好,灰常好,QTP,现在你改用箭去测试。”
“可是丞相,我记下的脚本中只有‘……打开弹药舱,放入石头……’,并没有关于如何使用‘箭’的内容,你要做一遍给我看或者明确告诉我When,Where and How去用它,不然我无从下手。”
孔明一听吐血,这QTP还真不愧是笨蛋,要是每种输入的弹药都要做一遍那还不如自己测试,于是他决定在QTP原有的脚本上修改,用参数表记下所有可用弹药,在‘放入石头’的‘石头’处改用此参数表,告诉QTP每次到这一步时就取表中的下一种弹药来测,在检查点中也改用对应期望值参数表来判断结果。这下QTP才能按孔明的意愿顺利测试下去。
名称:发射,
颜色:红色,
密度: 3000g/m3,
材料:聚乙烯,
重量: 100g,
位置:左边顶部
……
“丞相,我这样做是有好处的,如果根据指定的属性无法确定对象,我还有个特技,我可以用其它属性来进行智能识别。”
“就你那智商还智能识别……”
为了节省资源,孔明令QTP不要记录对象属性到对象库,改为直接在脚本中描述对象,比如对刚才那个按钮,只需描述类型和名称就可以找到它了。
自动化测试(增强):
孔明希望这个测试尽快完成,以便“拿你命300”可以及早投入使用,于是令QTP一旦遇到无法解决的问题或者完成测试后立刻向他报告,方式可以是用发短信、语音通话、发邮件、即时通讯工具、飞鸽传书等。因为有一次孔明不在测试现场,QTP在一炷香后还确定不了要按哪个按钮,就写了一张便条放在孔明办公桌上,其内容是:
那时孔明刚出祁山……
但问题是:
1、测试耗时很长(关系到成本);
2、测试过程很单调,就是放入弹药(输入),看它会用哪种发射器去发射(输出),如此重复相当多次,并且不用查看中间的工作过程,(即黑盒测试,根据输入检查输出是否符合要求);
3、此机批量生产后每台都要做完全相同的测试,如果有测试模板,那就省力又省心,一个模板顶过去十个(可重复测试)……
而孔明日理万机,故无暇顾及此机,然则何人来测?发愁之际,吏部调一人前来助测。此人名叫齐铁炮,英文名是QTP,他不懂汉语,只会VBscript,最擅模仿,最听话,动作神速,能工作数月而不知疲倦。那不就是传说中的变形金刚?不,因为他的缺点是智商为零,非常死板,不知变通。
根据这些特点,孔明这样安排他工作:
1.录脚本:
孔明先以石头为例做一遍测试过程给QTP看,然后QTP把孔明的动作都逐一记在本子上(即脚本),再依照脚本来做就完全重现了孔明的测试过程。
2.插入检查点:
然后孔明又告诉他如何(根据预设的期望值)判断功能是否正确:对于放入的石头,按发射按钮后,如果输出端可见一投石器升起并投掷此石,则表示该功能通过。QTP也把它记下来并也成功照做。
3.参数化
“好,灰常好,QTP,现在你改用箭去测试。”
“可是丞相,我记下的脚本中只有‘……打开弹药舱,放入石头……’,并没有关于如何使用‘箭’的内容,你要做一遍给我看或者明确告诉我When,Where and How去用它,不然我无从下手。”
孔明一听吐血,这QTP还真不愧是笨蛋,要是每种输入的弹药都要做一遍那还不如自己测试,于是他决定在QTP原有的脚本上修改,用参数表记下所有可用弹药,在‘放入石头’的‘石头’处改用此参数表,告诉QTP每次到这一步时就取表中的下一种弹药来测,在检查点中也改用对应期望值参数表来判断结果。这下QTP才能按孔明的意愿顺利测试下去。
另外:
孔明发现,QTP在记录脚本时要用掉很多本子,仔细一看,这些本子叫“对象库”,他把有关对象的很多属性都记到里面了。比如某个按钮的属性为:
名称:发射,
颜色:红色,
密度: 3000g/m3,
材料:聚乙烯,
重量: 100g,
位置:左边顶部
……
为的是在测试时根据这些属性来确定对象。可是用于确定对象的属性一般只要特定的两三个就够了(像刚才那个按钮只要用“类型:按钮,名称:发射”就足以标识它),其它属性变得多余且占空间。
“丞相,我这样做是有好处的,如果根据指定的属性无法确定对象,我还有个特技,我可以用其它属性来进行智能识别。”
“就你那智商还智能识别……”
为了节省资源,孔明令QTP不要记录对象属性到对象库,改为直接在脚本中描述对象,比如对刚才那个按钮,只需描述类型和名称就可以找到它了。
自动化测试(增强):
孔明希望这个测试尽快完成,以便“拿你命300”可以及早投入使用,于是令QTP一旦遇到无法解决的问题或者完成测试后立刻向他报告,方式可以是用发短信、语音通话、发邮件、即时通讯工具、飞鸽传书等。因为有一次孔明不在测试现场,QTP在一炷香后还确定不了要按哪个按钮,就写了一张便条放在孔明办公桌上,其内容是:
无法找到“锁定目标”按钮所在的控制面板,应如何处理?你有几个选择:
A、别测了,先吃饭去 B、不管它,往下测 C、你来调试 D、去掉两个不推荐的选项 E、向现场将士求助。
那时孔明刚出祁山……
后来孔明又对此机增加了一个功能:如果放入玉米、地瓜之类的食物,输出来的就是烤熟的了,这样就解决了士兵作战时的吃饭问题。如果也测试这个功能应该怎么改脚本?很容易想到:在“放入石头”的参数表中增加食物,在后面检查点中增加相应期望结果即可。改好脚本后QTP运行,可这一次投石器却把玉米抛了过去,给敌人送了粮食,bug,终于出现了……
当然有姐妹篇:驾驭LoadRunner