Send variable from Project to test

Здравствуйте.

Михаил Поляруш заразил меня RobotFramework. Взялся за изучение. Пока пишу простые тесты вроде Hello word.

Возникло несколько вопросов.

1. Как использовать переменные, объявленные в проекте, в его тестах.

Создал в RIDE проект (это просто папка), в данном проекте объявил переменные => создался файл __init__.txt такого содержания

*** Settings ***
Documentation     My Test Project Document
Suite Setup       Log    Suite_setup
Test Setup        Log    Test setup

*** Variables ***
${scalar}         123

Создал тест в этом проекте

*** Settings ***
Documentation     *Документация на test_suite*
Library           OperatingSystem
Library           Collections

*** Variables ***
${dir}            sample_dir    # создаваемая директория
@{list1}          qw    111    we    333

*** Test case ***
First_Test
    [Documentation]    First Test Documentation
    Create_Directory    c:/WINDOWS/Temp/TMP/${dir}
    Log    "@{list1}"    INFO
    Log    ${scalar}    INFO

Тест не видит переменную ${scalar} из файла __init__.txt.

Ошибка: "Non-existing variable '${scalar}'."

Если добавить __init__.txt в качестве ресурса, то переменная успешно видится тестом:

Resource          c:\\WINDOWS\\Temp\\TMP\\Robot\\MyTestProject1\\__init__.txt

Но при этом ругается на Force Tag, проставленный для проекта

[ ERROR ] Error in file 'c:\WINDOWS\Temp\TMP\Robot\MyTestProject1\__init__.txt' in table 'Settings': Non-existing setting 'Force Tags'.

У меня такое ощущение, что общие переменные в TestSuite я использую неверно. Может быть, кто-нибудь подскажет, как сделать правильно.

2. В качестве Variable для TestSuite можно указать py-файл. Привидите, пожалуйста, пример этого файла.

 

Нашел ответы. Может быть, кому-то тоже пригодятся.

1. "Variables and keywords created or imported in initialization files are not available in the lower level test suites, but resource files can be used if there is a need to share them." (с) userguide

2. Переменные можно задавать динамически на любой вкус в отдельном файле, используя специальные функции. Таким образом, можно написать функцию, записывающую в переменную значение из базы данных, при обращении к ней (что мне и надо было). userguide

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

а вот как это делать в py- файле не знаю, и зачем, что это дает?

Robot Framework - это вирус :) Будут прикольно, если он распространиться как ОРЗ :)

на счет переменных, да тут надо правильно понимать область видимости, т.е. объявленая переменная на уровне suite будет только там и видна и в тесте она уже не будет доступна

и да, если хотите использовать переменные, выносите их в ресурс файл и потом его подключайте

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

т.е. вы создаете такой тест в котором используете только переменные, а сами переменные подгружаете при самом запуске ваших тестов

например как это можно сделать

 

создаете файл variable.py

#To create list in Robot Framework you should specify LIST__string. Example:
# simple_variable = 'value'
# LIST__simple_list = ["value1","value2"]
 
HOST_EXAMPLE = "http://host.com"
PORT_EXAMPLE = 8080
 
пишите тест test.txt
 
*** Settings ***
Library           OperatingSystem
 
*** Test Case ***
test1
    Log    ${HOST_EXAMPLE} and ${PORT_EXAMPLE}
 
а потом пишите запуск ваших тестов через pybot (например)
 
pybot -V variable.py test.txt
 
и таким образом вы можете с легкостью параметризировать ваши тесты под разные данные и окружение, если вам надо
 

Объявить функцию, которая будет возвращать Вам в тест переменную может быть необходимо по многим причинам, например:

  • формирование уникального идентификатора запроса
  • если данные для data-driven testing находятся в БД