资源描述
第五天知识
一、 外部函数:
级别:项目级:utility.vbs common.vbs(供所有项目)(框架设计师)
模块级:(供本项目所应用)Login.vbs Order.vbs(自动化测试工程师)
项目级只能由模块级调用
二、 自动化的步骤
1、 了解被测对象,熟悉项目中的模块或者是子模块的需求,手动运行模块或者子模块中的一批用例,和测试或开发工程师明确操作步骤和检查点
2、 做自动化需求分析,解决:
1) 找出逻辑的公共点
2) 这个任务究竟是数据驱动还是非数据驱动
3、 设计
针对公共函数做大部分项目公共的和本项目特有的提取
若是数据驱动,做数据表的设计
4、 新建一个test,构建action的父子关系,可以先创建mainAction,然后创建其他模块或者子模块的action作为它的孩子。使用对象库添加对象(不要漏对象)或者引用共享对象库文件。
5、 新建test,分别先将孩子的action的创建出来,然后使用一个新的test,使用copying或者existing进行拷贝或者关联,形成父子关系。使用对象库添加对象(不要漏对象)或者引用共享对象库文件。
6、 写脚本
三、 基于QTP的项目级应用自动化测试框架
自动化框架的时序关系:
1、 启动main.vbs
2、 加载外部函数lib
3、 QTP识别config.xml文件
4、 Main.test入口加载环境变量
5、 Main.test执行所有具有父子关系的Action
6、 在选择中,若用到共享对象或者datatable,在data目录中需要import。
7、 在执行过程中若有结果输出,需要export到data目录下
8、 运行完所有的Action,main.vbs会自动退出
利用开发需要改造的内容:
1、 从工作步骤上:
1) 熟悉需求(用例—模块—项目)
2) 需求分析(外部函数设计,datatable设计)
3) 创建父子关系(三层父子关系)
4) 针对每个Action是否有环境变量添加到config.xml文件中
5) Lib中的外部函数是否有添加
6) 是否有新的对象仓库在data目录下要进行关联到本Action中
7) Data目录下的datatable是否有设计,使用该框架必须要有datatable。注意output result,output
8) Action的启动方式可以是Main.vbs,也可以是QTP中的run
9) 开始写Action的主程序和用例过程
2、 从程序步骤上:相对于Action
主程序逻辑:
10) 将该Action的datatable从data目录下import进来,
11) 调用该Action的测试过程
12) 打扫整个测试现场
13) 将该Action的Datatable所对应的sheet要export到data目录下
写Action中调用的用例进程
1) 从起点到终点涉及到的窗口切换需要加判断,若失败则要调用writefail并提前exit sub,需要在用例检查点基础上,增加新的检查点(登录不成功则退出)
2) 启动被测程序可以在主程序中完成,也可以在过程中完成,若在主程序中完成,切忌在过程中关闭被测程序,在哪里启动在哪里关闭
3)
框架解决的问题:
1、 外部函数库加载
2、 测试结果定制输出
3、 环境变量加载
4、 对象仓库的迁移
四、 config
config用来保存环境变量
config必须是XML文件,文件的格式如下:
Variable是一个变量
入口函数:启动main.vbs,加载lib,然后通过lib将config.XML加载
五、 自动获取目录结构
runPath:获取当前目录路径
六、加载lib文件
将lib文件夹下的所有文件找到
七、构建动态数组,用来保存目录下的lib文件
八、往QTP中加载config和currentPath
九、写action对于环境变量,要把环境变量放到config.XML文件中,新增加的所有外部函数必须放到LIB函数中。
十、问题
1、使用框架后,testaction是如何应用框架中的环境变量
操作层面上:1)config。XML文件中增加一个需要的环境变量
2)在test父亲的中程序中调用函数库文件中的loadedenvironment文件
原理层面上:1)先让QTP文件知道config文件存在(在main。Vbs中完成)
2)将loadedenvironment调用进来(在main。Test中完成)
十一、DOM(document object model)
DOM是用来操作html语言的
十二、描述性编程
要创建Properties集合,可以使用以下语法输入Description.create语句:
Set MyDescription=Description.Create()
MyDescription(“对象属性名1”).value=对象属性值1
MyDescription(“对象属性名1”).value=对象属性值1
用途:对于类似对象非常多,属性值和数量无法预估,随着运行将会发生变化,可以采用描述性编程,用以解决创建临时对象的问题
1、 若resources和environment文件为空,需要使用Main。Vbs启动
2、 如果你不想使用main。Vbs来启动,还想继续暂时使用run来启动test:
1) 在resources中手工加载外部函数utility。Vbs
2) 在environment手工加载config和current path这两个环境变量
有多个action则对象跟具体的action关联
有一个action则对象跟test关联
如果使用对象仓库中的非对象方式添加对象,则先选择action,再使用+
如果使用共享添加对象,则只选中需要的action
第六天知识
一、操作Webtable
先定义描述性对象,然后遍历,在遍历过程中使用webtable的getcelldata获取字段内容
二、
解决的问题:将对象仓库关联到需要的action中,跨不同的机器获取不同的tsr对应不同的action
三、问题
1、 打开test在哪里:
2、 运行QTP在哪里:131
3、 定制result:118
4、 Main。Vbs中的loadenvironment相对QTP在做什么
在QTP中的environment中加config。Xml的路径
5、 外部函数加载是哪个方法:115
6、 Main test中的loadenvironment是做什么用的
调用config。Xml文件当外部文件载入到QTP中
在QTP中可以直接使用变量名获取变量名的值
7、 LoginAction利用该框架要做什么改造
1) config中xml文件中加环境变量
2) 有没有公共函数放到lib目录下的外部函数
3) 有没有新的Datatable放到data目录下的,有没有新的datatable加载到data目录下
4) 有没有新的对象仓库需要放到data目录下
8、 LoginAction写好后,如果不适用main。Vbs启动则怎么样以后再启动
在environment中加载config和currentPath
9、 用了该框架之后我们是否不用创建对象仓库文件了?
需要创建,不会建立action和tsr文件之间的关系
如果不主动关联,框架不能主动关联
四、内置数据库检查点
五、使用dom操作webtable
1、 创建表的临时对象:micclassàwebtable
2、 childobjects传描述性编程的临时对象,获取表集合
3、 表的个数:count()
4、 具体编号:使用编号去取
5、 求行:rowcount
6、 求列:columncount(i)
7、 获取某一单元:getcelldata(I,j)
表的实际内容从第二行开始
六、 描述性编程增加对象
七、 正则
正则用来解决什么问题:用来解决对象的不确定性问题,模糊匹配的问题
描述性编程用来解决临时对象不往仓库中放的问题,临时对象的创建问题
临时性对象不用放到对象仓库中
Childobject只能用描述性编程一:
Childobject(带着父亲一起传):可以用描述性编程,但是带着父亲一起传
也可以对象仓库中的测试对象一起传
八、
展开阅读全文