Постановка задачи:
Не удалось передать несколько значений переменных в мой тестовый пример с помощью команды CumulusCI:
`cci task run robot...
Я ссылаюсь на этот раздел для создания моей команды: https://cumulusci.readthedocs.io/en/latest/tasks.html#id49
Если мне нужно передать только одну переменную так же, как указано выше, скажем, например. просто LocalOrRemote, тогда код работает отлично, поэтому кажется, что это должно что-то делать с тем, как я передаю несколько переменных.
Мой стек технологий автоматизации тестирования — Robot Framework, CumulusCI, Selenium.
Образец кода:
*** Settings ***
Resource C:/Dev/myproject/robotframework/EnvironmentSetupFile.robot
Suite Setup Run Keywords Suite Setup KW1 AND Suite Setup OS And Browser ${LocalOrRemote} ${Browser}
*** Test Cases ***
Verify whether I am able to set environment and browser
[Tags] LocalEdge
[Documentation] This test should run on the local edge browser
Keyword X
Keyword Y
*** Keywords ***
Suite Setup KW1
do something
Suite Setup OS And Browser
[Arguments] ${LocalOrRemote} ${Browser}
Log Many ${LocalOrRemote} ${Browser}
run keyword if '${LocalOrRemote}'=='Local' Setup Local Browser ${Browser}
... ELSE IF '${LocalOrRemote}'=='Remote' Setup Remote Browser ${Browser}
... ELSE FAIL "Incorrect environment value passed! Please refer the instructions in README for running the test suite"
Команда, которую я использую для вызова моего теста:
cci task run robot -o suites mypath/MyTestFile.robot -o include LocalEdge -o vars LocalOrRemote:Local,Browser:edge
Проблема, с которой я столкнулся:
Значение ${Browser}
не принимается как край, а по умолчанию равно хрому, что означает, что команда не может передать желаемое значение в TC.
KEYWORD BuiltIn . Log Many ${LocalOrRemote}, ${Browser}
Documentation:
Logs the given messages as separate entries using the INFO level.
Start / End / Elapsed: 20190522 16:36:53.877 / 20190522 16:36:53.878 / 00:00:00.001
16:36:53.877 INFO Local
16:36:53.877 INFO chrome
Я не могу воспроизвести проблему. Когда я запускаю ваш точный тест и предоставляю фиктивные реализации отсутствующих ключевых слов, тест регистрирует «край» как браузер, когда я использую точную командную строку, которую вы указали в своем вопросе. Возможно, это ваше ключевое слово Setup local kw1
, которое меняет значение ${browser}
. Другими словами, способ передачи нескольких переменных — это именно то, как вы это делаете.
Чтобы исключить ошибку в cci, я рекомендую вам начать с чрезвычайно простого теста, который ничего не делает, кроме регистрации значений переменных. Я предполагаю, что они покажут значения, установленные в командной строке. Затем вы можете начать добавлять код обратно, чтобы увидеть, когда переменная изменится. Может быть, это файл ресурсов, может быть, это одно из других ваших ключевых слов.
Большое спасибо @Bryan за направление. Это был тот момент, когда вы испытываете такой благоговейный трепет перед своим собственным творением и забываете попробовать базовую отладку в своей среде.
В любом случае, проблема здесь заключалась в размещении ресурсов, как вы правильно указали. Обратите внимание на фрагменты кода до и после ниже. Проблема (на данный момент я не могу комментировать, что это проблема или недостаток) связана с размещением ресурса Salesforce.robot. Чтобы команда Cci передала правильное значение 2-й переменной, мне пришлось поместить этот ресурс в сам тестовый пример. Команда Cci не передала правильное значение второй переменной, когда я загрузил этот ресурс через файл среды; странный.
*** Settings ***
Documentation ###My setup before:
Resource C:/Dev/myproject/robotframework/EnvironmentSetupFile.robot
Suite Setup Run Keywords Suite Setup KW1 AND Suite Setup OS And Browser ${LocalOrRemote} ${Browser}
Documentation ###My setup after:
Resource C:/Dev/myproject/robotframework/EnvironmentSetupFile.robot
Resource cumulusci/robotframework/Salesforce.robot #had to place this resource here
Suite Setup Run Keywords Suite Setup KW1 AND Suite Setup OS And Browser ${LocalOrRemote} ${Browser}
*** Test Cases ***
Verify whether I am able to set environment and browser
[Tags] LocalEdge
[Documentation] This test should run on the local edge browser
Log "TC passed"
Моя установка до:
C:/Dev/myproject/robotframework/EnvironmentSetupFile.robot
*** Keywords ***
Suite Setup KW1
Import Resource cumulusci/robotframework/Salesforce.robot #the resource that was causing the issue
Import Resource C:/Dev/myproject/robotframework/BrowserSetupKeywords.robot
import resource C:/Dev/myproject/robotframework/ValidationKeywords.robot
Import Library cumulusci.robotframework.CumulusCI ${ORG}
import library SeleniumLibrary timeout=7 seconds implicit_wait=5 seconds
import library OperatingSystem
import library BuiltIn
C:/Dev/myproject/robotframework/BrowserSetupKeywords.robot
*** Keywords ***
Suite Setup OS And Browser
[Arguments] ${LocalOrRemote} ${Browser}
Log Many ${LocalOrRemote} ${Browser} #used to default Browser value passed to chrome
`
Моя установка после:
C:/Dev/myproject/robotframework/EnvironmentSetupFile.robot
*** Keywords ***
Suite Setup KW1
#Import Resource cumulusci/robotframework/Salesforce.robot # had to comment this resource here and place it before the Suite Setup
Import Resource C:/Dev/myproject/robotframework/BrowserSetupKeywords.robot
import resource C:/Dev/myproject/robotframework/ValidationKeywords.robot
Import Library cumulusci.robotframework.CumulusCI ${ORG}
import library SeleniumLibrary timeout=7 seconds implicit_wait=5 seconds
import library OperatingSystem
import library BuiltIn
C:/Dev/myproject/robotframework/BrowserSetupKeywords.robot
*** Keywords ***
Suite Setup OS And Browser
[Arguments] ${LocalOrRemote} ${Browser}
Log Many ${LocalOrRemote} ${Browser} #now returns the correct Browser value
How to pass multiple arguments to a test case in CumulusCI test automation framework?
То, как вы это делаете, правильно: -o vars var1:value1,var2:value2
Вот очень простой пример:
*** Test cases ***
Example
Should be equal ${LocalOrRemote} Local
Should be equal ${Browser} edge
Сохраните это в файл, а затем запустите его с задачей робота следующим образом:
cci task run robot -o vars LocalOrRemote:Local,Browser:edge -o suites example.robot
Вы увидите, что переменные инициализированы правильно. Если открывается не тот браузер, возможно, одна из ваших библиотек меняет значение переменной ${Browser}
без вашего ведома.
Я добавил этот вопрос неделю назад на биржу стека Salesforce связь, однако ответа на него пока нет; отсюда и надежда, что размещение его здесь привлечет больше внимания.