robot framework RIDE 输出报告保存路径修改,使用系统时间为文件夹/文件名

时间:2024-03-28 08:55:46

网上一直没找到完整的修改源码的教程,自己写了一个,方便大家沟通交流,这个教程中除了创建文件夹的地方需要区分Windows和Linux系统外,其他的都是通用的哦~
本文为原创文章,如需转载请注明出处。

需求分析:
使用robotframework-ride工具跑测试用例时,输出的报告默认是存放在系统tmp目录下随机字符串命名的文件夹内,包含了log.html、output.xml、report.html文件,并且默认在退出ride之后会进行删除临时文件夹的操作,对于测试人员来说,在调试测试用例时查看log显得不是很友好,因此需要利用系统时间来命名临时文件夹,并指定存放在测试人员的个人文件夹下加以区分,输出的log.html、output.xml、report.html文件也需要添加系统时间来区分每一次的运行结果。
那么,通过什么方式能够指定报告存放的路径、修改报告的名称呢?

以下内容包含大量代码解读过程,需要直接看源码修改的内容请跳转至“源码修改步骤”

首先,测试人员在使用ride图形化工具时,可以通过run这个插件中的Arguments添加 ”–outputdir ” 来指定报告存放路径,以及 ”–timestampoutputs” 来给报告名称加时间戳:
robot framework RIDE 输出报告保存路径修改,使用系统时间为文件夹/文件名
运行后报告存放情况如下所示:
robot framework RIDE 输出报告保存路径修改,使用系统时间为文件夹/文件名
由此可知,通过run这个插件能够自定义测试报告的存放路径及名称,也就是说,如果想通过修改ride的源码来实现本文开篇的需求,需要对run这个插件的源码进行修改,那么run这个插件的代码在哪里呢?为了解答这个问题,我们需要通过ride官方给出的RIDE wiki 找到关于run插件的wiki:link
如果打不开link请复制链接:
https://github.com/robotframework/RIDE/wiki/Test-Runner-Plugin
robot framework RIDE 输出报告保存路径修改,使用系统时间为文件夹/文件名
在Test Runner Plugin的wiki中,我们找到了关于report存放路径的说明:
robot framework RIDE 输出报告保存路径修改,使用系统时间为文件夹/文件名
但是,官方并没有告诉你这部分代码在哪里,所以接下来,我们需要解读源代码,对run的运行原理进行简单的梳理。

首先,ride是基于robotframework的二次开发,我们使用的robotframework是python版的,因此默认存放代码的路径是python的site-packages下,ride的testrunner路径默认为site-packages\robotide\contrib\testrunner,包含以下文件:
robot framework RIDE 输出报告保存路径修改,使用系统时间为文件夹/文件名
打开testrunnerplugin.py,看到有一个TestRunnerPlugin类:
robot framework RIDE 输出报告保存路径修改,使用系统时间为文件夹/文件名
通过注释基本了解到,在ride中使用run按钮运行case的时候,调用的是TestRunnerPlugin里的方法,那么这个方法在哪里呢?得益于源码规范的注释,我们找到了OnRun方法就是点击run按钮时调用的方法:
robot framework RIDE 输出报告保存路径修改,使用系统时间为文件夹/文件名
在OnRun方法中,我们需要用到的关键信息主要有两条,一条是command的生成,一条是在Linux环境下运行command的方法,如下图所示:
robot framework RIDE 输出报告保存路径修改,使用系统时间为文件夹/文件名
robot framework RIDE 输出报告保存路径修改,使用系统时间为文件夹/文件名
在查看command的生成方法前,我们首先需要查看在运行command方法中是否对传参command进行再处理,以下是运行command方法的解读:

self._test_runner是testrunner.py文件中class TestRunner()的实例化,所以要去testrunner.py文件中查看run_command方法:
robot framework RIDE 输出报告保存路径修改,使用系统时间为文件夹/文件名
run_command的方法中并没有对command进行处理,直接作为传参使用,self._process是class Process()的实例化,在Process中查看run_command方法确定self._process.run_command(command)也没有对传入的command再作处理,而是直接作为传参使用:
robot framework RIDE 输出报告保存路径修改,使用系统时间为文件夹/文件名
由此得出结论,点击run按钮运行的command是“原始”的:
robot framework RIDE 输出报告保存路径修改,使用系统时间为文件夹/文件名
我们回到testrunnerplugin.py找到_create_command方法如下:
robot framework RIDE 输出报告保存路径修改,使用系统时间为文件夹/文件名
可以看到,command_as_list经过_format_command()规范格式后赋值给了command,接下来看command_as_list的产生,是由testrunner.py中class TestRunner()的get_command()方法来完成的,我们来看get_command()方法:
robot framework RIDE 输出报告保存路径修改,使用系统时间为文件夹/文件名
首先,command通过 profile.get_command_prefix()取得运行的命令类型,比如ride默认选项的robot,在ride的Execution Profile下拉菜单中提供了不同类型的profile:
robot framework RIDE 输出报告保存路径修改,使用系统时间为文件夹/文件名
这部分的内容存储在runprofiles.py文件中,感兴趣的可以自行拓展了解,这里我们只需要知道command是一个list,并且现在的值为 [‘robot’]
经过多次extend和append之后,command扩展为:
[‘robot’,’–argumentfile’,’<self._output_dir>\argfile.txt’,’–listener’,’\TestRunnerAgent.py:port:False’, ‘cwd’]

也就是说,argfile.txt就是执行测试用例时用户自定义的参数文件,而_output_dir则是argfile.txt的存放路径,同时也是测试报告的存放路径,到这里,我们已经理清了解题思路,只需要修改argfile.txt的写入部分和_output_dir的路径即可达到我们想要的效果,那么接下来就是进行代码修改啦~

源码修改步骤:
首先找到self._create_standard_args(),新增添加时间戳方法,如图框中所示:
robot framework RIDE 输出报告保存路径修改,使用系统时间为文件夹/文件名
然后self._add_timestampoutputs_if_not_given_by_user这个方法要定义为:
robot framework RIDE 输出报告保存路径修改,使用系统时间为文件夹/文件名
这样报告名称的时间戳就加好了,接下来找到_output_dir是在_create_temporary_directory中定义的,修改源代码为:
robot framework RIDE 输出报告保存路径修改,使用系统时间为文件夹/文件名
这里添加了_get_user_dir()方法来指定当前用户的文件夹,适用于Linux多用户环境:
robot framework RIDE 输出报告保存路径修改,使用系统时间为文件夹/文件名
这样,就实现了启动ride时创建的临时文件夹放在个人用户目录下,且以系统时间为命名,每次在ride中运行的case所输出的报告都会存放在这个目录下,输出报告通过报告名+时间戳的方式加以区分。

如果需要改成每次运行测试用例时都创建一个临时文件夹,则需要在创建argfile.txt之前创建临时文件夹:

robot framework RIDE 输出报告保存路径修改,使用系统时间为文件夹/文件名
并且要记得取消ride启动时自动创建临时文件夹的功能:
robot framework RIDE 输出报告保存路径修改,使用系统时间为文件夹/文件名
实现效果:
robot framework RIDE 输出报告保存路径修改,使用系统时间为文件夹/文件名