RobotFramework Keyword variable not setting

10,911

Even though the code in the question still doesn't give the error you say it does because there are other errors that prevent it from running at all, the problem is this line:

${status} =  ${resp.status_code}

That is not the proper way to assign variables. You must use the Set Variable keyword (or some of the other "Set" keywords) , like so:

${status}=  Set Variable    ${resp.status_code}

The reason you get the error you do is that every test or keyword step must have a keyword. You only have variable names and no keyword, so you get the error Keyword name cannot be empty.

Share:
10,911

Related videos on Youtube

Ptrkcon
Author by

Ptrkcon

Updated on June 04, 2022

Comments

  • Ptrkcon
    Ptrkcon almost 2 years

    I am creating a smoke test suite for a series of APIs using the RobotFramework and the RobotRequestsLibrary. This is my first time using the RobotFramework. In trying to clean up the code and make it more maintainable I decided to try using Keywords to remove all incidental details.

    For example, here are two tests that I want to clean up:

    *** Variables ***
    ${sint}  http://int.somecoolwebsite.com
    
    *** Test Cases ***
    Retrieve Store Info By Code Should Return Successful
        [Tags]  get
        Create Session  data-int  ${sint}
        ${resp}=        Get Request  int  /store/1234
        Should Be Equal As Strings   ${resp.status_code}  200
    
    Retrieve All Store Info Should Return Successful
        [Tags]  get
        Create Session  data-int  ${sint}
        ${resp}=        Get Request  int  /stores
        Should Be Equal As Strings   ${resp.status_code}  200
    

    And my attempt at using Keywords:

    *** Variables ***
    ${sint}  http://int.somecoolwebsite.com
    
    *** Keywords ***
    Make ${call} Call To ${end_point}
        Create Session  ${sint}  ${sint}
        ${resp} =  Get Request  ${sint}  ${end_point}
        ${status} =  ${resp.status_code}
        Set Test Variable  ${status}
    
    Status Should Be ${required_status}
        Should Be Equal  ${status}  ${required_status}
    
    *** Test Cases ***
    Retrieve Store Info By Code Should Return Successful
        [Tags]  get
        Make Get Call To /store/1234
        Status Should Be 200
    
    Retrieve All Store Info Should Return Successful
        [Tags]  get
        Make Get Call To /stores
        Status Should Be 200
    

    When I run the test cases with the Keywords I get the following error:

    Keyword name cannot be empty.

    I tried to Debug the issue and put a break point in the Keyword assignment and I notice that ${resp} gets assigned and ${resp.status_code} also works. But when I try to assign {$status}= ${resp.status_code} the error is thrown.

    I tried varies ways to reassign the variable using the builtin Set Variable but did not have any luck. Can you not assign variables in this way in Keywords? Any insight will be helpful. Thanks!!

    • shicky
      shicky over 7 years
      sorry I don't have time to dig into this but from a brief read, a data-driven style might work better for what you're trying to do - robotframework.org/robotframework/latest/…
    • Russell Smith
      Russell Smith over 7 years
      The code in your question does not give the error you say it does. That code works fine for me.
    • Ptrkcon
      Ptrkcon over 7 years
      @BryanOakley you are right. I added the Set Variable declaration when writing in the code here. Without that, it does give an error. But in test cases I do not need to use that declaration.
    • Russell Smith
      Russell Smith over 7 years
      We can't help you if you don't show code that reproduces the problem.
    • Ptrkcon
      Ptrkcon over 7 years
      I updated the code so it produces the error.
    • Russell Smith
      Russell Smith over 7 years
      It still does not produce that error. Try cutting and pasting the code in the question to a file (and only the code in the question). You'll see there are other errors that occur before the one you are asking about.