在产品验收测试过程中,产品功能趋于稳定状态,测试过程中所使用的测试用例很大程度上与此前的功能测试用例重复,为了更全面的覆盖软件功能,确保软件质量,验收测试的用例相对更丰富,执行的次数也更多。因此在验收测试的过程可以将重复性的测试工作自动化,从而提高测试的效率和质量。
Robot Framework是一款python编写的功能自动化测试框架。具备良好的可扩展性,支持关键字驱动,可以同时测试多种类型的客户端或者接口,可以进行分布式测试执行。主要适用于轮次很多的验收测试和验收测试驱动开发(ATDD)。Robot Framework是一款通用、应用性强、技术独立的框架,如下图所示采用高度模块化结构。
在简单、易编辑的表格中输入测试数据(Test Data),Robot Framework启动后就会处理测试数据,执行测试用例,然后生成测试日志和报告,核心框架不需要关心测试用例的目的,以及用例与测试库的交互处理过程。测试库可以直接使用应用程序接口或者使用更底层的工具作为驱动程序。
搭建Robot Framework环境的过程在此不做赘述,网上有很多教程。本文主要记录使用RIDE学习Robot Framework框架的过程。默认安装好Robot Framework并导入基本库Selenium2Library和DatabaseLibrary。
了解RIDE
RIDE类似于Robot Framework的用户控制面板,RIDE可以让初学者对Robot Framework框架有一个直观的了解。另外,得益于RIDE简单、直观的界面,初学者可以很快的上手。
RIDE界面可以简单分成两部分,左边是测试项目体系,右边包含Edit、Text Edit和Run三部分,主要负责是编辑、运行、调试测试用例。
创建项目
创建Project
点击“File--New Project”创建Project,可以自定义Project存放路径,选择Project类型和格式。当项目规模很小,功能单一时,Project类型可以选择File,直接在Project下面创建Test Case即可。如果Project规模较大,那么建议选择Directory类型,可以在Project下面创建不同的Suit。
创建Suit
右击创建好的Project,点击“New Suit”创建Suit。本质上来说,Project和Suit并没有区别,Suit类型也分为File和Directory,File类型的Suit下面可以直接创建Test Case,而Directory类型的Suit下面只能继续创建Suit。
创建Test Case
创建Project和Suit的最终目的就是根据测试对象搭建目录体系存放不同的Test Case,确保整个项目结构清晰,可以迅速的找到目标Test Case。创建Test Case的方法很简单,右击创建好的Suit,点击“New Test Case”即可。
Edit和Text Edit
导入外部库
Project和Suit的Edit功能基本相同,主要包括导入外部资源、创建全局变量、定义元数据等。
robot中的测试用例由关键字组成,而关键字来源于库,为了实现不同的测试功能,需要导入不同的库。robot本身安装完成后会包含几个基本的库,但是并不能满足测试需要,好在robot有大量的外部库,用户可以根据需求自行导入。以导入AutoItLibrary库为例阐述导入外部库的流程。
1、下载并安装pywin,下载地址:https://sourceforge.net/projects/pywin32/files/pywin32/。需要注意pywin版本与已安装的python版本保持一致。如下图所示是python2.7(64位),那么下载pywin时应该选择64位,对应py2.7的。安装完成后,在dos命令窗口中执行。
2、下载并安装AutoItLibrary,下载地址:https://code.google.com/archive/p/robotframework-autoitlibrary/downloads。 解压AutoItLibrary文件,打开dos命令窗口,进入解压后的AutoItLibrary目录,执行:python setup install。
3、64位的机器还需要安装AutoIt V3,下载地址:https://www.autoitscript.com/site/autoit/downloads/。
4、安装好后打开robot,点击右侧的“library”,在name一栏中填写“AutoItLibrary”,点击确定。如果AutoItLibrary显示为黑色,则表明导入成功,不幸的是我导入失败,AutoItLibrary显示红色,报错信息如下:
原因是AutoIt V3安装后并没有加载,在dos命令窗口中进入....\AutoIt\AutoItX目录,执行:regsvr32 AutoItX3_x64.dll。再次导入AutoItLibrary库即可。
5、按F5键弹出关键字搜索框,source选择AutoItLibrary就可以查看AutoItLibrary库中关键字相关信息了。F5是查看关键字使用方法的有效途径,在学习使用robot的过程中可以经常使用F5学习更多的关键字。
导入资源
外部资源可以看成是自定义的库,这个自定义库中存放的是用户按需自行封装的关键字。用户自定义resource,随后在Suit中导入这个resource,那么在这个Suit中就可以使用resource中封装的关键字了。关键字与用例一样都是由关键字组成,不同之处在于关键字可以有参数和返回值,编写关键字时使用的参数、返回值,就是使用关键字时的格式。以关键字“获取用户uuid”为例:
1、右击Project,点击“New resource”创建resource_1;
2、右击创建好的resource,点击“New User Keyword”创建关键字“获取用户uuid”;
3、在Suit中导入resource_1,那么在该Suit中就可以使用resource_1中所有的关键字了;
4、使用关键字“获取用户uuid”;
测试用例
Test Case的Edit功能就是编写测试用例,在表格中输入关键字组成一条测试用例,以百度为例编写一条Test Case。首先需要安装、导入外部库Selenium2,然后编写如下用例。
1、右击Suit,点击“New Test Case”创建case1;
2、第一步打开谷歌浏览器,访问百度;第二步在搜索框内输入“测试”;第三步点击“百度一下”;第四步将搜索结果截图;最后关闭浏览器;
Text Edit
Text Edit就是将Edit中设置的内容以text的格式展示。project属于目录,点击Project则展示Project设置的内容。而suit是一个text文件,case是text文件中的内容,因此点击Suit或Test Case则展示Suit文件中所有的内容,包括Suit中导入的库、资源、创建的变量、以及所有的用例等。
Run
Run是robot界面中最重要的部分之一,测试用例编写完成后在Run页面运行、调试,这部分的核心包括运行和日志。
运行
每个Test Case前有一个勾选框,勾选需要执行的用例后点击“start”。如果没有勾选任何用例,那么默认执行该Suit中的所有用例。当然,也可以不通过勾选框执行部分用例。
start下方有一个Arguments,在输入框输入pybot命令可以实现相应的操作。例如参数设置为“-s [suit名称]”表明执行该Suit下的所有用例,参数“-t [用例名称]”表明执行该用例。详细的使用方法可以自行查询,在dos窗口中执行“pybot.bat --help”即可查看相关命令的使用方法和详细介绍。
另外使用tag也是一种方式,给部分用例打上tag(在用例编辑页面Tags框中输入tag即可),勾选“Only run tests with these tags”并在输入框中输入tag,点击run,则执行所有打上该tag的用例;也可以勾选“Skip tests with these tags”,那么将跳过所有打上该tag的用例,执行剩余的用例。
日志
用例执行完后点击“Report”和“Log”查看用例执行报告和日志。测试报告包括测试用例执行的基本信息、具体结果以及详细信息,侧重于将测试结果汇总展示出来,方便用户查看测试结果、编写测试报告。
日志信息中也展示了测试用例执行的结果,并且记录了用例执行的具体步骤以及每一步的执行结果,绿色的为执行成功的步骤,红色的是执行失败的步骤,显示了具体的失败信息,用户可以根据失败信息修改用例。
当然用例执行过程中Run标签页面会同步打印出用例执行信息,包括执行结果和简单的日志信息。
变量
在介绍Edit标签页面时没有讲解添加变量,在此通过几个小例子详细的讲解一下添加、使用变量的方法。project、suit的edit标签页都可以添加变量,case内也可以定义变量,不过不同位置添加的变量作用范围不一样,当然优先使用顺序也不一样。简单而言就是,project中添加的变量作用于整个project,但是当project中的变量与suit中的变量同名时,优先使用suit中的变量。同理,case中的变量最优先使用,但作用范围最小。
添加变量
1、选中suit,点击Edit标签页的“Add Scalar”添加变量${ending};
2、在本suit所有用例最后打印该变量,添加内容如下所示,那么每个用例执行的最后一步就是“INFO : 本用例执行完毕,请仔细查看log信息!”
添加列表
有时候变量并不能满足需求,例如上面的用例,想要一次性搜索多个关键词,那么就需要使用列表。
1、选中suit,点击Edit标签页的“Add List”添加列表@{keywords};
2、由于需要搜索多个关键词,因此需要用到循环语句依次读取list中的变量,用例具体如下所示:
添加字典
还有一种类型的变量是字典,列表的优势在于可以创建、使用多个变量,但是不足之处在于无法灵活的取出某一个变量,而字典一个key对应一个value,可以利用key值快速的查找某一个变量。
上图是一个简单的示例,在Case中创建字典变量&{dic},两个key(user、passd)分别对应两个value(test、123456)。login是一个自定义关键字,用法是关键字后加登录的用户名和密码即可。