每个test case写完后,我们都可以写个日志或是注释来提示输出结果,检查测试状态,和查看错误信息。就像直接写程序的原理一样。有几种方法可供选择:你既可以用Log关键字,也可以用Comment关键字,也可以直接写“#”。
Log就是日志的意思,属于Robot Framework的内嵌关键字,在官方API文档上有这么几种使用方法:
比如,如果不加任何参数,那输出结果就是一条简单的信息;如果后面加个“WARN”,那输出结果就是一条警告类型的信息。现在做实验,打开Tests -> Login –> TCLOG-1,在第4行和第5行输入以下命令:
执行test case,会得到如下的提示:
我们会注意到,系统输出两条关于用户成功登录的日志,第一条的头部显示INFO,第二条的头部显示WARN,这两个关键字在Robot Framework里是“Level”的意思,也就是类型或是等级。默认就是INFO,代表最基本类型的信息,在咱们的test case里所有的运行步骤都是基本信息。WARN指的是警告类型的信息,警告信息也会在报告里单独显示。
由于API文档里的内容很多,出于篇幅不可能把所有的关键字全部进行讲解和实验,有很多我也不确定用法和结果,也是一直在学习。这里再次建议大家养成看文档上网查询的好习惯。
Comment是显示在报告里的一条注释信息,比Log要简单,具体用法如下图,在第6行和第7行分别写下:
注意,这两种方法都是写注释的,不过目的不相同。第6行目的是检查输出了什么,所以信息会显示在test case运行完的日志里;而第7行只是在信息前加了个井号,它的目的只是在程序中告知测试员某段代码的功能是什么,用于在编程中使用,所以不会输出。它更像是程序员们编程时加注释的方法。马上我们开始的第3个测试用例中我们就会用到这种Comment。
第3个test case是实现一个员工工时表查询的功能。先来看看这个工时表,在导航栏上点击“Timesheet”,我在上面创建了4条虚拟员工的工作记录,包括什么时候开始上下班,工作了多长时间,还有一些备注。在查询文本框中输入“Test One”显示1号员工的工时单;输入“Test Two”显示2号员工的工时单,以此类推。
我们设计的test case步骤如下:
1. 登录;
2. 导航到Timesheet下;
3. 输入员工姓名,查看返回结果是否正确:
1) 输入”Test One”,返回2条记录,且均包含”Test One”
2) 输入”Test Two”,返回1条记录,且包含”Test Two”
3) 输入”Test Three”,返回1条记录,且包含”Test Three”
4) 输入”Test Four”,无返回记录。
第1步登录不说了,直接调用以前写的方法就行。第2步导航到Timesheet下,就是简单点击按钮,也没什么可说的。第3步是我们的测试点,需要输入员工姓名。和登录一样,员工姓名也是从测试数据集里来的,我们首先准备测试数据。在Test_Data文件夹下创建一个叫Timesheet的子文件夹,然后创建一个叫TCTIMES-1.xls的文件:
我创建了两个sheet,一个在第1步登录使用,一个在第3步输入员工姓名时使用,简单明了。当然,有些人都写在一个sheet里也没关系,只要别把数据搞乱就好。在“employee”sheet中,姓名被分成姓和名两列,有人说你分来写累不累?确实累,但我是故意这么写的,想多告诉大家一些关于Robot Framework里字符串的使用方法。还有一列是期望的工时记录数目,虽然是一些数,但Excel这里也用字符串表示,到时候讲为什么。
现在我们就要正式开始写test case了。右击Tests -> New Suite创建模块,起名为Timesheet。现在我们可以再把ApplicationSpecific.html里引入的类库和资源文件做一些调整 - 引用Selenium2Library,OperatingSystem和DataDriven.py:
同时删除Tests -> Login模块里的Selenium2Library,OperatingSystem和DataDriven.py文件,因为你本身引入了ApplicationSpecific.html,就不用再重复引了。都没问题后创建该模块下第一个test case – TCTIMES-1,加入ApplicationSpecific.html和Pages里的Login.html资源文件:
接着在TCTIMES-1中写进Setup和Teardown,并且在前4行把登录部分的代码按下图写好:
第一步就是之前提到的comment的一种写法,它并不输出,在代码量特别大时我们可以用它提示当前的代码是干什么的;第2步到第4步其实就是Tests –> Login -> TCLOG-1的内容,以后只要有登陆步骤我们就写这几行就行,因为所有内容都已经包含在Valid login to xiaocesuo函数里,直接调用即可。
登录完成之后就是从菜单进入到Timesheet界面的步骤,很简单。右键Pages -> New Resource–> 创建资源文件Timesheet.html用来写Timesheet模块中需要的函数。这里还是相同的问题,你可以把导航到Timesheet这步直接写到测试用例TCTIMES-1里,也可以写成函数。我还是倾向于写成函数,因为以后只要有“进入Timesheet界面”的测试步骤我就可以直接调用就好了。右键Timesheet.html -> New Keyword -> 创建函数Navigate to Timesheet Screen,不需要任何参数和返回值。:
按部就班,下面是写变量。之前有关登录的变量我们都放到了ObjRepository -> Login.html下,现在关于工时表的变量也不例外。右击ObjRepository -> New Resource -> 创建Timesheet.html,然后先按图依次创建${locMenu_Timesheet},${locTSTable_SearchBox}和${locTSTable_SearchBtn}三个变量。这三个变量分别代表导航到timesheet的导航按钮,搜索工时表框以及查询按钮
回到Pages -> Timesheet.html把变量以及环境相关的资源文件都添加进来:
回到Natigate To Timesheet Screen继续按下图完成该Keyword:
这一下一目了然,声明出来的变量是用于函数步骤中的。点击导航栏上Timesheet的xpath,然后等待网页跳转。我的习惯是每次点击过后都等待个几秒钟,有时网页加载龟速,最好等一等。
回到TCTIMES-1,把函数Navigate to Timesheet Screen写到test case中,注意引Pages -> Timesheet.html中的资源文件。前两步登录和导航到Timesheet页面就做完了:
这篇文章的源代码在[Test8](https://github.com/cslm/cslm.robotframework/tree/master/Test8)中。