Cisco pyATS: Network Test & Automation Solution

pyATS

Originally developed for internal Cisco engineering use, pyATS is at the core of Cisco's Test Automation Solution.

It's currently used:

  • as the de-facto test framework for internal Cisco engineers across different platform/functions, running millions of CI/CD, sanity, regression, scale, HA, solution... tests on a monthly basis.

  • by thousands of network engineers and developers world-wide, outside of Cisco.

In Cisco, pyATS provides sanity, feature, solution, system, and scale test & verification automation for products ranging from routers/switches, to access points, firewalls and cable CPEs.

pyATS

Built using extensible layers like lego blocks, pyATS solution consists of:

  • a foundational platform (eg, the original pyATS framework)
  • a standard open-source, platform/vendor agnostic library system (Genie)
  • a web dashboard to manage your test suites, testbeds, test results and their insights (XPRESSO)
  • multiple bindings to other frameworks in the form of libraries, extensions, plugins and APIs.

enabling users to build their own business logic and solutions on top of the infrastructure stack.

Origins

Originally known as:

pyATS: the core framework, Genie: the pyATS standard library, and XPRESSO: the pyATS Web Dashboard

pyATS and Genie were developed side by side in the same team, in proper software stack/layers, with pyATS being the generic all-purpose framework, and Genie extending its capabilities and specializing in network device automation & validation.

As much as we will continue to try and keep the software implementation layered, modular & extensible, the team has been working hard on simplifying the user experience & nomenclature.

As such - today, the two together forms the Cisco pyATS Solution, or simply known as: pyATS.

Foundation

The pyATS base platform framework specializes in data-driven and reusable testing, and is engineered for Agile, rapid development iterations.

This powerful, highly-pluggable Python framework is designed to enable developers start with small, simple and linear test cases, then scale towards large, complex and asynchronous test suites.

Library System

Genie: the standard pyATS network device library

Genie redefines how network engineers perform testing and scripting. It comes out of the box with all the bits needed for Network Test Automation. Meaning that network engineers and NetDevOps can be productive day one with Genie's readily available, holistic and model-driven libraries.

Genie extends on and builds on pyATS to provide:

  • device connectivity, parsers, apis
  • platform agnostic Python object models for features such as ospf, bgp
  • pool of reusable test cases
  • YAML-driven test runner engine

UI Dashboard

XPRESSO: the pyATS Web UI Dashboard

Using pyATS and Genie, our users can build highly powerful and custom-tailored scripts and test suites for their own business purposes. These scripts naturally run in a shell/text, pure Python environment.

Once comfortable with script's functionality and flow, you'll need a place to home them - so you and your peers can run them, on-demand, and visualize the results. This is where XPRESSO comes in.

XPRESSO is the standard UI dashboard built around pyATS, featuring:

  • test suite and test environment management
  • testbed and test resources management
  • test execution: on-demand, bundle-runs, scheduled-runs, supporting both Jenkins and Docker-based execution back-ends
  • live-view of tests while they are running
  • results archiving, display, comparisons, analytics
  • and more

XPRESSO can be deployed flexibly: in your lab as a test-center, integrating into the rest of your CICD pipelines; or on a laptop, as a portable test system: plug your laptop to a device's console, run diagnostics suites with the click of a button.

Visit https://github.com/CiscoTestAutomation/xpresso for more details.

Agnostic By Design

The solution is built from the ground up to be an agnostic infrastructure. All OS/Platform and management protocol support is defined and injected through plugins, library implementations & extensions.

Out of the box, it comes with libraries that support:

  • Cisco IOS
  • Cisco IOXE
  • Cisco IOSXR
  • Cisco NXOS
  • Cisco ASA
  • ... etc

and allows the device connections via CLI, NETCONF, or RESTCONF.

Additional support for 3rd-party platforms and other management protocols can be easily achieved through plugins and library extensions.