基于RIDE Python Robot Framework转换日期格式遇值不匹配错误求解
解决Robot Framework中dd/mm/yyyy到yyyy-mm-dd的日期转换问题
这个问题我之前帮不少人解决过——你出错的核心原因是搞混了日期解析和格式化的格式符用法:直接用%Y-%m-%d去转换是行不通的,因为这个格式符是用来生成目标格式的,而不是用来识别你输入的dd/mm/yyyy格式的。咱们得分成两步来处理:
核心思路
- 先用对应输入格式的格式符,把字符串日期解析成Python的
datetime对象 - 再用目标格式的格式符,把
datetime对象转换成你想要的字符串格式
具体Robot Framework实现代码
你可以直接在RIDE里用Evaluate关键字调用Python的datetime模块来完成转换,示例如下:
*** Test Cases *** Convert Date Format Successfully # 模拟从网页获取的日期 ${raw_date} Set Variable 18/05/2020 # 第一步:解析原始日期为datetime对象(格式符对应dd/mm/yyyy) ${date_obj} Evaluate datetime.datetime.strptime('${raw_date}', '%d/%m/%Y') modules=datetime # 第二步:将datetime对象格式化为yyyy-mm-dd格式 ${formatted_date} Evaluate ${date_obj}.strftime('%Y-%m-%d') # 验证结果是否正确 Should Be Equal ${formatted_date} 2020-05-18 Log 转换后的日期:${formatted_date}
关键细节解释
strptime:是Python datetime模块的方法,用来解析字符串为日期对象,第二个参数必须和输入日期的格式完全匹配:%d:两位数字的日期(比如18)%m:两位数字的月份(比如05)%Y:四位数字的年份(比如2020)
strftime:是datetime对象的方法,用来将日期对象格式化为字符串,这里用%Y-%m-%d就能得到你要的年-月-日格式modules=datetime:这是Evaluate关键字必须的参数,用来加载Python的datetime模块,否则会报错找不到该模块
封装成可复用的关键字
如果你的测试里经常需要做这种转换,可以把逻辑封装成自定义关键字,方便重复调用:
*** Keywords *** Convert To YYYY-MM-DD Format [Arguments] ${input_date} ${date_obj} Evaluate datetime.datetime.strptime('${input_date}', '%d/%m/%Y') modules=datetime ${formatted_date} Evaluate ${date_obj}.strftime('%Y-%m-%d') [Return] ${formatted_date} *** Test Cases *** Reuse Custom Keyword ${web_date} Set Variable 18/05/2020 ${target_date} Convert To YYYY-MM-DD Format ${web_date} Log 最终转换结果:${target_date}
常见避坑点
- 别把格式符搞混:比如
%M代表分钟,不是月份;%y代表两位年份(比如20),不是四位的%Y - 确保输入日期的格式和
strptime的格式参数完全一致,一般网页返回的日期都是两位数字的月份/日期,所以你的场景用%d/%m/%Y就没问题
内容的提问来源于stack exchange,提问作者Wut' Sarawut
相关产品推荐
相关产品推荐

