(первое предположение, ничего не зная о каркасе робота, но собираясь погрузиться в него): Ваш скрипт робота ищет FAIL
в $output
.Ваш вывод содержит string not found cleanup is in progress
(возможно, с другим форматированием, так как вы напечатали дважды, не указав не печатать переводы строки).В вашем выводе нет FAIL
.Возможно, вы хотели иметь
Run Keyword if 'string not found' in $output
в своем скрипте робота или
print("FAIL: string not found")
в вашем коде проверки?
ОБНОВЛЕНИЕ: Теперь, когда я провел некоторое время сдокументацию (они не позволяют легко научиться делать что-то простое), я могу сказать, что ответ Бенс Кауликс в основном правильный, возможно, в зависимости от того, какую версию вы используете.Для меня тест, показанный в его ответе, не удался с IndentationError
из-за try
без except
.Вот что у меня работает (как, в основном, не удается по ожидаемой причине):
.robot файл:
*** Settings ***
Documentation TC2
Library exception.py
*** Test Cases ***
TEST CASE TWO
validation
exception.py:
def validation():
try:
if 'loopback is up, line protocol is up' in open('1.txt').read():
result = 'string found'
else:
result = 'string not found'
raise RuntimeError(result)
except Exception as e:
result = 'string not found'
raise RuntimeError(result)
finally:
print(result)
cleanup()
def cleanup():
print("cleanup is in progress")
С учетом вышеизложенного я получаю вывод:
(robottestframework) ~/s/l/robottestframework> robot -L TRACE keyword_driven.robot
==============================================================================
Keyword Driven :: TC2
==============================================================================
TEST CASE TWO | FAIL |
string not found
------------------------------------------------------------------------------
Keyword Driven :: TC2 | FAIL |
1 critical test, 0 passed, 1 failed
1 test total, 0 passed, 1 failed
==============================================================================
Обратите внимание, что это меняет семантику того, что вы тестируете: вместо проверки значения стандартного вывода вы запускаете ключевое слово, импортированное из библиотеки, исбой, если возникло исключение.ИМО, это лучший способ, чем проверка стандартного вывода.Однако, если вам действительно нужно проверить значение stdout, вам понадобится что-то вроде:
.robot file:
*** Settings ***
Documentation TC2
Library Process
Suite Teardown Terminate All Processes kill=True
*** Test Cases ***
TEST CASE TWO
${result} = Run Process python exception.py
should not contain ${result.stdout} string not found
exception.py file:
def validation():
result = ''
try:
if 'loopback is up, line protocol is up' in open('1.txt').read():
result = 'string found'
else:
result = 'string not found'
raise RuntimeError(result)
except Exception as e:
result = 'string not found'
finally:
print(result)
cleanup()
return result
def cleanup():
print("cleanup is in progress")
validation()
С этими изменениями я получаю:
(robottestframework) ~/s/l/robottestframework> robot -L TRACE keyword_driven.robot
==============================================================================
Keyword Driven :: TC2
==============================================================================
TEST CASE TWO | FAIL |
'string not found
cleanup is in progress' contains 'string not found'
------------------------------------------------------------------------------
Keyword Driven :: TC2 | FAIL |
1 critical test, 0 passed, 1 failed
1 test total, 0 passed, 1 failed
==============================================================================