使用RF有一段时间了,一些问题待明确,算是稍微深入一点的研究吧,有错误的欢迎指正哦/:
1.RobotFramework是什么? (ps: 说起这个主要是曾经面试被问到过一时短路想不起来><
■ 关键字驱动的自动化测试框架(关键字可自己写)
■ 基于python,支持各类python库
■ 输入:测试用例.txt .robot格式存储
■ 输出:测试执行报告、日志(HTML格式)
■ 灵活易于扩展,适用于有不同接口的复杂软件:命令行、用户接口、web服务接口等
■ 提供远程测试执行接口,可以进行分布式测试执行(如和jenkins搭配使用)
2.关键字驱动?
■ 数据驱动:从数据文件中读取输入的测试数据,用便来给你作为测试脚本的输入--数据和测试脚本分离开;
■ 关键字驱动:从面向对象出发,相同的逻辑被分为一个类/函数,被不同的测试脚本调用,这个类/函数就是关键字;
3.在RF中,什么可以作为关键字?
■引入的library中的api,比如RF默认可调用python库,sleep即可作为一个关键字
■自写的api可作为关键字,即使其作为库被引入(如下图,‘开始’方法的原型在source.txt中,在图2中被调用)
4.关键字驱动的测试框架组成?运行原理?
■组成:核心数据驱动引擎、成员函数库、测试表、映射表;
比如,现在要实现一个测试套,完成通过AppiumLibrary库,启动安装在Android手机上的指定apk,并检查页面元素,要如何实现?通过此实例来理解关键字驱动的框架:
//case.txt如下:
//sourse.txt如下:
RF的目录结构是:directory->test suit->case,图1展示的是一个case中的一条用例;
■映射表:如图,最后检查元素时,如何确定com.yoosal.kanku:id/txt_title能和页面元素匹配上呢?这里是利用AppiumLibrary来将元素id和页面元素匹配上的,故,可以理解为,映射表提供了对象识别的仓库;
■测试表:图2是一张低层的测试表,图1可理解为中层的测试表,如果在case之上还有test suit目录,那么其就是高层测试表;低层测试表指定了测试的每一步指令语句,这些指令都是直接作用在界面对象上的,是无法再细化的指令,比如‘结束’指定的指令就是Close Application,这条指令无法再细化了;中层测试表把低层表组装起来执行任务,形成测试用例;高层测试表把中层表组装起来,利用循环完成不同的中层测试,形成测试集。
■核心数据驱动引擎:对应测试表,核心数据驱动引擎相应地分成高层、中层、低层驱动器。高层驱动循环读取高层表的每条记录,遇到中间表的关键字,就把这个表传递给中层驱动器,依次类推直至到达低层表,低层驱动器来完成最后的执行。
■成员函数库:顾名思义,像是sleep、或者是自己写的一些api,一起组成了一个底部函数库,供不同对象调用。
5.每一条用例都可设置:tags,timeout,template,这些字段怎么用的?
■Tags:标记某个测试用例,在Run区中Only Run Tests with these Tags和Skip Tests with these Tags,会通过这个标志位来识别是否运行或跳过用例。
■Timeout:设置每一个测试案例的超时时间,只要超过这个时间就会失败,并停止案例运行。这是防止某些情况导致案例一直卡住不动,也不停止也不失败。
■Template:测试模版,可以指定某个关键字为这个测试套件下所有TestCase的模版,这样所有的TestCase就只需要设置这个关键字的传入参数即可。
6.RF中的变量作用域有哪些?
■变量赋值(set赋值):¥{logfile} set variable c:\log
■变量作用域(通常情况下,每个变量默认都是局部变量)
临时变量: ¥{logfile} set variable c:\log 只在当前作用域生效
1.Set Global Variable ——设定全局级变量,作用域是全局;
2.Set Suite Variable ——设定suite级变量,作用域是suite内部;
3.Set Test Variable ——设定case级变量,作用域是case内部;