vish4444
vish4444

Reputation: 5

How to pass multiple arguments to a test case in CumulusCI test automation framework?

Problem statement:

Unable to pass multiple variable values to my test case using CumulusCI command:

`cci task run robot...
  1. I am referring this section for building my command: https://cumulusci.readthedocs.io/en/latest/tasks.html#id49

  2. If I have to pass just one variable in the same way as above, say for eg. just LocalOrRemote, then the code works perfectly fine, so it appears that this has to do something with the way I am passing multiple variables.

  3. My test automation tech stack is Robot Framework, CumulusCI, Selenium

Sample Code:

*** 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"

Command I am using to invoke my test:

cci task run robot -o suites mypath/MyTestFile.robot -o include LocalEdge -o vars LocalOrRemote:Local,Browser:edge

Issue I am facing:

The value of ${Browser} is not received as edge but defaulted to chrome, which means the command is not able to pass on my desired value to the 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

Upvotes: 0

Views: 433

Answers (2)

Bryan Oakley
Bryan Oakley

Reputation: 385860

How to pass multiple arguments to a test case in CumulusCI test automation framework?

The way you are doing it is the correct way: -o vars var1:value1,var2:value2

Here's a really simple example:

*** Test cases ***
Example
    Should be equal  ${LocalOrRemote}  Local
    Should be equal  ${Browser}        edge

Save that to a file and then run it with the robot task like this:

cci task run robot -o vars LocalOrRemote:Local,Browser:edge -o suites example.robot 

You will see that the variables are initialized properly. If the wrong browser is opening up, one of your libraries must be changing the value of the ${Browser} variable without you realizing it.

Upvotes: 1

vish4444
vish4444

Reputation: 5

Thanks a ton @Bryan for the direction. It was that moment when you get so awestruck by your own creation and forget to try out basic debugging in your framework.

Anyway, the issue here was the placement of resources as you rightly pointed out. Observe the before and after code pieces below. The issue (well at this point I cannot comment that its an issue or shortcoming) revolves around the placement of Salesforce.robot resource. For the Cci command to pass the right value of the 2nd variable, I had to place this resource in the test case itself. The Cci command did not pass the right value of the 2nd variable when I had this resource loaded via an environment file; weird.

*** 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"

My setup before:

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

`

My setup after:

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

Upvotes: 0

Related Questions