PyATS 简介
PyATS(Python Automated Test System)是由思科公司开发的一套强大的网络测试和自动化解决方案。它最初是为思科内部工程师使用而开发的,现已成为思科测试自动化解决方案的核心组件。PyATS 不仅被思科内部广泛使用,每月运行数百万次 CI/CD、健全性、回归、规模和高可用性测试,还受到全球数千名网络工程师和开发人员的青睐。
PyATS 的设计理念是像乐高积木一样,由可扩展的层构建而成。整个解决方案主要包含以下几个部分:
- 基础平台 - 原始的 PyATS 框架
- 标准开源、平台/供应商无关的库系统(Genie)
- 用于管理测试套件、测试台、测试结果及其见解的 Web 仪表板(XPRESSO)
- 以库、扩展、插件和 API 形式存在的多个绑定
这种模块化的架构使用户能够在基础设施堆栈之上构建自己的业务逻辑和解决方案。
PyATS 的优势
作为一个专门的网络测试框架,PyATS 具有以下几个突出的优势:
-
多功能性: PyATS 可用于执行健全性、特性、解决方案、系统和规模测试,适用于从路由器/交换机到接入点、防火墙和有线 CPE 等多种产品。
-
可扩展性: PyATS 允许开发人员从小型、简单和线性的测试用例开始,然后逐步扩展到大型、复杂和异步的测试套件。
-
平台无关性: PyATS 的设计理念是平台无关的。所有操作系统/平台和管理协议支持都是通过插件、库实现和扩展来定义和注入的。
-
丰富的库支持: PyATS 内置了支持 Cisco IOS、IOSXE、IOSXR、NXOS、ASA 等多种平台的库,并支持通过 CLI、NETCONF 或 RESTCONF 进行设备连接。
-
数据驱动: PyATS 专注于数据驱动和可重用测试,非常适合敏捷和快速开发迭代。
-
开源生态: 作为开源项目,PyATS 拥有活跃的社区支持,用户可以方便地获取资源和帮助。
PyATS 的核心组件
1. PyATS 基础框架
PyATS 基础平台框架是整个解决方案的核心,它专门用于数据驱动和可重用测试。这个强大的、高度可插拔的 Python 框架旨在使开发人员能够从小型、简单和线性的测试用例开始,然后扩展到大型、复杂和异步的测试套件。
2. Genie 库系统
Genie 是 PyATS 的标准网络设备库,它重新定义了网络工程师执行测试和脚本编写的方式。Genie 提供了网络测试自动化所需的所有组件,使网络工程师和 NetDevOps 从第一天起就能够使用 Genie 现成的、全面的和模型驱动的库高效工作。
Genie 在 PyATS 的基础上进行了扩展,提供了以下功能:
- 设备连接、解析器、API
- 平台无关的 Python 对象模型,用于 OSPF、BGP 等功能
- 可重用测试用例池
- YAML 驱动的测试运行器引擎
3. XPRESSO Web UI 仪表板
XPRESSO 是围绕 PyATS 构建的标准 UI 仪表板,具有以下特点:
- 测试套件和测试环境管理
- 测试台和测试资源管理
- 测试执行:按需运行、批量运行、计划运行,支持 Jenkins 和基于 Docker 的执行后端
- 测试运行时的实时视图
- 结果归档、显示、比较、分析等功能
XPRESSO 可以灵活部署:可以在实验室中作为测试中心部署,集成到 CICD 管道中;也可以在笔记本电脑上部署,作为便携式测试系统使用。
PyATS 的安装和使用
安装 PyATS
安装 PyATS 需要 Python 3.5+ 版本。推荐使用虚拟环境进行安装:
# 创建虚拟环境
python3 -m venv pyATS_Test
# 激活虚拟环境
source pyATS_Tests/bin/activate
# 安装 PyATS
pip3 install "pyats[full]==23.9"
使用 PyATS
以下是一个简单的 PyATS 使用示例,演示如何连接设备并获取接口信息:
from pyats.topology import loader
# 加载测试台配置
testbed = loader.load('./testbed.yaml')
# 获取设备对象
device = testbed.devices["iosxr1"]
# 连接设备
device.connect()
# 执行命令并获取输出
output = device.execute('show ip interface brief')
# 打印输出
print(output)
# 断开连接
device.disconnect()
这个示例展示了 PyATS 的基本使用流程:加载测试台配置、连接设备、执行命令、获取输出、断开连接。
PyATS 在 NetDevOps 中的应用
PyATS 在 NetDevOps 中扮演着重要角色,主要体现在以下几个方面:
-
网络健康检查自动化: 使用 PyATS 可以轻松实现定期的网络设备健康检查,及时发现潜在问题。
-
网络故障排除和调试: PyATS 提供了强大的解析和比较功能,可以快速定位网络配置或状态变化,加速故障排除过程。
-
网络测试自动化: 通过 PyATS,可以构建全面的网络测试套件,覆盖从单个设备功能到复杂网络场景的各种测试需求。
-
配置管理和合规性检查: PyATS 可以用于自动化配置管理流程,确保网络设备配置符合预定义的标准和最佳实践。
-
网络变更验证: 在进行网络变更时,可以使用 PyATS 快速验证变更的影响,确保网络功能正常。
结语
PyATS 作为一个强大的网络测试和自动化工具,为网络工程师提供了前所未有的效率和能力。它不仅简化了复杂的网络测试和验证流程,还为 NetDevOps 实践提供了坚实的基础。随着网络复杂性的不断增加,PyATS 将继续发挥重要作用,帮助工程师更好地管理和优化网络基础设施。
无论您是网络工程师、开发人员还是 DevOps 从业者,掌握 PyATS 都将为您的职业发展带来显著优势。我们鼓励读者深入探索 PyATS 的更多功能,将其整合到日常工作流程中,以提高网络运维效率和质量。