5.3 DateTime库
日期和时间是计算机中一种重要的数据结构,任何一种编程语言都必须考虑对日期和时间的支持,Robot Framework自动化测试框架也不例外。Robot Framework中支持多种形式日期和时间的格式。
特别地,这里的日期指的是包含年、月、日、时、分、秒、微秒但不包含时区的字符串或数字,如2014-06-11 10:07:42。
时间指的是包含时、分、秒部分的字符串或数字,可表示时间间隔,如1 hour 20 minutes 或01:20:00。
5.3.1 日期格式
日期格式的变量可以作为Robot Framework中关键字的输入参数或返回值。日期格式有时间戳格式、定制时间戳格式、Python日期格式和epoch日期格式。
·时间戳格式:ISO 8601形式的日期格式,如YYYY-MM-DD hh:mm:ss.mil。
·定制时间戳格式:可以按照指定的格式返回日期时间,如%Y-%m-%d %H:%M:%S.%f。
·Python日期格式:假如${datetime}是一个时间戳格式的日期,可以通过${datetime.year}、${datetime.month}、${datetime.day}、${datetime.hour}、${datetime.minute} ${datetime. second}、${datetime.microsecond}取得年、月、日、时、分、秒、微秒各部分的值。
·epoch日期格式:自1970-01-01 00:00:00 UTC以来的秒数。
5.3.2 时间格式
时间格式的变量和日期一样,可以作为Robot Framework中关键字的输入参数或返回值。时间格式有以下几种。
·数字:一个整型或小数形式的数字,Robot Framework将以秒来解析它,如1.5表示1.5s。
·时间字符串:一个数字加一个表示时间的字符串,如1m 12s。可用的时间字符串见3.2.3节。
·timer字符串:以hh:mm:ss.mil格式表示的时间字符串,如01:01:00.123。
5.3.3 BuiltIn库里的日期和时间关键字
在Robot Framework的BuiltIn库里提供了一个取得日期和时间的Get Time关键字。
Get?Time?|?format=timestamp?|?time_=NOW
Get Time关键字将根据指定的格式返回日期和时间。format参数可用的值有以下几种。
·空:format可以不填,默认返回格式为YYYY-MM-DD hh:mm:ss,如2006-02-24 15:08:31。
·epoch:返回一个从1970-01-01 00:00:00 UTC以来的秒数。
·year、month、day、hour、min或sec:如果format中包含这些单词,相应的值将以数字形式返回。值得注意的是,返回的值和这些单词出现的次序无关。始终是按照年、月、日、时、分、秒的顺序返回。示例如下。
${time} = Get Time ${secs} = Get Time epoch ${year} = Get Time return year ${yyyy} ${mm} ${dd} = Get Time year,month,day @{time} = Get Time year month day hour min sec ${y} ${s} = Get Time seconds and year ${time} = '2019-03-29 15:06:21' ${secs} = 1143637581 ${year} = '2019' ${yyyy} = '2019', ${mm} = '03', ${dd} = '29' @{time} = ['2019', '03', '29', '15', '06', '21'] ${y} = '2019' ${s} = '21' |
参数time_支持的格式包括以下几种。
·空:默认取得当前本地时间。
·数字:表示自epoch 1970-01-01 00:00:00 UTC以来的秒数。
·YYYY-MM-DD hh:mm:ss:表示指定的日期、时间格式表达式。
·UTC:表示返回UTC时间。
·NOW/UTC +/?时间表达式:NOW或UTC后跟一个“+”或“?”,再跟上时间表达式,返回以当前本地时间加上或减去一定时间的日期和时间。
${time} = Get Time 1177654467 #自epoch时间以来的秒数 ${secs} = Get Time sec 2007-04-27 09:14:27 #日期、时间格式 ${year} = Get Time year NOW #当前本地时间 @{time} = Get Time hour min sec NOW + 1h 2min 3s #当前本地时间加1h 2min 3s @{utc} = Get Time hour min sec UTC #UTC时间 ${hour} = Get Time hour UTC - 1 hour #UTC时间减1h ${time} = '2007-04-27 09:14:27' ${secs} = 27 ${year} = '2019' @{time} = ['16', '08', '24'] @{utc} = ['12', '06', '21'] ${hour} = '11' |
5.3.4 Collections库里的日期和时间关键字
Collections库中提供了更加专业的日期和时间关键字,和BuiltIn库里的Get Time对应的一个关键字是Get Current Time。
Get Current Date | time_zone=local | increment=0 | result_format=timestamp | exclude_millis=False |
其中result_format用来指定使用的日期和时间格式。
${datetime} Get Current Date #按默认格式取日期和时间 ${datetime} Get Current Date result_format=%d.%m.%Y %H:%M #指定日期和时间格式 ${datetime} Get Current Date result_format=epoch #自epoch时间以来的秒数 ${datetime} Get Current Date UTC #获取UTC时间 ${datetime} Get Current Date UTC +8h #获取东八区的时间 ${datetime} Get Current Date result_format=datetime #返回一个日期和时间类型的数据 Log ${datetime.year} #只输出年 |
输出结果如下。
INFO : ${datetime} = 2019-02-16 17:29:37.238 INFO : ${datetime} = 16.02.2019 17:29 INFO : ${datetime} = 1550309377.24 INFO : ${datetime} = 2019-02-16 09:29:37.238 INFO : ${datetime} = 2019-02-16 17:29:37.254 INFO : ${datetime} = 2019-02-16 17:29:37.254000 INFO : 2019 |
除了取得当前本地时间之外,DateTime库里还提供了另外几个加、减及转换的日期和时间关键字,如图5-2所示。读者可以参阅官方文档了解它们的用法。
图5-2 DateTime库中加、减及转换日期和时间的关键字
5.4 Robot Framework自带的其他测试库
除了前面讲解的库之外,Robot Framework还提供了下面几个常用的测试库,在此就不一一讲解。如果需要了解具体使用方法,请参阅官方文档。
·OperatingSystem:提供与操作系统交互的关键字,如运行程序、创建文件/目录、删除文件/目录、修改文件等操作。
·Dialogs:暂停当前测试用例的执行,并提供一个与用户交互的窗口,接受用户的输入后再继续执行。
·Process:处理子进程,在Robot Framework测试用例中,启动子进程运行某些程序并与之交互。
·Screenshot:屏幕截屏库,提供的关键字可以随时截取当前屏幕。
·String:字符串处理库,提供诸如获取子字符串、替换字符串、拆分字符串等的关键字。
·Telnet:通过telnet连接到远程服务器并执行远程命令。
·XML:提供判断或修改XML文件的关键字。
5.5 小结
本章介绍了Robot Framework自带的测试库里的几个关键字。它们都是使用非常普遍的关键字,几乎所有项目里都会找到它们的身影。有些关键字虽然能满足要求,但是可能会使测试用例运行效率不是很高或不能精确匹配,建议不要使用它们,而选择更好的关键字。例如,Sleep会增加测试用例执行的时间,因此建议使用Wait Until Keyword Succeeds。又如Should Match不能特别精确地匹配,可能导致有些问题不能被发现,因此建议使用Should Match Regexp,通过正则表达式精确匹配。
BuiltIn库虽然提供了简单的关键字来处理集合数据类型以及日期和时间数据类型,但是更专业的库能实现更多更简洁的功能。如果需要处理这些数据类型,尽量使用专业测试库里提供的关键字。
Robot Framework提供了大量的关键字,本书限于篇幅没法一一讲解。本章简单介绍了每个库的基本功能,需要的读者可以自行参阅官方文档以了解具体的使用方法。
版权声明:51Testing软件测试网获得人民邮电出版社和作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任