整体架构:
Jenkins > PC1 > RobotFramework > NEs_1
> PC2 > RobotFramework > NEs_2
> PC3 > RobotFramework > NEs_3
....
通过Jenkins控制多台PC,再借助RobotFramework框架实现对网元的自动化测试,使用SSHLibrary等库。
Jenkins Pipeline中的代码:
node(pc) { stage(‘Export_Log_and_Config‘) { if (test_env == ‘data1‘) { var_file = ‘C:\\NPTI_CLI\\Case\\Sanity\\topo_var_data1.py‘ } else if(test_env == ‘data2‘) { var_file = ‘C:\\NPTI_CLI\\Case\\Sanity\\topo_var_data2.py‘ } else if(test_env == ‘system‘) { var_file = ‘C:\\NPTI_CLI\\Case\\Sanity\\topo_var_system.py‘ } else { var_file = ‘C:\\NPTI_CLI\\Case\\Sanity\\topo_var_data1.py‘ } bat "robot --variablefile ${var_file} --variable pause_on_fail:false --variable log_flag:${log_flag} --outputdir C:\\NPTI_CLI\\report --debugfile debug.txt --loglevel DEBUG:INFO C:\\NPTI_CLI\\Case\\tools" } }
通过Jenkins Pipeline自带的 bat 命令,实现在windows系统中下发robot命令,启动robotframework。
为了方便配置,其参数有:pc test_env log_flag
参数化构建完成后,其Jenkins界面如下所示:
运行结果显示界面:
在实现过程中,遇到的坑:
1,导出日志的名字,需要包含网元的版本信息,而我们原有的函数cli_export_version,只是将获取的版本信息保存到新建文件中。因此需要根据函数参数,来确定是新建文件,还是单纯的返回版本信息。但我不知道呐,暴露了对python函数参数理解的不到位。
2,为了实现Jenkins Pipeline根据参数,选择不同的PC来执行robotframewok,饶了很大的弯,惊觉node(‘PC1‘) {xxxxx},即为选择PC1来执行该命令,如果node(para) {xxxxxx},即为选择para变量所包含的值来执行该命令。
关于python函数参数,简单总结一下:
python函数参数分为以下几类:
1、普通参数
def func1(par1, para2, para3): function body
调用函数时,需要将参数按顺序写入。
2、关键字参数
关键字函数在创建函数时和普通参数一样的,只是在调用时有差别。
func(para2=x,para3=y,para1=z)
即可以打乱参数传入的顺序,但是必须指定参数名。
3、缺省参数
def func1(para1,para2="x",para3="o") function body
因为参数有初始化值,故在函数调用时,可以将被初始化的参数忽略,只使用未初始化的值。
4、多选项参数
def func2(para1, *para2): print para1 for i in para2: print i func2(10) 输出10 func2(10, 20, 30) 输出10,20,30
如代码所示,在参数前加入*号,既能实现对该参数,输入0个或多个。
insist