Сценарий, вызывающий Exception в соответствии с логикой питона, но Test Case все еще передается в рамках робота - PullRequest
0 голосов
/ 09 июля 2019

Я - новая пчела в Роботе, и у меня возникли проблемы с исполнением моего скрипта.

Мой случай не работает правильно в соответствии с логикой питона. Однако робот все еще проходит его. Я совершенно уверен, что пропустил что-то в конце скрипта робота, например, какое-то ключевое слово

Любые предложения и предложения приветствуются

Я пытался запустить Keywork, если, но я не знаю, как его использовать. Пожалуйста, смотрите мой код Python и код робота ниже

robot script:

*** Settings ***
Documentation       TC2
Library             exception
#Library           common_functions

*** Keywords ***

Run Keyword if 'FAIL' in $output

*** Test Cases ***
TEST CASE TWO
    validation

код питона:

import os
import re


def validation():
    try:
        if 'loopback is up, line protocol is up' in open('1.txt').read():
            print("string found")

        else:
            print ("string not found")
            raise Exception("string not found")

    except:
        cleanup()

def cleanup():
    print("cleanup is in progress")


validation()

Ожидаемый результат:

  1. Сценарий Python, показывающий: строка не найдена Идет очистка

  2. Робот должен показывать ошибку

Фактическая выработка:

  1. Сценарий Python, показывающий: строка не найдена выполняется очистка

  2. Сценарий робота, показывающий PASS

Ответы [ 2 ]

3 голосов
/ 09 июля 2019

Не перехватывайте исключение в своем коде Python, пусть это не сработает при выполнении робота.Вы можете выполнить очистку в тестовом разделе .

import os
import re


def validation():
    if 'loopback is up, line protocol is up' in open('1.txt').read():
        print("string found")

    else:
        print ("string not found")
        raise RuntimeError("string not found")


def cleanup():
    print("cleanup is in progress")

*** Settings ***
Documentation       TC2
Library             exception

*** Test Cases ***
TEST CASE TWO
    validation
    [Teardown]    cleanup
2 голосов
/ 09 июля 2019

(первое предположение, ничего не зная о каркасе робота, но собираясь погрузиться в него): Ваш скрипт робота ищет 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
==============================================================================
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...