Castiel
Castiel

Reputation: 637

In RobotFramework, is it possible to run test cases in For-Loop?

So my issues might be of syntactic nature, maybe not, but I am clueless on how to proceed next. I am writing a test case on the Robot Framework, and my end goal is to be able to run ,multiple tests, back to back in a Loop.

In this cases below, the Log to Console call works fine, and outputs the different values passed as parameters. The next call "Query Database And Analyse Data" works as well.

*** Test Cases ***
| For-Loop-Elements
| | @{Items} =                    | Create List | ${120} | ${240} | ${240} 
| | :FOR                          | ${ELEMENT} | IN | @{ITEMS}
| | | Log To Console              | Running tests at Voltage: ${ELEMENT}
| | | Query Database And Analyse Data

But then, when I try to makes a test cases with documentation and tags with "Query Database And Analyse Data", I get the Error: Keyword Name cannot be Empty, which leads me to think that when the file gets to [Documentation tag], it doesn't understand that it is part of a test case. This is usually how I write test cases.

Please note here that the indentation tries to match the inside of the loop

*** Test Cases ***
| For-Loop-Elements
| | @{Items} =                    | Create List | ${120} | ${240} | ${240} 
| | :FOR                          | ${ELEMENT} | IN | @{ITEMS}
| | | Log To Console              | Running tests at Voltage: ${ELEMENT}

| | | Query Database And Analyse Data
| | | | [Documentation]           | Query DB.
| | | | [Tags]                    | query | voltagevariation

| | | Duplicates Test
| | | | [Documentation]           | Packets should be unique.
| | | | [Tags]                    | packet_duplicates | system
| | | | Duplicates

| | | Chroma Output ON
| | | | [Documentation]           | Setting output terminal status to ON
| | | | [Tags]                    | set_output_on | voltagevariation
| | | | ${chroma-status} =        | Chroma Output On | ${HOST} | ${PORT}

Now is this a syntax problem, indentation issue, or is it just plain impossible to do what I'm trying to do? If you have written similar cases, but in a different manner, please let me know!

Any help or input would be highly appreciated!

Upvotes: 0

Views: 9208

Answers (1)

jim
jim

Reputation: 906

You are trying to use Keywords as Test Cases. This approach is not supported by Robot Framework. What you could do is make one Test Case with a lot of Keywords:

*** Test Cases ***
| For-Loop-Elements
| | @{Items} =                    | Create List | ${120} | ${240} | ${240} 
| | :FOR                          | ${ELEMENT} | IN | @{ITEMS}
| | | Log To Console              | Running tests at Voltage: ${ELEMENT}
| | | Query Database And Analyse Data
| | | Duplicates
| | | ${chroma-status} =        | Chroma Output On | ${HOST} | ${PORT}

*** Keywords ***
| Query Database And Analyse Data
| | Do something
| | Do something else
...

You can't really fit [Tags] anywhere useful. You can, however, fire meaningful fail messages (substituting the [Documentation]) if instead of using a Keyword directly you wrapped it in Run Keyword And Return Status.

Furthermore, please have a look at data driven tests to get rid of the :FOR-loop completely.

Upvotes: 6

Related Questions