Аргументы командной строки для платформы Robot через файл python - PullRequest
1 голос
/ 19 мая 2019

язык : python - 3.7.3 Фреймворк робота - 3.1.1 уровень : Новичок

Я хочу передать аргументы в pythonПеременные файла из командной строки, а затем хотите распечатать их из файла робота, добавив файл Python в качестве переменной.

cmd (Variables) --> python file --> robot (print those variables) 

Но, очевидно, ни одна из попыток не дала ожидаемых результатов.Будем весьма благодарны за любые рекомендации.

Примечание: Файлы роботов и Python находятся в одном каталоге в Pycharm IDE.

Командная строка: -

1st try: robot -d Report -V test.py Test_sample.robot|py test.py test@test.com test@123 QA1

2nd try: robot -d Report Test_sample.robot|py test.py test@test.com test@123 QA1

3rd try: robot -d Report --Variablefile py test.py Test_sample.robot|py test.py test@test.com test@123 QA1

4th try: robot -d Report -V | py test.py test@test.com test@123 QA1| Test_sample.robot

Python: -

import sys

username = str(sys.argv[1])
password = str(sys.argv[2])
environment = str(sys.argv[3])

Робот: -

*** Settings ***
Library     SeleniumLibrary
Library     Collections
Variables  test.py

*** Test Cases ***
Pass variables from Python File

        log to console  The usr is: "${username}"
        log to console  The pwd is: "${password}"
        log to console  The env is: "${environment}"

Ожидается:

Имя пользователя: test@test.com Значение pwd: test @ 123 Значение env: QA1

Фактическое значение:

[ ERROR ] Unexpected error: OSError: [Errno 22] Invalid argument
Traceback (most recent call last):
  File "<<Dir path>>\python\python37-32\lib\site-packages\robot\utils\application.py", line 83, in _execute
    rc = self.main(arguments, **options)
  File "<<Dir path>>\python\python37-32\lib\site-packages\robot\run.py", line 439, in main
    result = suite.run(settings)
  File "<<Dir path>>\python\python37-32\lib\site-packages\robot\running\model.py", line 222, in run
    self.visit(runner)
  File "<<Dir path>>\python\python37-32\lib\site-packages\robot\model\testsuite.py", line 168, in visit
    visitor.visit_suite(self)
  File "<<Dir path>>\python\python37-32\lib\site-packages\robot\model\visitor.py", line 84, in visit_suite
    if self.start_suite(suite) is not False:
  File "<<Dir path>>\python\python37-32\lib\site-packages\robot\running\runner.py", line 83, in start_suite
    test_count=suite.test_count))
  File "<<Dir path>>\python\python37-32\lib\site-packages\robot\output\output.py", line 51, in start_suite
    LOGGER.start_suite(suite)
  File "<<Dir path>>\python\python37-32\lib\site-packages\robot\output\logger.py", line 200, in start_suite
    logger.start_suite(suite)
  File "<<Dir path>>\python\python37-32\lib\site-packages\robot\output\console\verbose.py", line 35, in start_suite
    self._writer.suite_separator()
  File "<<Dir path>>\python\python37-32\lib\site-packages\robot\output\console\verbose.py", line 104, in suite_separator
    self._fill('=')
  File "<<Dir path>>\python\python37-32\lib\site-packages\robot\output\console\verbose.py", line 110, in _fill
    self._stdout.write('%s\n' % (char * self._width))
  File "<<Dir path>>\python\python37-32\lib\site-packages\robot\output\console\highlighting.py", line 53, in write
    self.flush()
  File "<<Dir path>>\python\python37-32\lib\site-packages\robot\output\console\highlighting.py", line 66, in flush
    self.stream.flush()
Exception ignored in: <_io.TextIOWrapper name='<stdout>' mode='w' encoding='cp1252'>
OSError: [Errno 22] Invalid argument

Ответы [ 2 ]

3 голосов
/ 19 мая 2019

В комментарии вы написали:

Моя цель - передать учетные данные из командной строки.

Робот поддерживает это с помощью --variable-v) опция командной строки.Использование этого перезапишет любую импортированную переменную или переменную, определенную в файле робота.

Например, вы можете установить значения по умолчанию для ваших учетных данных внутри самого теста:

*** Variables ***
${USER}         test@test.com
${PASSWORD}     test@123
${ENVIRONMENT}  QA1

*** Test cases ***
Example
    log to console  \n*****
    log to console  username: ${USER}
    log to console  password: ${PASSWORD}
    log to console  environment: ${ENVIRONMENT}

Вы можете изменить эти значенияиз командной строки, используя -v или --variable:

$ robot -v USER:bob -v PASSWORD:bob@123  -v ENVIRONMENT:QA2 ...

Если вам нужно получить доступ к этим переменным в функции python, не передавая их, вы можете использовать встроенное ключевое слово get_variable_value для получения значения:

from robot.libraries.BuiltIn import BuiltIn
...
user = BuiltIn().get_variable_value('${USER}')
1 голос
/ 19 мая 2019

Я не совсем уверен в этом, полагаю, нам также следует передать имя скрипта в sys.argv

sys.argv [0] в следующем примере - это имя переданного аргумента скрипта.

import sys
print "This is the name of the script: ", sys.argv[0]
print "Number of arguments: ", len(sys.argv)
print "The arguments are: " , str(sys.argv)

ссылка: https://www.pythonforbeginners.com/system/python-sys-argv

...