【发布时间】:2020-05-21 08:14:14
【问题描述】:
我使用 Groovy 和 Spock 运行 API 测试。 由第三方库生成的请求/响应数据出现在系统中(我在 Jenkins 日志中看到)。
问题: 将每次测试迭代的系统输出记录到某个字符串列表的正确方法是什么?
TestNG 有 Reporter.getOutput(result) ,它返回所有日志条目,在测试迭代运行时出现。 Spock有类似的东西吗?
我是否正确假设它应该是Run listener 的一些实现,我开始在beforeIteration() 中记录并将其附加到afterIteration() 中的报告?
【问题讨论】:
-
也许我误解了,因为您只使用散文,而我看不到示例代码和/或示例日志。但听起来你正在把一件简单的事情复杂化。要么让您的测试获取一个记录器并将其用于输出,或者,如果被测应用程序直接记录到 stdOut/stdErr,只需通过
System.setOut()将它们重新路由到模拟,并检查您在其上的交互,如果您想测试某些东西是记录。我不得不推测,因为像这里的许多用户一样,您没有提供MCVE,错误地认为您的解释足够清楚。 -
请见谅。你是对的,应用程序直接记录到
System.out,所以我使用了Output Stream的实现,它同时记录了初始out和我的copy流对象。copy在beforeIteration()中被清除,并附加到 RunListener 中afterIteration()的报告中,因此每个测试接收器都有自己的输出部分。 -
这是否意味着您已经解决了自己的问题,或者您需要更多帮助?如果您解决了问题,最好在此处的答案中更详细地描述您的解决方案,以使每个人都受益。这样,您可以 (a) 接受您自己的解决方案以结束问题,并 (b) 向您寻求帮助的社区返回一些内容。 :-)
标签: testing logging automated-tests spock