千万别跳坑: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都结束后才产生的
后面的同学千万别踩这个坑了。。。。。。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值