{"library":"pyats-easypy","title":"pyATS Easypy","description":"pyATS Easypy is the launcher and runtime environment for executing pyATS test scripts and harnesses. It provides jobfile parsing, plugin management, and the overall execution framework for network test automation. Part of the broader pyATS ecosystem from Cisco, it is actively maintained with frequent releases, currently at version 26.3, often following a monthly or bi-monthly cadence aligning with other pyATS components.","language":"python","status":"active","last_verified":"Sun May 17","install":{"commands":["pip install pyats-easypy"],"cli":{"name":"easypy","version":"Traceback (most recent call last):"}},"imports":["from pyats import aetest","from pyats.easypy import main"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import os\nfrom pyats import aetest\n\nclass CommonSetup(aetest.CommonSetup):\n    @aetest.subsection\n    def initial_setup(self):\n        self.parent.parameters['example_param'] = 'Hello, pyATS!'\n        self.log.info(f\"Running initial setup with param: {self.parent.parameters['example_param']}\")\n\nclass Testcase1(aetest.Testcase):\n    @aetest.test\n    def example_test(self):\n        param = self.parent.parameters['example_param']\n        self.log.info(f\"Executing example_test with param: {param}\")\n        assert param == 'Hello, pyATS!'\n\nclass CommonCleanup(aetest.CommonCleanup):\n    @aetest.subsection\n    def final_cleanup(self):\n        self.log.info(\"Running final cleanup.\")\n\n# To run this script:\n# 1. Save it as e.g., `my_test.py`\n# 2. Run from your terminal: `easypy my_test.py`\n# Optional: To specify a testbed (e.g., if tests use device connections):\n#    `easypy my_test.py --testbed-file my_testbed.yaml`\n#    For quick demo, --testbed-file isn't strictly needed for this simple test.","lang":"python","description":"Create a simple AETest script and run it using the `easypy` command-line utility. The `easypy` command acts as the main runner for pyATS test jobs. This example demonstrates a basic test with CommonSetup, a Testcase, and CommonCleanup.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-17","installed_version":"25.9","pypi_latest":"26.4","is_stale":true,"summary":{"python_range":"3.10–3.9","success_rate":70,"avg_install_s":10.6,"avg_import_s":null,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"pyats-easypy","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"256.3M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"pyats-easypy","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":11.2,"import_time_s":null,"mem_mb":null,"disk_size":"118M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"pyats-easypy","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"pyats-easypy","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":9.8,"import_time_s":null,"mem_mb":null,"disk_size":"123M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"pyats-easypy","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"pyats-easypy","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":8.6,"import_time_s":null,"mem_mb":null,"disk_size":"126M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"pyats-easypy","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"pyats-easypy","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":8.9,"import_time_s":null,"mem_mb":null,"disk_size":"125M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"pyats-easypy","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"121.0M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"pyats-easypy","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":14.5,"import_time_s":null,"mem_mb":null,"disk_size":"313M"}]}}