文档章节

RobotFramework之DateTime

猪鼻子插葱
 猪鼻子插葱
发布于 2018/08/14 18:06
字数 1567
阅读 9
收藏 0

 

RobotFramework之DateTime

背景

继续学习RobotFramework框架,这次看的是DateTime库。

DateTime库是RobotFramework操作时间的一个库,可以进行很多时间方面的操作。

DateTime is a Robot Framework standard library that supports creating and converting date and time values (e.g. Get Current Date, Convert Time), as well as doing simple calculations with them (e.g. Subtract Time From Date, Add Time To Time). It supports dates and times in various formats, and can also be used by other libraries programmatically.

Get Current Date

示例代码

*** Settings ***
Library     DateTime

*** Test Cases ***
test1
    ${tm}       get_current_date
    log     ${tm

执行结果

11:08:49.158    INFO    2017-05-01 11:08:49.157

源代码

def get_current_date(time_zone='local', increment=0,
                     result_format='timestamp', exclude_millis=False):
    if time_zone.upper() == 'LOCAL':
        dt = datetime.now()
    elif time_zone.upper() == 'UTC':
        dt = datetime.utcnow()
    else:
        raise ValueError("Unsupported timezone '%s'." % time_zone)
    date = Date(dt) + Time(increment)
    return date.convert(result_format, millis=is_falsy(exclude_millis))

说明

这个方法可以不传入参数,默认使用的是当地时间,如果第一个参数传入utc不区分大小写,则会使用utc时间。如果需要一个时间偏移量,则可以在第二个参数中传入时间偏移,传入的参数可以是一个数字或者str的数字,单位为秒,比如如下代码,执行的结果就会相差1分钟

test1
    ${tmdl}       get_current_date    local       60
    ${tm}       get_current_date
    log     ${tm}
    log     ${tmdl}
    
Result

KEYWORD BuiltIn . Log ${tm}
Documentation:  
Logs the given message with the given level.
Start / End / Elapsed:  20170501 11:22:13.600 / 20170501 11:22:13.600 / 00:00:00.000
11:22:13.600    INFO    2017-05-01 11:22:13.600 
00:00:00.001KEYWORD BuiltIn . Log ${tmdl}
Documentation:  
Logs the given message with the given level.
Start / End / Elapsed:  20170501 11:22:13.600 / 20170501 11:22:13.601 / 00:00:00.001
11:22:13.601    INFO    2017-05-01 11:23:13.599

当然,也可以传入一个timedelta,会通过如下代码解析成秒数进行处理。

class Time(object):

    def __init__(self, time):
        self.seconds = float(self._convert_time_to_seconds(time))

    def _convert_time_to_seconds(self, time):
        if isinstance(time, timedelta):
            # timedelta.total_seconds() is new in Python 2.7
            return (time.days * 24 * 60 * 60 +
                    time.seconds +
                    time.microseconds / 1e6)
        return timestr_to_secs(time, round_to=None)

第三个参数为格式化参数,从代码中可以看到,默认传入的是timestamp,而这里的解析源代码如下

def convert(self, format, millis=True):
        dt = self.datetime
        if not millis:
            secs = 1 if dt.microsecond >= 5e5 else 0
            dt = dt.replace(microsecond=0) + timedelta(seconds=secs)
        if '%' in format:
            return self._convert_to_custom_timestamp(dt, format)
        format = format.lower()
        if format == 'timestamp':
            return self._convert_to_timestamp(dt, millis)
        if format == 'datetime':
            return dt
        if format == 'epoch':
            return self._convert_to_epoch(dt)
        raise ValueError("Unknown format '%s'." % format)

所以,可以传入timestampdatetimeepoch或者是我们正常格式化时间的%Y%m%d

第四个参数传入的是布尔值,是否需要毫秒级的数据,默认是False,也就是有毫秒的,如果不需要的话,传入${true}即可

Convert Date

示例代码

*** Settings ***
Library     DateTime

*** Test Cases ***
test1
    ${tm}       convert_date        20170501
    log     ${tm}

执行结果

11:58:27.558    INFO    2017-05-01 00:00:00.000

源代码

def convert_date(date, result_format='timestamp', exclude_millis=False,
                 date_format=None):
    return Date(date, date_format).convert(result_format,
                                           millis=is_falsy(exclude_millis))
                                           
def convert(self, format, millis=True):
        dt = self.datetime
        if not millis:
            secs = 1 if dt.microsecond >= 5e5 else 0
            dt = dt.replace(microsecond=0) + timedelta(seconds=secs)
        if '%' in format:
            return self._convert_to_custom_timestamp(dt, format)
        format = format.lower()
        if format == 'timestamp':
            return self._convert_to_timestamp(dt, millis)
        if format == 'datetime':
            return dt
        if format == 'epoch':
            return self._convert_to_epoch(dt)
        raise ValueError("Unknown format '%s'." % format)

说明

该方法就是一个时间格式转换的方法,在上一个方法Get Current Date中获取的结果如果需要其他格式,就可以用这个方法进行转换,参数传入与上一个方法一样。

Convert Time

示例代码

*** Settings ***
Library     DateTime

*** Test Cases ***
test1
    ${tm}       convert_time    10      timedelta
    log     ${tm}

执行结果

12:06:08.990    INFO    0:00:10

源代码

def convert_time(time, result_format='number', exclude_millis=False):
    return Time(time).convert(result_format, millis=is_falsy(exclude_millis))
    
class Time(object):

    def __init__(self, time):
        self.seconds = float(self._convert_time_to_seconds(time))
    
    def convert(self, format, millis=True):
        try:
            result_converter = getattr(self, '_convert_to_%s' % format.lower())
        except AttributeError:
            raise ValueError("Unknown format '%s'." % format)
        seconds = self.seconds if millis else float(roundup(self.seconds))
        return result_converter(seconds, millis)

    def _convert_to_number(self, seconds, millis=True):
        return seconds

    def _convert_to_verbose(self, seconds, millis=True):
        return secs_to_timestr(seconds)

    def _convert_to_compact(self, seconds, millis=True):
        return secs_to_timestr(seconds, compact=True)

    def _convert_to_timer(self, seconds, millis=True):
        return elapsed_time_to_string(seconds * 1000, include_millis=millis)

    def _convert_to_timedelta(self, seconds, millis=True):
        return timedelta(seconds=seconds)

说明

第一个参数是必传的,会在初始化Time类的时候转换成秒。源代码中的convert用了一个反射的方法,所以默认调用的是_convert_to_number会直接把传入的第一个参数转换成秒,然后返回。我写的示例代码填的是timedelta,会转换成时间格式。

Subtract Date From Date

示例代码

test
    ${time}     Subtract Date From Date         2014-05-28 12:05:52     2014-05-28 12:05:10
    log     ${time}

执行结果

    INFO    42.0

源代码

def subtract_date_from_date(date1, date2, result_format='number',
                            exclude_millis=False, date1_format=None,
                            date2_format=None):
    time = Date(date1, date1_format) - Date(date2, date2_format)
    return time.convert(result_format, millis=is_falsy(exclude_millis))
    
class Date(object):

    def __init__(self, date, input_format=None):
        self.seconds = self._convert_date_to_seconds(date, input_format)
        
    def _convert_date_to_seconds(self, date, input_format):
        if is_string(date):
            return self._string_to_epoch(date, input_format)
        elif isinstance(date, datetime):
            return self._mktime_with_millis(date)
        elif is_number(date):
            return float(date)
        raise ValueError("Unsupported input '%s'." % date)

说明

方法是获取两个日期之间的差值,最终结果单位是秒,从示例代码中可以看得出来。Date类会将传入的date1date2转换成默认的格式,然后做一次减法。最后得到的日期结果,通过time.convert方法转成秒

Add Time To Date

示例代码

test
    ${time}     add time to date    2014-05-28 12:05:03.111     7 days
    log     ${time}

执行结果

INFO    2014-06-04 12:05:03.111

示例代码

def add_time_to_date(date, time, result_format='timestamp',
                     exclude_millis=False, date_format=None):
    date = Date(date, date_format) + Time(time)
    return date.convert(result_format, millis=is_falsy(exclude_millis))

说明

传入的参数7 days表示7天,这里的时间类型用的是timedelta类,支持以下的单位days, seconds, minutes, hours,如果不传,默认是seconds

Subtract Time From Date

示例代码

test
    ${time}     subtract time from date    2014-05-28 12:05:03.111     7 days
    log     ${time}

执行结果

INFO    2014-05-21 12:05:03.111

源代码

def subtract_time_from_date(date, time, result_format='timestamp',
                            exclude_millis=False, date_format=None):
    date = Date(date, date_format) - Time(time)
    return date.convert(result_format, millis=is_falsy(exclude_millis))

Add Time To Time

示例代码

test
    ${time}     add time to time    1 days     7 days
    log     ${time}

执行结果

INFO    691200.0

源代码

def add_time_to_time(time1, time2, result_format='number',
                     exclude_millis=False):
    time = Time(time1) + Time(time2)
    return time.convert(result_format, millis=is_falsy(exclude_millis))

Subtract Time From Time

示例代码

test
    ${time}     subtract time from time    1 days     7 days
    log     ${time}

执行结果

INFO    -518400.0

源代码

def subtract_time_from_time(time1, time2, result_format='number',
                            exclude_millis=False):
    time = Time(time1) - Time(time2)
    return time.convert(result_format, millis=is_falsy(exclude_millis))

总结

DateTime库主要的操作方式就只有DateTime这两个类,只要搞懂这两个类的处理逻辑,就能理解DateTime这个库的操作方式

 

© 著作权归作者所有

猪鼻子插葱
粉丝 1
博文 44
码字总数 172746
作品 0
崇明
高级程序员
私信 提问
mac 安装robotframework 遇到的问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/winter199/article/details/89379288 1、pip安装robotframework-ride,总是报错,说没有找到合适的Pywin32版本...

那一年-漫天雪
04/18
0
0
Robot Framework+SSHLibrary实现自动化运维质量检测

Robot Framework+SSHLibrary介绍 首先,介绍一下robotframework,oschina这么介绍: Robot Framework 是一个关键词驱动的自动测试框架。测试用例位于HTML或者TSV(以tab分隔值)文件,使用在测...

超爱fitnesse
2015/02/10
931
0
RobotFramework的相关命令参数的使用方法

RobotFramework的相关命令参数的使用方法(指定log的路径,重新运行上一轮Fail的case) Posted on 2015年1月29日 by Roy Xu RobotFramework 除了可以使用ride 运行以外,本身也提供了一些命令...

xxjbs001
2015/01/30
362
0
开源自动化测试解决方案 - AutoLine

AutoLine开源平台 AutoLine开源平台是一个开源自动化测试解决方案,基于 RobotFramework 进行二次开发,支持 RobotFramework 几乎所有的库。 特色 支持 Mac、Linux、Windows 平台 支持 Chro...

苦叶子
2018/05/16
4K
2
pycharm下robot framework环境搭建

一、安装步骤 1、首先安装python运行环境,我用的2.7版本,当然也有更高的版本,不过安装其他插件的过程中,出现版本问题,所以用了2.7。 2、安装pip(python包管理工具) https://pip.pypa.io...

keitwotest
2017/10/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

02.日志系统:一条SQL更新语句是如何执行的?

我们还是从一个表的一条更新语句说起,我们创建下面一张表: create table T(ID int primary key, c int); 如果要将ID=2这一行c的值加1,SQL可以这么写: update T set c=c+1 where ID=2; 前...

scgaopan
今天
7
0
【五分钟系列】掌握vscode调试技巧

调试前端js 准备一个前端项目 index.html <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1......

aoping
今天
6
0
PhotoShop 高级应用:USM锐化/S锐化/防抖

、 高反差锐化+混合模式:叠加模式 【将更多的边缘细节添加到图像中】

东方墨天
今天
7
0
Python数据可视化之matplotlib

常用模块导入 import numpy as npimport matplotlibimport matplotlib.mlab as mlabimport matplotlib.pyplot as pltimport matplotlib.font_manager as fmfrom mpl_toolkits.mplot3d i......

松鼠大帝
昨天
5
0
我用Bash编写了一个扫雷游戏

我在编程教学方面不是专家,但当我想更好掌握某一样东西时,会试着找出让自己乐在其中的方法。比方说,当我想在 shell 编程方面更进一步时,我决定用 Bash 编写一个扫雷游戏来加以练习。 我在...

老孟的Linux私房菜
昨天
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部