因此,对于我的robotframework项目,我一直在研究一种方法,以了解测试用例中的给定操作是否已“花费了比预期更长的时间”;这就是说,考虑到先前执行的结果,我可以知道某个动作通常需要多长时间,并且,如果某个动作超过该时间,我希望在日志文件中指出该事实。
为此,我使用了DateTime
库来比较时间,然后,如果测试用例开始与操作结束之间的时间差大于X秒,则WARN-级别的日志被打印到控制台和日志文件中。
但是,在该日志文件中,每个成功执行的关键字都以绿色显示,如屏幕截图所示:
我的问题是:如果给定关键字实际上超出了软超时,是否可以使该特定关键字以除绿色以外的任何其他颜色出现,以便:
我不想使用Robotframework固有的[Timeout]
功能,因为我不希望由于这种超时而导致测试失败。我只想使用我的Robotframework脚本,以一种简单的方法来识别潜在的性能或临时网络问题。
答案 0 :(得分:3)
在Robot Framework中,只有2种状态:PASS和FAIL,它们是驱动红色/绿色的状态。这与验证通常应通过或失败的情况的应用程序的性质一致。
一旦关键字或测试用例的性能变得有趣,那么我认为这不再应该成为测试套件本身的一部分。比较单个关键字/测试用例与基准的时间并不难。但是,如果您想在更长的时间内比较结果呢?您想将一种环境与另一种环境进行比较。然后,此设置将不起作用。因此,我建议使用报告或BI工具加载结果并创建性能报告。
如果这不可能,那么我可能会使用Test Case tags并使用“测试用例”消息来标记那些超出其基准的测试。在下面的示例中,有两个测试用例,其中第一个通过但超过了设置的基准。然后,通过报告功能,您可以过滤标签并使用“测试用例”消息显示逻辑错误。
*** Settings ***
Library DateTime
Test Setup Setup Metrics
Test Teardown Check Metrics
*** Variables ***
&{baseline} TC - Pass=1 TC - Fail=2
*** Test Cases ***
TC - Pass
Sleep 2s
No Operation
TC - Fail
Fail
*** Keywords ***
Setup Metrics
${tc_start} Get Current Date result_format=epoch
Set Test Variable ${tc_start} ${tc_start}
Check Metrics
${tc_end} Get Current Date result_format=epoch
${tc_duration} Subtract Time From Time ${tc_end} ${tc_start}
Run Keyword If ${tc_duration} > ${baseline['${TEST NAME}']} Mark Test ${tc_duration} ${baseline['${TEST NAME}']}
Mark Test
[Arguments] ${duration} ${baseline}
Set Tags Time Out
${difference} Subtract Time From Time ${duration} ${baseline}
Set Test Message The duration of ${duration} sec exceeded the baseline by ${difference} sec append=True
答案 1 :(得分:1)
不是以您描述的方式。绿色的关键字为Run Keyword If
,并且已成功执行。
可能的解决方法:
通过以下方式使用关键字Run Keyword And Continue On Failure
或Run Keyword And Ignore Error
(我无法确切地说出哪个):
Run Keyword And Continue On Failure Should Be True ${timeDiff} <= ${maxTimeout}
因此,如果表达式${timeDiff} <= ${maxTimeout}
不是true
,则Should Be True
将失败,并将在报告中标记为红色。但是,您需要将报告扩展到该关键字,因为它不在顶层。