一、背景
SONIC系统 (Software for Open Network in the Cloud)是由微软发起的一套开源网络操作系统,目前生态已较成熟,国内的一线互联网厂商(百度/腾讯/阿里/字节/快手等)均选择SONIC系统作为自研交换机系统,用于自身数据中心内的网络建设。该系统最大亮点为软硬件解耦,即NOS兼容不同芯片的设备,该特性使得SONIC交换机的开发周期缩短,而对测试人员来说,需要在不同的硬件设备上验证相同的功能特性,最好的解决方法就是自动化测试!
二、SONIC自动化测试方法介绍
网络设备自动化整体思路流程:
配置自动化运行环境->对被测设备与辅助设备下发配置->对打流或协议工具进行配置->执行测试脚本->获取执行结果->上传自动化测试报告分析
在github社区上,SONIC也有一套开源的自动化测试项目,即sonic-mgmt,是个基于pytest的测试框架,项目里积累各模块的自动化测试代码, 同时可用于SONiC TestBed的快速部署。下面将简单介绍SONIC自动化测试在各个阶段中的部署或实现方式,以供参考。
1、配置自动化运行环境
SONIC自动化测试大约可分为2种测试执行环境:
一种是稳定版,即拥有固定的自动化环境:有长期稳定的服务器,服务器中已装好运行自动化所需要的所有软件库依赖;有固定可满足测试场景的测试拓扑,有丰富的测试仪接口以供打流发包;整个环境不会轻易发生迁移或变更。适用于家底丰富的厂商。
另一种是快速部署版,即sonic-mgmt项目在测试床部署阶段解决的问题,它支持在一台空的linux服务器环境中,快速部署测试床,让其具备运行sonic-mgmt项目中积累的自动化用例的条件。
测试拓扑定义
sonic-mgmt定义了多种物理拓扑,TOR角色的交换机与T0对应,其拓扑如下图所示:
- DUT下联端口连接到 PTF docker 模拟服务器,进行收发包测试
- DUT上联端口连接到VM模拟上一层级的交换机,进行BGP等协议报文交互
- 服务器通过网桥设置使流量发包携带vlan tag
- Fanout交换机进行端口级的vlan隔离,实现服务器逻辑端口与被测Sonic设备物理端口的一一对应。
服务器环境搭建:
服务器上需要修改网桥设置,需要安装自动化脚本执行过程中需要的安装库,如果不使用测试仪作为打流与协议模拟的工具,还需要安装PTF用来打流以及VM来进行协议交互。
Sonic-mgmt项目里使用的2个docker:
- Sonic-mgmt:里面有各类需要执行的依赖库,包括python、ansible等工具,也可以调用PTF,启用vm;
- Docker-ptf:由sonic-mgmt调用,负责报文的收发与验证。
2、对被测设备/辅助设备/打流或协议工具进行配置
传统交换机各家厂商都各有一套私有的命令行风格,SONIC作为开源交换机系统,配置下发更为灵活,配置方式有sudo、vtysh、sonic-cli、redis-cli等多种方式。
通过自动化实现对被测设备/辅助设备的配置下发,可以考虑多种方式例如ansible、paramiko、pexpect等;
打流工具社区有开源和商用仪表API等多种方式,可以根据自身情况选择。Sonic-mgmt社区项目主要是通过调用scapy库来完成测试过程中数据层面的报文收发与验证。
3、执行测试脚本
Sonic-mgmt项目是基于pytest的自动化框架,用例执行时有发现用例的原则。 同时pytest还有基于模块、全局、方法等的前后置函数,很适用于需要在测试前下发配置以及测试结束后需要清除配置的测试流程。
4、自动化测试报告分析
pytest测试框架支持优雅的allure测试报告,报告以图标的方式体现用例执行时间、用例数量、用例执行成功、失败的数量,以及多个维度的分析图。
报告示例(截取自网络)