实验三、脚本编辑和正反例详细设计过程和回放实验
实验内容导航
1.实验步骤
2.实验需求
3.实验目标
4.实验理论
5.操作步骤
6.实验报告模板
7.实验课尾交流
实验步骤
1.理解脚本录制的原理
2.熟悉需要测试的功能的需求
3.认真分析实验需求
4.独立完成实验任务
5.认真填写实验报告,并细致分析与总结本次实验
实验需求
1.成功搭建被测系统crm客户管理平台;
2.成功安装AutoRunner功能自动化测试工具,可以录制回放脚本
3.使用IE浏览器,并且版本不超过IE9
实验目标
1.初步了解功能自动化测试工具的使用
2.掌握录制和回放的基本操作
3.熟悉脚本编辑区域的脚本信息
4.掌握报告结果的分析
实验理论
实验理论:自动化测试工程实际就是一个工具模拟人工的过程,这个过程可以
细分成俩个独立又相互关联的阶段,首先是用自动化测试工具模拟记录人工的
操作过程形成测试脚本,第二个阶段是自动化测试工具根据及录下的人工的操
作步骤和后期设计的输入参数,自动循环往复执行重复的操作,对被测系统进
行全方位立体式的测试,以期找出系统的所有缺陷。
实验操作步骤:
在上一个实验的基础上我们对测试思路进行进一步处理,我们在上一个实验里
面做的参数化都是设计的正确的“name”和正确的“password”,那么还有用户名
错误;密码错误的情况我们没有考虑进来,下面我们就要考虑这个问题,因为
在实际项目里面我们的测试不是单纯地用正确的数据去验证功能的正确性,也
要测试在输入的数据有误的情况下系统是否能返回错误的提示信息,并且按照
系统的提示正确地处理提示信息使得crm客户管理系统能恢复正常运行,在以
上脚本的基础上我们先对用户名不存在的情况进行分析:输入一个错误的用户
名:tes,正确的密码:test,点击登录。
Crm客户管理系统提示用户名不存在,这个时候我们点击提示框中的确定按钮
,则系统可以回到初始的登录页面,这样的话符合我们对系统后续测试的需要
(重复登录系统)。在作自动化测试的时候我们由以上的分析可知完全可以正
常实施,在实施之前我们要考虑一个问题,那就是提示框信息如何录制,在已
经录制好的正确登录的脚本的什么位置开始录制?我们知道登录的时候输入用
户名和密码点击登录按钮之后才会有登录成功后的页面跳转或者输入错误的用
户名正确的密码后点击登录才会有提示框出现,那么我们接下来录制提示框信
息一定是在点击登录按钮之后,那么我们在点击登录按钮的脚本后面空出一行
开始录制提示信息:
注意:在点击录制按钮之后,把全新录制的勾选去掉之后再点击确定开始录制
,因为我们希望之前录制的脚本仍然存在,我们要做的是在原有的脚本基础上
把提示信息补录进来:
然后我们开始录制脚本,首先是记录提示框:注意这个时候我们把鼠标定位到
提示框内的空白区域,然后点击鼠标左键就可以记录脚本了。
接下来我们考虑,提示框中的提示信息:“用户名不存在!”,这个信息刚好可以
作为同类型用例的执行结果,也就是我们在测试里面所说的实际结果。但是我
们仔细观察发现它既不是输入框也不是按钮,它是属于一类特殊对象,我们直
接点击鼠标左键发现记录不到该对象,这种特殊对象的记录需要用到强制抓取
的方法。具体的做法是:将光标悬停在该对象上,同时按住鼠标上的ctrl和alt键
,轻轻挪动一下鼠标,直到该对象上出现红框,该对象就被记录下来了。
然后点击提示框中的确定按钮,使得crm客户管理系统回到初始的登录页面:
然后结束录制回到脚本编辑区:
将注释部分的脚本全部删除处理,留下记录消息框和点击确定按钮的脚本:
再对脚本进行编辑,这个是登录过程中的第二种情况,用户名不存在;我们写
下判断,这里我们可以判断window(“#32770_来自网页的消息”)这个窗口存不存
在,如果存在则点击提示框中的确定按钮,编辑后的脚本如下:
下面按照对用户名不存在的分析和操作,我们对密码错误的情况进行脚本的录
制和编辑,首先我们输入正确的用户名:test,错误的密码:tes,然后点击登
录:
脚本录制编辑,在用户名不存在情况的脚本后面录制:
取消全新录制的勾选后点击确定开始录制:
点击密码错误消息框的空白区域,强抓密码错误特殊对象:
点击确定按钮,使得crm客户管理系统退回到初始登录页面:
结束录制,然后删除脚本中的注释部分:
接下来对脚本进行编辑:
接下来我们把登录成功的情况进行下改造:
判断的情况是判断对象存不存在我们编辑下脚本:
接下来我们把参数表部分的数据修改一下,把用户名不存在,和密码错误的数
据添加进来,用数据驱动测试脚本,执行测试过程。
完整的脚本如下:
for(ParameterData pd : ar.getParameterDataList("login.xls")/*.subList(0, 2)*/)
{
//ar.parameterData = pd;//ar.parameterData可用于脚本之间传递参数
ar.window("IEFrame_上海泽众软件科技有限公司客户管理系统 - Windows Internet Explorer").setValue("INPUT_text_username", ""+pd.getFrom("name"));
ar.window("IEFrame_上海泽众软件科技有限公司客户管理系统 - Windows Internet Explorer").setValue("INPUT_password_password", ""+pd.getFrom("pwd"));
ar.window("IEFrame_上海泽众软件科技有限公司客户管理系统 - Windows Internet Explorer").clickControl("INPUT_submit_登 录", 41, 16, "left");
if(ar.windowExist("#32770_来自网页的消息")){
ar.window("#32770_来自网页的消息").clickControl("Button_确定", 43, 12, "left");
}else if(ar.windowExist("#32770_来自网页的消息_2")){
ar.window("#32770_来自网页的消息_2").clickControl("Button_确定_2", 40, 6, "left");
}else if(ar.window("IEFrame_上海泽众软件科技有限公司客户管理系统 - Windows Internet Explorer_2").controlExist("TD")){
System.out.println("登录成功!");
ar.window("IEFrame_上海泽众软件科技有限公司客户管理系统 - Windows Internet Explorer").clickControl("A_退出系统", 30, 5, "left");
}
}
下面我们点击执行按钮,执行脚本:
执行日志信息:
脚本详细:
行号 | 脚本内容 |
1 | for(ParameterData pd : ar.getParameterDataList("login.xls")/*.subList(0, 2)*/) |
2 | { |
3 | //ar.parameterData = pd;//ar.parameterData可用于脚本之间传递参数 |
4 | ar.window("IEFrame_上海泽众软件科技有限公司客户管理系统 - Windows Internet Explorer").setValue("INPUT_text_username", ""+pd.getFrom("name")); |
5 | ar.window("IEFrame_上海泽众软件科技有限公司客户管理系统 - Windows Internet Explorer").setValue("INPUT_password_password", ""+pd.getFrom("pwd")); |
6 | ar.window("IEFrame_上海泽众软件科技有限公司客户管理系统 - Windows Internet Explorer").clickControl("INPUT_submit_登 录", 41, 16, "left"); |
7 | if(ar.windowExist("#32770_来自网页的消息")){ |
8 | ar.window("#32770_来自网页的消息").clickControl("Button_确定", 43, 12, "left"); |
9 | }else if(ar.windowExist("#32770_来自网页的消息_2")){ |
10 | ar.window("#32770_来自网页的消息_2").clickControl("Button_确定_2", 40, 6, "left"); |
11 | }else if(ar.window("IEFrame_上海泽众软件科技有限公司客户管理系统 - Windows Internet Explorer_2").controlExist("TD")){ |
12 | System.out.println("登录成功!"); |
13 | ar.window("IEFrame_上海泽众软件科技有限公司客户管理系统 - Windows Internet Explorer").clickControl("A_退出系统", 30, 5, "left"); |
14 | } |
15 | } |
|
|
记录详细:
行号 | 对象 | 详细 | 结果 | 时间 | 备注 |
1 | login.xls | getParameterDataList | Successed | 2019-10-27 12:31:40 |
|
4 | IEFrame_上海泽众软件科技有限公司客户管理系统 - Windows Internet Explorer | window | Successed | 2019-10-27 12:31:40 |
|
4 | INPUT_text_username | setValue | Successed | 2019-10-27 12:31:41 |
|
5 | IEFrame_上海泽众软件科技有限公司客户管理系统 - Windows Internet Explorer | window | Successed | 2019-10-27 12:31:42 |
|
5 | INPUT_password_password | setValue | Successed | 2019-10-27 12:31:44 |
|
6 | IEFrame_上海泽众软件科技有限公司客户管理系统 - Windows Internet Explorer | window | Successed | 2019-10-27 12:31:45 |
|
6 | INPUT_submit_登 录 | clickControl | Successed | 2019-10-27 12:31:46 |
|
11 | IEFrame_上海泽众软件科技有限公司客户管理系统 - Windows Internet Explorer_2 | window | Successed | 2019-10-27 12:31:56 |
|
11 | TD | controlExist | Successed | 2019-10-27 12:31:57 |
|
13 | IEFrame_上海泽众软件科技有限公司客户管理系统 - Windows Internet Explorer | window | Successed | 2019-10-27 12:31:57 |
|
13 | A_退出系统 | clickControl | Successed | 2019-10-27 12:31:57 |
|
4 | IEFrame_上海泽众软件科技有限公司客户管理系统 - Windows Internet Explorer | window | Successed | 2019-10-27 12:31:58 |
|
4 | INPUT_text_username | setValue | Successed | 2019-10-27 12:31:59 |
|
5 | IEFrame_上海泽众软件科技有限公司客户管理系统 - Windows Internet Explorer | window | Successed | 2019-10-27 12:31:59 |
|
5 | INPUT_password_password | setValue | Successed | 2019-10-27 12:32:02 |
|
6 | IEFrame_上海泽众软件科技有限公司客户管理系统 - Windows Internet Explorer | window | Successed | 2019-10-27 12:32:03 |
|
6 | INPUT_submit_登 录 | clickControl | Successed | 2019-10-27 12:32:04 |
|
8 | #32770_来自网页的消息 | window | Successed | 2019-10-27 12:32:04 |
|
8 | Button_确定 | clickControl | Successed | 2019-10-27 12:32:04 |
|
4 | IEFrame_上海泽众软件科技有限公司客户管理系统 - Windows Internet Explorer | window | Successed | 2019-10-27 12:32:05 |
|
4 | INPUT_text_username | setValue | Successed | 2019-10-27 12:32:06 |
|
5 | IEFrame_上海泽众软件科技有限公司客户管理系统 - Windows Internet Explorer | window | Successed | 2019-10-27 12:32:06 |
|
5 | INPUT_password_password | setValue | Successed | 2019-10-27 12:32:09 |
|
6 | IEFrame_上海泽众软件科技有限公司客户管理系统 - Windows Internet Explorer | window | Successed | 2019-10-27 12:32:09 |
|
6 | INPUT_submit_登 录 | clickControl | Successed | 2019-10-27 12:32:10 |
|
10 | #32770_来自网页的消息_2 | window | Successed | 2019-10-27 12:32:16 |
|
10 | Button_确定_2 | clickControl | Successed | 2019-10-27 12:32:16 |
|
|
|
|
|
|
|
结果总结:
名称 | 值 |
脚本名称: | login.bsh |
录像文件: |
|
开始执行时间: | 2019-10-27 12:31:39 |
执行结束时间: | 2019-10-27 12:32:16 |
执行耗时(秒): | 37 |
脚本执行结果: | 执行成功! |
脚本执行结果:
从脚本的执行结果来看,知识把登录成功的情况打印到了输出,我们希望把三
种情况的执行结果都打印出来方便统计。
接下来我们处理脚本,使得用户名不存在和密码错误的情况下的结果也能打印
到输出:
首先我们要在点击之前去添加获取“用户名不存在!”对象的name属性:
我们之前抢抓下来的对象“用户名不存在!”的name属性值,这个值好就是“用户
名不存在!”,我们可以在对象库里面去查看:
添加过程:
生成的脚本如下:
这里生成的是校验属性的脚本命令,我们要将它改造一下,改成获取属性值的脚本语句:
ar.window("#32770_来自网页的消息").getProperty("Static_用户名不存在!", "name");
接下来我们定义一个变量str1,将获取到的name属性值保存起来,然后打印出来:
Srting str1 = ar.window("#32770_来自网页的消息").getProperty("Static_用户名不存在!", "name");
System.out.println(str1);
密码错误的情况也类似:
String str2 = ar.window("#32770_来自网页的消息_2").checkProperty("Static_密码错误!", "name");
System.out.println(str2);
完整的脚本如下:
for(ParameterData pd : ar.getParameterDataList("login.xls")/*.subList(0, 2)*/)
{
//ar.parameterData = pd;//ar.parameterData可用于脚本之间传递参数
ar.window("IEFrame_上海泽众软件科技有限公司客户管理系统 - Windows Internet Explorer").setValue("INPUT_text_username", ""+pd.getFrom("name"));
ar.window("IEFrame_上海泽众软件科技有限公司客户管理系统 - Windows Internet Explorer").setValue("INPUT_password_password", ""+pd.getFrom("pwd"));
ar.window("IEFrame_上海泽众软件科技有限公司客户管理系统 - Windows Internet Explorer").clickControl("INPUT_submit_登 录", 41, 16, "left");
if(ar.windowExist("#32770_来自网页的消息")){
String str1 = ar.window("#32770_来自网页的消息").getProperty("Static_用户名不存在!", "name");
System.out.println(str1);
ar.window("#32770_来自网页的消息").clickControl("Button_确定", 43, 12, "left");
}else if(ar.windowExist("#32770_来自网页的消息_2")){
String str2 = ar.window("#32770_来自网页的消息_2").getProperty("Static_密码错误!", "name");
System.out.println(str2);
ar.window("#32770_来自网页的消息_2").clickControl("Button_确定_2", 40, 6, "left");
}else if(ar.window("IEFrame_上海泽众软件科技有限公司客户管理系统 - Windows Internet Explorer_2").controlExist("TD")){
System.out.println("登录成功!");
ar.window("IEFrame_上海泽众软件科技有限公司客户管理系统 - Windows Internet Explorer").clickControl("A_退出系统", 30, 5, "left");
}
}
下面我们来执行下脚本:
执行日志:
脚本详细:
行号 | 脚本内容 |
1 | for(ParameterData pd : ar.getParameterDataList("login.xls")/*.subList(0, 2)*/) |
2 | { |
3 | //ar.parameterData = pd;//ar.parameterData可用于脚本之间传递参数 |
4 | ar.window("IEFrame_上海泽众软件科技有限公司客户管理系统 - Windows Internet Explorer").setValue("INPUT_text_username", ""+pd.getFrom("name")); |
5 | ar.window("IEFrame_上海泽众软件科技有限公司客户管理系统 - Windows Internet Explorer").setValue("INPUT_password_password", ""+pd.getFrom("pwd")); |
6 | ar.window("IEFrame_上海泽众软件科技有限公司客户管理系统 - Windows Internet Explorer").clickControl("INPUT_submit_登 录", 41, 16, "left"); |
7 | if(ar.windowExist("#32770_来自网页的消息")){ |
8 | String str1 = ar.window("#32770_来自网页的消息").getProperty("Static_用户名不存在!", "name"); |
9 | System.out.println(str1); |
10 | ar.window("#32770_来自网页的消息").clickControl("Button_确定", 43, 12, "left"); |
11 | }else if(ar.windowExist("#32770_来自网页的消息_2")){ |
12 | String str2 = ar.window("#32770_来自网页的消息_2").getProperty("Static_密码错误!", "name"); |
13 | System.out.println(str2); |
14 | ar.window("#32770_来自网页的消息_2").clickControl("Button_确定_2", 40, 6, "left"); |
15 | }else if(ar.window("IEFrame_上海泽众软件科技有限公司客户管理系统 - Windows Internet Explorer_2").controlExist("TD")){ |
16 | System.out.println("登录成功!"); |
17 | ar.window("IEFrame_上海泽众软件科技有限公司客户管理系统 - Windows Internet Explorer").clickControl("A_退出系统", 30, 5, "left"); |
18 | } |
19 | } |
|
|
记录详细:
行号 | 对象 | 详细 | 结果 | 时间 | 备注 |
1 | login.xls | getParameterDataList | Successed | 2019-10-27 13:27:07 |
|
4 | IEFrame_上海泽众软件科技有限公司客户管理系统 - Windows Internet Explorer | window | Successed | 2019-10-27 13:27:12 |
|
4 | INPUT_text_username | setValue | Successed | 2019-10-27 13:27:12 |
|
5 | IEFrame_上海泽众软件科技有限公司客户管理系统 - Windows Internet Explorer | window | Successed | 2019-10-27 13:27:13 |
|
5 | INPUT_password_password | setValue | Successed | 2019-10-27 13:27:16 |
|
6 | IEFrame_上海泽众软件科技有限公司客户管理系统 - Windows Internet Explorer | window | Successed | 2019-10-27 13:27:16 |
|
6 | INPUT_submit_登 录 | clickControl | Successed | 2019-10-27 13:27:17 |
|
15 | IEFrame_上海泽众软件科技有限公司客户管理系统 - Windows Internet Explorer_2 | window | Successed | 2019-10-27 13:27:28 |
|
15 | TD | controlExist | Successed | 2019-10-27 13:27:28 |
|
17 | IEFrame_上海泽众软件科技有限公司客户管理系统 - Windows Internet Explorer | window | Successed | 2019-10-27 13:27:28 |
|
17 | A_退出系统 | clickControl | Successed | 2019-10-27 13:27:29 |
|
4 | IEFrame_上海泽众软件科技有限公司客户管理系统 - Windows Internet Explorer | window | Successed | 2019-10-27 13:27:30 |
|
4 | INPUT_text_username | setValue | Successed | 2019-10-27 13:27:30 |
|
5 | IEFrame_上海泽众软件科技有限公司客户管理系统 - Windows Internet Explorer | window | Successed | 2019-10-27 13:27:31 |
|
5 | INPUT_password_password | setValue | Successed | 2019-10-27 13:27:34 |
|
6 | IEFrame_上海泽众软件科技有限公司客户管理系统 - Windows Internet Explorer | window | Successed | 2019-10-27 13:27:34 |
|
6 | INPUT_submit_登 录 | clickControl | Successed | 2019-10-27 13:27:35 |
|
8 | #32770_来自网页的消息 | window | Successed | 2019-10-27 13:27:36 |
|
8 | Static_用户名不存在! name | getProperty | 用户名不存在! | 2019-10-27 13:27:36 |
|
10 | #32770_来自网页的消息 | window | Successed | 2019-10-27 13:27:36 |
|
10 | Button_确定 | clickControl | Successed | 2019-10-27 13:27:36 |
|
4 | IEFrame_上海泽众软件科技有限公司客户管理系统 - Windows Internet Explorer | window | Successed | 2019-10-27 13:27:37 |
|
4 | INPUT_text_username | setValue | Successed | 2019-10-27 13:27:38 |
|
5 | IEFrame_上海泽众软件科技有限公司客户管理系统 - Windows Internet Explorer | window | Successed | 2019-10-27 13:27:38 |
|
5 | INPUT_password_password | setValue | Successed | 2019-10-27 13:27:41 |
|
6 | IEFrame_上海泽众软件科技有限公司客户管理系统 - Windows Internet Explorer | window | Successed | 2019-10-27 13:27:41 |
|
6 | INPUT_submit_登 录 | clickControl | Successed | 2019-10-27 13:27:42 |
|
12 | #32770_来自网页的消息_2 | window | Successed | 2019-10-27 13:27:48 |
|
12 | Static_密码错误! name | getProperty | 密码错误! | 2019-10-27 13:27:48 |
|
14 | #32770_来自网页的消息_2 | window | Successed | 2019-10-27 13:27:48 |
|
14 | Button_确定_2 | clickControl | Successed | 2019-10-27 13:27:49 |
|
|
|
|
|
|
|
结果总结:
名称 | 值 |
脚本名称: | login.bsh |
录像文件: |
|
开始执行时间: | 2019-10-27 13:27:05 |
执行结束时间: | 2019-10-27 13:27:49 |
执行耗时(秒): | 43 |
脚本执行结果: | 执行成功! |
脚本执行结果:
这样我们的脚本就完成了,整个登录模块的测试也就完成了。