RobotFramework Guide

Robot Framework is generic Python/Java test automation framework that focuses on acceptance test automation by through English-like keyword-driven test approach.

Robot Framework support has been added through the optional robot sub-package under Genie.libs namespace. This enables RobotFramework users to leverage key aspects of Genie without having to reinvent the wheel. Robot Framework libraries have also been added for pyATS and Unicon.

Genie keywords

Installation

Robot Framework support is an optional component under Genie. To use it, you must install this package explicitly:

pip install --upgrade genie.libs.robot

Features

  • run Genie Triggers and converting results to Robot

  • run Genie Verifications and converting results to Robot

  • Execute Genie Ops object to learn about a feature

  • Metaparser support (Can re-use any existing parser)

  • Custom verify functions, such as:
    • Verify x amount of bgp routes on a device

    • Verify x amount of up interfaces on a device

  • Genie Device API support, all API functions can be used as a keyword, simply replace the ‘_’ to a space and put it in your .robot file with the arguments. Make sure to import genie.libs.robot.GenieRobotApis as a library.

  • Dq support

Example of calling device APIs with robot

*** Settings ***
# Importing test libraries, resource files and variable files.
Library        ats.robot.pyATSRobot
Library        genie.libs.robot.GenieRobot
Library        genie.libs.robot.GenieRobotApis

${testbed}    testbeds/my_tb.yaml

*** Test Cases ***

Initialize
        # Initializes the pyATS/Genie Testbed
        use genie testbed "${testbed}"

        # Connect to both device
        connect to device "PE1" via "cli"

test
        shut interface                          Loopback0       device=PE1
        verify interface config shutdown        Loopback        device=PE1
        unshut interface                        Loopback0       device=PE1
        verify interface config no shutdown     Loopback0       device=PE1

Note

Genie Robot librairies is open sourced under genie.libs, it can be enhanced to add additional keywords.

Keywords

For the complete set of keywords supported by this package, refer to Genie Keywords.

Example

# Example
# -------
#
#   Demonstration of Genie Robot Framework Keywords

** Settings ***
Library        ats.robot.pyATSRobot
Library        genie.libs.robot.GenieRobot
Library        unicon.robot.UniconRobot

*** Variables ***
# Defining variables that can be used elsewhere in the test data.
# Can also be driven as dash argument at runtime
${testbed}     tb.yaml

*** Test Cases ***
# Creating test cases from available keywords.

Connect
    use genie testbed "${testbed}"
    connect to devices "N95_1"

parser show version
    ${output}=    parse "show module" on device "N95_1"

Verify version
    dq query    data=${output}   filters=contains('lc').not_contains('2').get_values('slot/world_wide_name')


Learn bgp
    ${output}=    learn "bgp" on device "N95_1"

verify Bgp before trigger
    run verification "Verify_BgpAllNexthopDatabase" on device "N95_1"

Trigger sleep
    run trigger "TriggerSleep" on device "N95_1" using alias "cli"

verify Bgp after trigger
    run verification "Verify_BgpAllNexthopDatabase" on device "N95_1"

verify bgp count
    verify count "6" "bgp neighbors" on device "N95_1"

verify bgp routes
    verify count "100" "bgp routes" on device "N95_1"

Note

Different location for trigger_datafile and verification_datafile can be provided within the Variables section. By default it uses these ones:

${trigger_datafile}     ${VIRTUAL_ENV}/genie_yamls/nxos/trigger_datafile_nxos.yaml ${verification_datafile}     ${VIRTUAL_ENV}/geine_yamls/nxos/verification_datafile_nxos.yaml

System Profiling

Robot user can now verify the testbed unchanged state by profiling the system at different stages during the run and using those profiles as reference points at later stages or even in other runs.

When the user profile the system and uses the option to store the profile on a mount, actually two files get created at the run directory. One is json file showing the full structure of the learnt features and the other is a pickled version which can be used later for comparison as shown in details in the below example.

# Example
# -------
#
#   Demonstration of Genie Robot Framework Keywords with System Profiling

** Settings ***
Library        ats.robot.pyATSRobot
Library        genie.libs.robot.GenieRobot
Library        unicon.robot.UniconRobot

*** Variables ***
# Defining variables that can be used elsewhere in the test data.
# Can also be driven as dash argument at runtime

${testbed}     tb.yaml
${PTS}         /path/file

*** Test Cases ***
# Creating test cases from available keywords.

Connect
    use genie testbed "${testbed}"
    connect to devices "R1"

# Profile bgp&ospf features and save the profile system on a mount
Profile bgp & ospf on All
    Profile the system for "bgp;ospf" on devices "R1;R2" as "/path/file"

Profile bgp & ospf on uut only
    Profile the system for "bgp;ospf" on devices "R1;R2" as "/path/file" using alias "uut"

# Profile bgp&ospf features and compare to the previously stored profile
Profile bgp & ospf on All and Compare to PTS
    Profile the system for "bgp;ospf" on devices "R1;R2" as "current"
    Compare profile "${PTS}" with "current" on devices "R1;R2"

Profile bgp & ospf on All and Compare to another profile "later"
    Profile the system for "bgp;ospf" on devices "R1;R2" as "current"

Run any testcase
    <Do some action>

# Profile bgp&ospf features and compare to the previously stored profile "current"
Profile bgp & ospf on All and Compare to another profile
    Profile the system for "bgp;ospf" on devices "R1;R2" as "later"
    Compare profile "later" with "current" on devices "R1;R2"

Note

Different location for pts_datafile can be provided within the Variables section. By default it uses these ones:

${datafile}    ${VIRTUAL_ENV}/genie_yamls/pts_datafile.yaml

Hint

Multiple snapshots can be saved within the same run and then compared.

Note

Device configuration can also be snapshotted by adding the name config.

Profile the system for "bgp;ospf;config" on devices "R1;R2" as "later"