Nano Hash - криптовалюты, майнинг, программирование

Данные, управляемые с использованием Robot framework - как создать PASS / FAIL в отчетах для каждого теста, считанного из файла

Я новичок в Robot и пытаюсь реализовать тестовый пример, управляемый данными, где я читаю данные из файла. Данные выглядят так:

TC1,user1,password1
TC2,user2,password2
TC3,user3,password3
TC4,user4,password4

Мой тестовый пример и ключевые слова приведены ниже:

*** Test Cases ***
Login TestCase
    ${data}=    Read Data From File    ${testFile}
    Process Test Data    ${data}

*** Keywords ***
Process Test Data
    [Arguments]    ${data}
    : FOR    ${row}    IN    @{data}
    \    ${status}=    Run Keyword And Return Status    Perform Login ${row}

Perform Login
    [Arguments]    ${row}
    Login using    ${row[1]}   ${row[2]}

Теперь при запуске «Тестового набора входа» в созданном отчете отображается

'Total 1 Pass 1 Fail 0'. 

Мой вопрос в том, как я могу получить отчет о сгенерировании Pass / Fail для каждой строки, т.е.

'Total N Pass X Fail Y' , where N=number of rows in data file and X+Y=N

Я попытался поместить цикл For внутри «Login Testcase», но все равно получил тот же результат. Любые идеи / помощь приветствуются!

Обновление: Итак, я попытался изменить тесты (не читая файл данных), как показано ниже:

*** Settings ***
Test Template     Perform Login

*** Test Cases ***
Login TestCase
    TC1    user1    password1
    TC2    user2    password2
    TC3    user3    password3
    TC4    user4    password4

*** Keywords ***
Perform Login
    [Arguments]    ${tc#}    ${username}    ${password}
    Login using    ${username}    ${password}

При этом «Выполнить вход» выполняется 4 раза, но в выходных данных отчета по-прежнему отображается
«Всего 1 Прошел 1 Не прошел 0».

Я не уверен, правильно ли я использую тестовый шаблон, а также как читать данные из файла и использовать их для каждой итерации тестового примера.

Обновление2:

*** Settings ***
Test Template     Perform Login

*** Test Cases ***
TC1    user1    password1
TC2    user2    password2
TC3    user3    password3
TC4    user4    password4

*** Keywords ***
Perform Login
    [Arguments]    ${username}    ${password}
    Login using    ${username}    ${password}

Когда я изменяю тестовые наборы таким образом, я получаю

'Total 4 Pass 3 Fail 1', which is what I expect.

Но в этом случае я не уверен, как использовать данные, прочитанные из файла. Пожалуйста, помогите / поделитесь своими идеями о том, как я могу использовать файл данных для кормления моих тестов !!

21.03.2017

Ответы:


1

Просто следуйте документации: http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#data-driven-style Вы должны определить Test Template: http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#test-templates

21.03.2017
  • Спасибо за ваш ответ. Я пробовал использовать тестовый шаблон, и он работает, когда я помещаю данные в тестовый набор. Я не мог найти способ использовать данные, считанные из файла, для заполнения тестовых наборов. *** Настройки *** Пример шаблона тестового шаблона *** Тестовые примеры *** Вход в систему Testcase TC1 user1 password1 TC2 user2 password2 TC3 user3 password3 TC4 user4 password4 21.03.2017
  • А какое определение твоего Template Example? 21.03.2017
  • Кстати, лучше расширить исходный вопрос новой редакцией, чем использовать комментарий с ограниченными возможностями форматирования. При правильном форматировании он намного читабельнее. В любом случае вы все равно можете использовать обратные кавычки, чтобы пометить фрагмент кода в комментарии. 21.03.2017

  • 2

    Я постараюсь ответить на все возникшие у вас здесь вопросы с самого начала.

    Причина, по которой ваш тест показал только один успех, заключается в том, что у вас был только один тест. Позвольте мне рассказать вам об этом.

    Каждый файл .robot, который вы запускаете, на самом деле является Test Suite. В каждом Suite может быть несколько тестов, определенных в *** Test Cases ***. В каждом тестовом примере может быть несколько ключевых слов. Визуально это выглядит так:

    Suite
    |-Test
    |  |-Keyword
    |  |-Keyword
    |-Test
    |-Test
    

    Вы запускали сначала один тест с одним ключевым словом, затем один тест с четырьмя ключевыми словами. Тест будет пройден, только если пройдут все ключевые слова. Вы можете добавить другую логику, чтобы она прошла, если ни одно, некоторые или все ключевые слова не пройдут, но это базовая структура набора тестов Robot Framework. Выходные данные Robot Framework Test Suite покажут ровно один успешный / неуспешный результат для каждого теста, а не ключевое слово. В журнале будет отображаться Pass / Fail для каждого ключевого слова отдельно, но не в выводе консоли.

    Что касается чтения из файла, это особенно сложная проблема в Robot Framework, но более простым решением является создание списка и словаря в таблице переменных, как показано ниже:

    *** Variables ***
    @{users} =  user1  user2  user3  user4
    &{passwords} =  {'user1':'password1', 'user2':'password2', 'user3':'password3', 'user4':'password4'}
    

    Затем в своем цикле вы можете использовать :FOR ${user} IN @{users} и вызывать пароль с помощью ${passwords["${user}"]}, чтобы ссылаться только на пароль текущего пользователя.

    Единственные два известных мне способа прямого чтения из файла в базовой среде Robot Framework - это использование настраиваемого ключевого слова Python и библиотеки операционной системы. Это не полноценный язык программирования, больше похоже на специализированную оболочку для Python.

    10.10.2017

    3

    Я считаю, что этот вопрос попадает в сценарий, который робот в настоящее время не может решить. Сценарий такой:

    1. У вас есть набор точек данных в файле, которые вы хотите загружать динамически.
    2. Вы хотите запустить идентичные тесты для каждой точки данных.
    3. Вы хотите, чтобы робот сообщал, сколько из этих тестов прошло успешно и не удалось.

    Есть способы выполнить (1) и (2), загрузив данные в список и перебирая его в цикле for, как показано в вопросе. (Для полноты картины: это также можно сделать в виде шаблона с цикл for.) Однако этот цикл for всегда будет объединен в один тестовый пример в сводке.

    Вы можете выполнить (2) и (3) с помощью робота, управляемого данными набор, в котором точки данных перечислены в качестве тестовых примеров. (Этот метод упоминался в обновлении вопроса). Однако этот метод не может динамически загружать точки данных во время выполнения робота.

    Единственное решение, которое я вижу, - это преобразовать ваши данные в набор роботов, управляемых данными, с помощью некоторого скрипта, а затем запустить этот набор. Это потребует некоторого сценария оболочки для запуска робота. Это немного разочаровывает, поскольку моя компания надеялась, что Robot станет тестовой средой, которая заменит и охватит все другие среды.

    16.04.2020
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..