Robotframework 测试用例标记为失败后,无法查看设置测试消息日志值
我有以下代码:Robotframework 测试用例标记为失败后,无法查看设置测试消息日志值,robotframework,Robotframework,我有以下代码: *** Settings *** Library OperatingSystem Library Process Library String *** Variables *** @{MyList}= item items items2 ${LogStr1} *HTML* *** Test Cases *** #Start Test# [xxxxx] My tests FOR ${item} IN @{MyList}
*** Settings ***
Library OperatingSystem
Library Process
Library String
*** Variables ***
@{MyList}= item items items2
${LogStr1} *HTML*
*** Test Cases ***
#Start Test#
[xxxxx] My tests
FOR ${item} IN @{MyList}
General test.out testProfile ${item}
[Template] Run Test
[Tags] TestTags
END
*** Keywords ***
Run Test
[Documentation] Run the test
[Arguments] ${type} ${profile} ${file} ${test}
When suite config is updated
And updated the config in directory ${test}
Then publish test status
suite config is updated
[Documentation] Get the variables list
Log to Console "Updating get suite config file"
updated the config in directory ${test}
[Documentation] Get the variables list
Run keyword if "${test}" == "items" Stop Test "This is stop called"
publish test status
[Documentation] Create and check if any issue found
${LogStr}= Catenate Test Passed : Log created: <a href="Hello.txt">Hello</a>
Log to Console ${LogStr}
${LogStr1}= Catenate ${LogStr1} ${LogStr}\n
Set Test Variable ${LogStr1}
Set Test Message ${LogStr1}
Stop Test
[Documentation] Stop Execution
[Arguments] ${FIALUREMSG}
Log To Console ${FIALUREMSG}
${LogStr1}= Catenate ${LogStr1} ${FIALUREMSG}
Fail ${LogStr1}
在提到的关键字中,有两个测试用例通过了套件测试,但报告指出:
现在,如果我使第二个测试用例失败,我将得到以下测试消息日志:
Run keyword if "${test}" == "items" Stop Test "This is stop called"
在提到的关键字中,有两个测试用例通过了套件测试,但报告指出:
同样如果
Run keyword if "${test}" == "items2" Stop Test "This is stop called"
以此类推——因此,当测试用例被标记为失败时,“设置测试消息”日志值似乎在报告消息中被忽略。请注意,下面是我运行代码将第一个测试用例标记为失败时的log.html内容:
Run keyword if "${test}" == "item" Stop Test "This is stop called"
因此,我的问题是,如果我想让report.html文件显示所有失败和通过的测试用例的日志,我如何实现它?如果您检查关键字的文档,它会说任何失败都会覆盖消息,但您可以选择从拆卸中覆盖失败消息 在test teardown中,此关键字可以更改可能的失败消息, 但在其他情况下,故障会覆盖由该关键字设置的消息。注意 在拆卸过程中,消息作为内置变量可用
${TEST MESSAGE}
因此,您可以做的不是调用Set Test Message,而是将消息保存到一个测试变量中。然后,您应该添加一个拆卸,在该拆卸中调用Set Test消息,并将测试变量与${Test Message}
连接起来。例如:
*** Test Cases ***
Test
[template] Template
[setup] Set Test Variable ${MSG} ${EMPTY} # create empty test variable to store messages
1
3
2
5
6
4
6
[teardown] Set Test Message ${MSG}\n${TEST MESSAGE} # concatenate failure messages to normal test messages
*** Keywords ***
Template
[arguments] ${number}
No Operation
Run Keyword If ${number} == 2 Fail fail message ${number}
Run Keyword If ${number} == 4 Fail fail message ${number}
Set Test Variable ${MSG} ${MSG}\nMy test message ${number} # concatenate next test message
*** Settings ***
Test Template Template
*** Test Cases ***
Test1 1
Test2 2
Test3 3
Test4 4
Test5 5
Test6 6
*** Keywords ***
Template
[arguments] ${number}
No Operation
Run Keyword If ${number} == 2 Fail fail message ${number}
Run Keyword If ${number} == 4 Fail fail message ${number}
Set Test Message My test message ${number}
此示例生成以下报告:
使用这种方法,您可以在特定的robot套件中只有模板测试,因为测试用例表中列出的所有测试都将调用模板
另一个完全不同的解决方案是去掉
FOR
循环,因为@{MyList}
中的元素是静态的。如果将模板移动到中,然后手动列出所有迭代,则可以将它们中的每一个分离到一个独立的测试用例中。这样,一次迭代中的失败不会影响另一次迭代中的测试消息集。例如:
*** Test Cases ***
Test
[template] Template
[setup] Set Test Variable ${MSG} ${EMPTY} # create empty test variable to store messages
1
3
2
5
6
4
6
[teardown] Set Test Message ${MSG}\n${TEST MESSAGE} # concatenate failure messages to normal test messages
*** Keywords ***
Template
[arguments] ${number}
No Operation
Run Keyword If ${number} == 2 Fail fail message ${number}
Run Keyword If ${number} == 4 Fail fail message ${number}
Set Test Variable ${MSG} ${MSG}\nMy test message ${number} # concatenate next test message
*** Settings ***
Test Template Template
*** Test Cases ***
Test1 1
Test2 2
Test3 3
Test4 4
Test5 5
Test6 6
*** Keywords ***
Template
[arguments] ${number}
No Operation
Run Keyword If ${number} == 2 Fail fail message ${number}
Run Keyword If ${number} == 4 Fail fail message ${number}
Set Test Message My test message ${number}
这将产生以下报告:
如果您检查关键字的文档,它会说任何故障都会覆盖消息,但您可以选择从拆卸中覆盖故障消息 在test teardown中,此关键字可以更改可能的失败消息, 但在其他情况下,故障会覆盖由该关键字设置的消息。注意 在拆卸过程中,消息作为内置变量可用
${TEST MESSAGE}
因此,您可以做的不是调用Set Test Message,而是将消息保存到一个测试变量中。然后,您应该添加一个拆卸,在该拆卸中调用Set Test消息,并将测试变量与${Test Message}
连接起来。例如:
*** Test Cases ***
Test
[template] Template
[setup] Set Test Variable ${MSG} ${EMPTY} # create empty test variable to store messages
1
3
2
5
6
4
6
[teardown] Set Test Message ${MSG}\n${TEST MESSAGE} # concatenate failure messages to normal test messages
*** Keywords ***
Template
[arguments] ${number}
No Operation
Run Keyword If ${number} == 2 Fail fail message ${number}
Run Keyword If ${number} == 4 Fail fail message ${number}
Set Test Variable ${MSG} ${MSG}\nMy test message ${number} # concatenate next test message
*** Settings ***
Test Template Template
*** Test Cases ***
Test1 1
Test2 2
Test3 3
Test4 4
Test5 5
Test6 6
*** Keywords ***
Template
[arguments] ${number}
No Operation
Run Keyword If ${number} == 2 Fail fail message ${number}
Run Keyword If ${number} == 4 Fail fail message ${number}
Set Test Message My test message ${number}
此示例生成以下报告:
使用这种方法,您可以在特定的robot套件中只有模板测试,因为测试用例表中列出的所有测试都将调用模板
另一个完全不同的解决方案是去掉
FOR
循环,因为@{MyList}
中的元素是静态的。如果将模板移动到中,然后手动列出所有迭代,则可以将它们中的每一个分离到一个独立的测试用例中。这样,一次迭代中的失败不会影响另一次迭代中的测试消息集。例如:
*** Test Cases ***
Test
[template] Template
[setup] Set Test Variable ${MSG} ${EMPTY} # create empty test variable to store messages
1
3
2
5
6
4
6
[teardown] Set Test Message ${MSG}\n${TEST MESSAGE} # concatenate failure messages to normal test messages
*** Keywords ***
Template
[arguments] ${number}
No Operation
Run Keyword If ${number} == 2 Fail fail message ${number}
Run Keyword If ${number} == 4 Fail fail message ${number}
Set Test Variable ${MSG} ${MSG}\nMy test message ${number} # concatenate next test message
*** Settings ***
Test Template Template
*** Test Cases ***
Test1 1
Test2 2
Test3 3
Test4 4
Test5 5
Test6 6
*** Keywords ***
Template
[arguments] ${number}
No Operation
Run Keyword If ${number} == 2 Fail fail message ${number}
Run Keyword If ${number} == 4 Fail fail message ${number}
Set Test Message My test message ${number}
这将产生以下报告:
除了我的另一个答案之外,您还有第三个选择,但这是一个更高级的解决方案,所以我决定将其作为单独的答案发布 您可以用Python编写一个小的测试库,它也可以作为一个脚本。在这个侦听器库中,您需要三个函数,其中两个是关键字,一个是侦听器函数
\u log\u message
,如中所述。如果发生任何日志记录,框架将调用此函数。因此,当测试失败时,该关键字将接收失败的日志条目,该条目可保存以供以后使用。此功能(以开头)
在robot套件中不能作为关键字使用
def\u日志消息(self,message):
如果消息['level']='FAIL':
self.test_message=f“{self.test_message}\n{message['message']}”#连接失败消息
add_test_message
将替换代码中的Set test message关键字。其目的类似,即附加要设置为测试消息的消息。这可以作为关键字从robot套件中调用
def添加测试消息(self,message):
self.test_message=f“{self.test_message}\n{message}”连接正常测试消息
set_final_test_message
将为您设置实际的测试消息。必须在测试拆卸结束时调用此关键字,以确保没有其他故障会覆盖测试消息。它只是在内部调用Set Test Message关键字,并设置由前两个函数创建的字符串。这可以作为关键字从robot套件中调用
def set_final_test_消息(self):
"""
在测试用例拆卸结束时调用此关键字。
此关键字只能在测试拆卸中使用。
"""
BuiltIn()。_get_test_in_teardown('Set Final test Message')#检查我们是否在测试拆卸中,如果没有,则失败。
内置().set_test_消息(self.test_消息)#内部调用set test消息
测试用例
。这意味着将在每个测试用例之前创建一个新的库对象,有效地重置以前测试设置的任何消息
以下是库(TestMessageLibrary.py)的全部代码:
来自robot.libraries.Bu的