自微软发起SONIC(Software for Open Network in the Cloud)项目后, 国内一线互联网厂商以及运营商也都在持续跟进,而关于测试这一块,目前在github社区上 sonic-mgmt都不断有代码更新,本篇文章将介绍一下sonic-mgmt执行函数,希望能帮助对sonic-mgmt感兴趣的伙伴们理解,也欢迎交流讨论。
一、sonic-mgmt执行方式的变迁
在2019年前,sonic-mgmt依靠的还是ansible,通过使用ansible-playbook来执行用例,但随着sonic-mgmt的不断优化,目前社区框架已转为pytest,并重新定制了ansible模块用于与设备交互。目前有两种方法来执行pytest测试用例,一种是使用 tests/run_test.sh来执行,另一种则是直接使用pytest命令来执行,本篇文章将重点介绍run_test.sh的流程,解析这个函数起到哪些作用。
run_test.sh整体流程
函数可大体分为如下几块:
- 帮助检查模块:负责对执行的指令进行检查,看是否包含一些必要的信息,比如是否指定了testbed,指定的被测设备名称是否存在等,如若执行指令不符合要求会停止程序并打印相关提示信息,来帮助执行人更正执行指令
- 环境设置模块:负责获取一些环境的默认参数,export环境变量
- 测试用例执行:将输入的执行指令解析后,拼接pytest执行指令,执行测试用例
- 环境清理:完成测试后清理DUT配置
run_test.sh支持的部分常用指定参数表
参数 |
说明 |
-h -? |
帮助提示 |
-a |
是否进行auto-recover,可选参数<True|False>,默认True |
-c |
指定测试用例,例如-c module/test_case.py |
-d |
指定dutname,dutname会检查是否在指定的testbed里 |
-e |
额外参数 |
-f |
指定testbed,默认为testbed.csv |
-i |
指定设备信息文件,与testbed.csv文件对应,描述登录设备的ip、账号与密码 |
-k |
指定loglevel,error|warning|info|debug (default debug)" |
-l |
指定cliloglevel, error|warning|info|debug (default warning)" |
-n |
指定topo名称,toponame会检查是否在指定的testbed里 |
-s |
指定需要跳过的用例 |
-u |
指定是否跳过util group用例,默认为True |
二、使用run_test.sh执行测试用例的方法
1、执行某一类或者某一个单用例,通过-c 参数指定
/run_tests.sh -d <dut_name> -n <testbed_name> -u -c "snmp/test_*.py"
2、批量运行多个用例,如下命令将执行test_link_flap以及test_reboot用例
./run_tests.sh -d <dut_name> -n <testbed_name> [-s ] -u -c "platform_tests/test_link_flap.py platform_tests/test_reboot.py"
3、更灵活一点的方式,例如下列命令将执行snmp路径下,跳过snmp/test_snmp_cpu.py外的其他用例。
/run_tests.sh -d <dut_name> -n <testbed_name> -u -c "snmp/test_*.py" -s "snmp/test_snmp_cpu.py"
ps:使用这种执行方式需要注意必须使用双引号,否则会出现ERR。