千万别跳坑:Robot Framwork 失败case截图、日志输出到指定目录

本文主要是介绍千万别跳坑:Robot Framwork 失败case截图、日志输出到指定目录,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 自从接触RFS开始,就幻想着能把robot 中失败case的日志输出到指定文件夹中,这两天心血来潮,想去“研究一把”。我的思路是:robot中有判断case是否成功的关键字:
Run Keyword If Test Failed,根据这个值来判断->case失败了,就去这个目录下取log文件:C:\Users\Administrator\AppData\Local\Temp\RIDE123.d,并且进行截图,
图片名称以case的名称来命名:Take Screenshot	${image_path}\\${TEST_NAME}.jpg;瞬间感觉有点"高大上"....
    于是马上开始编码,突然发现Temp下面有好几个RIDE12xxx.d的文件夹,而且都是robot运行时产生的,于是想进行文件夹模糊查询:先获取Temp下面的所有机文件列表,然后遍历
文件名称,找出以RIDE开头的文件夹,并且找出最近被修改的那个(之前试过,这个文件夹不能被删除,否则robot无法执行case,得重启),然后就是代码实现:
    def get_fail_case_log_dir(self, temp_path):
        time_before = 1433536577
        dirs = os.listdir(temp_path)
        fail_dir = ""
        for dir in dirs:
            if dir.startswith("RIDE"):
                if os.path.isdir(temp_path+dir):
                    # 获取log文件的修改时间
                    mtime = os.path.getmtime(temp_path+dir+"\log.html")
                    # 取最新修改的那个文件夹
                    if mtime >= time_before:
                        time_before = mtime
                        fail_dir = dir
        fail_dir = temp_path+fail_dir
        print ":::Return: ", fail_dir
        return fail_dir
拷贝temp下面的日志文件:
    def get_log_file(self, tempPath, newFile, newPath, newFileName):
        oldFile = self.get_fail_case_log_dir(tempPath)+"\\log.html"
        # 目标路径不存在,需要自动创建
        if os.path.exists(newPath) is False:
            os.mkdir(newPath)
        # 删除已存在的相同文件
        newName = newPath+newFileName+".html"
        if os.path.exists(newName):
            print ":::File [", newName, "] existed, remove it!!"
            os.remove(newName)
        os.chdir(tempPath)
        os.chdir(self.get_fail_case_log_dir(tempPath))
        # 拷贝文件
        try:
            shutil.copy(oldFile, newFile)
        except Exception, e:
            print ":::Exception occured:", e.message
        # 重命名
        os.rename(newFile, newName)
    感觉快大功告成了,赶紧用robot去调用~
    但结果告诉我:晴天霹雳,每次获取的都是上一次的日志,本次的无法获取,我还天真的到群里面问是不是有缓存之类的....
哎,继续调试一下看看,日志究竟是什么时候生成的。事实是介样的:只有等每次case执行结果显示Pass/Fail的时候,日志才会更新,而执行
Run Keyword If Test Failed 这个关键字还属于case运行的范畴,在日志产生之前就已经执行了,所以才每次都取不到最新的日志。
    还有补救办法么?我试着另外增加一个case:专门用来取日志文件。结果又告诉我:执行多个case的时候,日志不是每执行完一个,就更新一次,
而是等所有case都执行完了,日志才更新,感觉今天做的事情原来都是浪费时间,根本达不到目的,呜呜呜。。。。。。难道真的没办法嘛?有!!
在run tab下面的argument后面加上-d D:\fail_screenshots就好了,以后产生的日志都会在这里:
原来转那么大的弯去实现,这么一句话就搞定了。不过还是有收获,总结一下:
1、robot的日志文件是在执行动作退出后产生的
2、执行多个case的时候,并非每结束一个case就刷新一次日志,而是所有case都结束后才产生的
后面的同学千万别踩这个坑了。。。。。。

这篇关于千万别跳坑:Robot Framwork 失败case截图、日志输出到指定目录的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/489024

相关文章

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.

解读GC日志中的各项指标用法

《解读GC日志中的各项指标用法》:本文主要介绍GC日志中的各项指标用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、基础 GC 日志格式(以 G1 为例)1. Minor GC 日志2. Full GC 日志二、关键指标解析1. GC 类型与触发原因2. 堆

mysql中的数据目录用法及说明

《mysql中的数据目录用法及说明》:本文主要介绍mysql中的数据目录用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、版本3、数据目录4、总结1、背景安装mysql之后,在安装目录下会有一个data目录,我们创建的数据库、创建的表、插入的

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景

springboot项目打jar制作成镜像并指定配置文件位置方式

《springboot项目打jar制作成镜像并指定配置文件位置方式》:本文主要介绍springboot项目打jar制作成镜像并指定配置文件位置方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录一、上传jar到服务器二、编写dockerfile三、新建对应配置文件所存放的数据卷目录四、将配置文

python3如何找到字典的下标index、获取list中指定元素的位置索引

《python3如何找到字典的下标index、获取list中指定元素的位置索引》:本文主要介绍python3如何找到字典的下标index、获取list中指定元素的位置索引问题,具有很好的参考价值,... 目录enumerate()找到字典的下标 index获取list中指定元素的位置索引总结enumerat

如何使用Maven创建web目录结构

《如何使用Maven创建web目录结构》:本文主要介绍如何使用Maven创建web目录结构的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录创建web工程第一步第二步第三步第四步第五步第六步第七步总结创建web工程第一步js通过Maven骨架创pytho

MySQL 打开binlog日志的方法及注意事项

《MySQL打开binlog日志的方法及注意事项》本文给大家介绍MySQL打开binlog日志的方法及注意事项,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录一、默认状态二、如何检查 binlog 状态三、如何开启 binlog3.1 临时开启(重启后失效)

Java实现删除文件中的指定内容

《Java实现删除文件中的指定内容》在日常开发中,经常需要对文本文件进行批量处理,其中,删除文件中指定内容是最常见的需求之一,下面我们就来看看如何使用java实现删除文件中的指定内容吧... 目录1. 项目背景详细介绍2. 项目需求详细介绍2.1 功能需求2.2 非功能需求3. 相关技术详细介绍3.1 Ja

Python pip下载包及所有依赖到指定文件夹的步骤说明

《Pythonpip下载包及所有依赖到指定文件夹的步骤说明》为了方便开发和部署,我们常常需要将Python项目所依赖的第三方包导出到本地文件夹中,:本文主要介绍Pythonpip下载包及所有依... 目录步骤说明命令格式示例参数说明离线安装方法注意事项总结要使用pip下载包及其所有依赖到指定文件夹,请按照以