说明:
CSV 文件:cmd_list1.csv
testcase:对应test case id
function:对应test case的标题
interfacenotes:对应bsp节点名称
cmd:对应bsp命令
needtest:【yes】执行这个case,【no】表示跳过不执行这个case
var1:表示参数1
var2:表示参数2
loop:表示命令或case循环几次,当多条命令需要循环时,命令必须以;拼接。
命令里[]表示参数占位符
注意参数,如果是循环需要写 1 2,而不是12
cmd1.csv
testcase,function,interfacenotes,cmd,needtest,var1,var2,loop
8.1.1.1,CPLD Version,cpld_version,cat /sys/devices/platform/soc/fd880000.i2c-pld/i2c-0/i2c-4/i2c-15/15-0060/cpld_version,no,,,
8.1.1.2,Boad Version,board_version,cat /sys/devices/platform/soc/fd880000.i2c-pld/i2c-0/i2c-4/i2c-15/15-0060/board_version,yes,,,
8.1.8.3,front panel fan led,fan_led,cat /sys/bus/i2c/devices/15-0060/fan_led,yes,green red off,,
8.1.8.4,front panel power led,pwr1&2_led,cat /sys/devices/platform/soc/fd880000.i2c-pld/i2c-0/i2c-4/i2c-15/15-0060/pwr[]_led,yes,,1 2,
8.1.8.5,front panel power led,pwr1&2_led,echo [] > /sys/bus/i2c/devices/15-0060/pwr[]_led1,yes,green red off,1 2,
8.1.8.6,fan led,fan_led,echo [] > /sys/bus/i2c/devices/10-0066/fan1_led;cat /sys/bus/i2c/devices/10-0066/fan1_led,yes,red green off,,2
#!/bin/bash ################################################################# # Copyrith (C) 2020 XXXX Ltd. All rights reserved. # # # # Author :xxxx # # Create Time : Jan 8,2020 # # Applied Project:XXX # # How to Use:Copy the script into OS in /root,call this script# ################################################################# cmd_list="cmd1.csv" cmd_fail_list="cmd_fail_list.csv" cmd_count=0 cmd_skip=0 cmd_pass=0 cmd_fail=0 foder_date=`date '+%Y%m%d'` file_date=`date '+%H%M'` getTestcase(){ local tc="" tc=`echo $LINE |awk -F "," '{print $1}'` echo $tc } getFunction(){ local fn="" fn=`echo $LINE |awk -F "," '{print $2}'` echo $fn } getInterface(){ local ifc="" ifc=`echo $LINE |awk -F "," '{print $3}'` echo $ifc } getCmd(){ local cmd="" cmd=`echo $LINE |awk -F "," '{print $4}'` echo $cmd } getNeedtest(){ local ndt="" ndt=`echo $LINE |awk -F "," '{print $5}'` echo $ndt } getVar1(){ local var1="" var1=`echo $LINE |awk -F "," '{print $6}'` echo $var1 } getVar2(){ local var2="" var2=`echo $LINE|awk -F "," '{print $7}'` echo $var2 } getLoop(){ local loop="" loop=`echo $LINE|awk -F "," '{print $8}'` echo $loop } cat $cmd_list|tail -n+2|while read LINE do cmd_tc=$(getTestcase "$LINE") cmd_fun=$(getFunction "$LINE") cmd_ifc=$(getInterface "$LINE") cmd_cli=$(getCmd "$LINE") cmd_ndt=$(getNeedtest "$LINE") cmd_var1=$(getVar1 "$LINE") cmd_var2=$(getVar2 "$LINE") cmd_loop=$(getLoop "$LINE") if [ -s $cmd_list ];then if [[ -z "$cmd_tc" ]] || [[ -z "$cmd_cli" ]] || [[ -z "$cmd_ifc" ]];then echo "column ${cmd_tc} ${cmd_cli} ${cmd_ifc} is requited" exit else cmd_count=$[$cmd_count+1] echo $cmd_count > cmd_count.log if [ ${cmd_ndt} == "yes" ];then if [[ -n "$cmd_var1" ]] && [[ -n "$cmd_var2" ]];then echo $cmd_cli >> all_cmd.log #case1:two parameters var1 and var2 #setting (1 2) loop method cmd1_pass=0 cmd1_fail=0 for v2 in $(seq 1 ${cmd_var2[@]}) #for v2 in `seq ${cmd_var2[@]}` do echo for v1 in ${cmd_var1[@]} #for v1 in `seq ${cmd_var1[@]}` do #loop to insted with $v1 and $v2 echo `sed 's/[]/'$v1'/1;s/[]/'$v2'/' all_cmd.log` >> tmp1_2.log done done while read line do echo "#$line" cmd=`eval $line` if [[ $? -eq 0 ]];then #一条case里的多条命令,小汇总summary,cmd1_pass+1,cmd1_fail+1,存到小变量里 cmd1_pass=$((cmd1_pass+1)) echo $cmd1_pass > cmd1_pass.log else cmd1_fail=$((cmd1_fail+1)) echo $cmd1_fail > cmd1_fail.log fi sleep 1 done < tmp1_2.log if [[ $cmd1_fail == 0 ]];then cmd1_fail=0 else cmd1_fail=`cat cmd1_fail.log` fi if [[ $cmd1_fail -eq 0 ]];then #判断整个case里的fail和pass数量,cmd_pass,cmd_fail,如果,小总结cmd1_fail为0,表示整个case是pass cmd_pass=$((cmd_pass+1)) echo "Test cmd: "${cmd_tc}" "${cmd_ifc}" -- [PASS]"else echo "Test cmd: "${cmd_tc}" "${cmd_ifc}" -- [Fail]" cmd_fail=$((cmd_fail+1)) cmd_fail_info=${cmd_tc}","${cmd_fun}","${cmd_ifc}","${cmd_cli}","${cmd_ndt} echo ${cmd_fail_info} >> $file_date$cmd_fail_list echo "#${cmd_cli}" >> $file_date$cmd_fail_list eval ${cmd_cli} 2>> $file_date$cmd_fail_list fi #case2:one parameters var1 elif [[ -n "$cmd_var1" ]] && [[ ! -n $cmd_loop ]];then cmd2_pass=0 cmd2_fail=0 for v1 in ${cmd_var1[@]} do echo "#${cmd_cli/[]/$v1}" cmd=`eval ${cmd_cli/[]/$v}` if [[ $? -eq 0 ]];then cmd2_pass=$[$cmd2_pass+1] echo $cmd2_pass > cmd2_pass.log else cmd2_fail=$[$cmd2_fail+1] echo $cmd2_fail > cmd2_fail.log fi done if [[ $cmd2_fail == 0 ]];then cmd2_fail=0 else cmd2_fail=`cat cmd2_fail.log` fi if [[ $cmd2_fail -eq 0 ]];then cmd_pass=$((cmd_pass+1)) echo "Test cmd: "${cmd_tc}" "${cmd_ifc}" -- [PASS]" #echo $cmd_pass >cmd_pass.log else cmd_fail=$((cmd_fail+1)) echo "Test cmd: "${cmd_tc}" "${cmd_ifc}" -- [Fail]" cmd_fail_info=${cmd_tc}","${cmd_fun}","${cmd_ifc}","${cmd_cli}","${cmd_ndt} echo ${cmd_fail_info} >> $file_date$cmd_fail_list echo "#${cmd_cli}" >> $file_date$cmd_fail_list eval ${cmd_cli} 2>> $file_date$cmd_fail_list fi #case3:one parameters var2 elif [[ -n "$cmd_var2" ]] && [[ ! -n $cmd_loop ]];then cmd3_pass=0 cmd3_fail=0 for v2 in ${cmd_var2[@]} do echo "#${cmd_cli/[]/$v2}" cmd=`eval ${cmd_cli/[]/$v2}` if [[ $? -eq 0 ]];then cmd3_pass=$[$cmd3_pass+1] echo $cmd3_pass > cmd3_pass.log else cmd3_fail=$[$cmd3_fail+1] echo $cmd3_fail > cmd3_fail.log fi done if [[ $cmd3_fail == 0 ]];then cmd3_fail=0 else cmd3_fail=`cat cmd3_fail.log` fi if [[ $cmd3_fail -eq 0 ]];then cmd_pass=$((cmd_pass+1)) echo "Test cmd: "${cmd_tc}" "${cmd_ifc}" -- [PASS]"else cmd_fail=$((cmd_fail+1)) echo "Test cmd: "${cmd_tc}" "${cmd_ifc}" -- [Fail]" cmd_fail_info=${cmd_tc}","${cmd_fun}","${cmd_ifc}","${cmd_cli}","${cmd_ndt} echo ${cmd_fail_info} >> $file_date$cmd_fail_list echo "#${cmd_cli}" >> $file_date$cmd_fail_list eval ${cmd_cli} 2>> $file_date$cmd_fail_list fi #case4:one parameters var1 and loop elif [[ -n "$cmd_var1" ]]&&[[ -n "$cmd_loop" ]];then cmd4_pass=0 cmd4_fail=0 # for((lp=1;lp<=${cmd_loop};lp++)) for lp in `seq ${cmd_loop}` do echo for v1 in ${cmd_var1[@]} do echo ${cmd_cli//[]/$v1}|awk -F ';' '{for(i=1;i<=NF;i++) print$i}' >>tmp1_loop.log done done while read line do echo "#$line" cmd=`eval $line` if [[ $? -eq 0 ]];then cmd4_pass=$[$cmd4_pass+1] echo $cmd4_pass > cmd4_pass.log else cmd4_fail=$[$cmd4_fail+1] echo $cmd4_fail > cmd4_fail.log fi sleep 1 done < tmp1_loop.log if [[ $cmd4_fail == 0 ]];then cmd4_fail=0 else cmd4_fail=`cat cmd4_fail.log` fi if [[ $cmd4_fail -eq 0 ]];then cmd_pass=$((cmd_pass+1)) echo "Test cmd: "${cmd_tc}" "${cmd_ifc}" -- [PASS]"else cmd_fail=$((cmd_fail+1)) echo "Test cmd: "${cmd_tc}" "${cmd_ifc}" -- [Fail]" cmd_fail_info=${cmd_tc}","${cmd_fun}","${cmd_ifc}","${cmd_cli}","${cmd_ndt} echo ${cmd_fail_info} >> $file_date$cmd_fail_list echo "#${cmd_cli}" >> $file_date$cmd_fail_list eval ${cmd_cli} 2>> $file_date$cmd_fail_list fi #case5:no parameters var2 and loop elif [[ -n "$cmd_var2" ]]&&[[ -n "$cmd_loop" ]];then cmd5_pass=0 cmd5_fail=0 #for((lp=1;lp<=${cmd_loop};lp++)) for lp in $(seq 1 1 ${cmd_loop}) do echo for v2 in ${cmd_var2[@]} do echo ${cmd_cli//[]/$v2}|awk -F ';' '{for(i=1;i<=NF;i++) print$i}' >>tmp2_loop.log done done while read line do echo "#$line" cmd=`eval $line` if [[ $? -eq 0 ]];then cmd5_pass=$[$cmd5_pass+1] echo $cmd5_pass > cmd5_pass.log else cmd5_fail=$[$cmd5_fail+1] echo $cmd5_fail > cmd5_fail.log fi sleep 1 done <tmp2_loop.log if [[ $cmd5_fail == 0 ]];then cmd5_fail=0 else cmd5_fail=`cat cmd5_fail.log` fi if [[ $cmd5_fail -eq 0 ]];then cmd_pass=$((cmd_pass+1)) echo "Test cmd: "${cmd_tc}" "${cmd_ifc}" -- [PASS]" echo $cmd_pass>cmd_pass.log else cmd_fail=$((cmd_fail+1)) echo "Test cmd: "${cmd_tc}" "${cmd_ifc}" -- [Fail]" echo $cmd_fail>cmd_fail.log cmd_fail_info=${cmd_tc}","${cmd_fun}","${cmd_ifc}","${cmd_cli}","${cmd_ndt} echo ${cmd_fail_info} >> $file_date$cmd_fail_list echo "#${cmd_cli}" >> $file_date$cmd_fail_list eval ${cmd_cli} 2>> $file_date$cmd_fail_list fi else echo "#${cmd_cli}" cmd=`eval ${cmd_cli}` if [[ $? -eq 0 ]];then cmd_pass=$[$cmd_pass+1] echo "Test cmd: "${cmd_tc}" "${cmd_ifc}" -- [PASS]" else cmd_fail=$[$cmd_fail+1] echo "Test cmd: "${cmd_tc}" "${cmd_ifc}" -- [Fail]" cmd_fail_info=${cmd_tc}","${cmd_fun}","${cmd_ifc}","${cmd_cli}","${cmd_ndt} echo ${cmd_fail_info} >> $file_date$cmd_fail_list echo "#${cmd_cli}" >> $file_date$cmd_fail_list eval ${cmd_cli} 2>> $file_date$cmd_fail_list fi fi else cmd_skip=$[$cmd_skip+1] echo $cmd_skip >cmd_skip.log fi fi else echo "file $cmd_list is empty" exit fi echo $cmd_skip > cmd_skip.log echo $cmd_pass > cmd_pass.log echo $cmd_fail > cmd_fail.log done cmd_skip=`cat cmd_skip.log` cmd_pass=`cat cmd_pass.log` cmd_count=`cat cmd_count.log` cmd_fail=`cat cmd_fail.log`
#增加判断,没有fail,pass,skip文件时,设置这些值为0,否则,读里面的值。如果不增加判断,会提示文件找不到。 if [[ $cmd_skip == 0 ]];then cmd_skip=0 else cmd_skip=`cat cmd_skip.log` fi if [[ $cmd_fail == 0 ]];then cmd_fail=0 else cmd_fail=`cat cmd_fail.log` fi if [[ $cmd_pass == 0 ]];then cmd_pass=0 else cmd_pass=`cat cmd_pass.log` fi echo "=================================================================" echo "Total cmd:" $cmd_count echo "Test pass:" $cmd_pass echo "Test fail:" $cmd_fail echo "Test skip:" $cmd_skip echo "==================================================================" echo "Fail log " #cat $file_date$cmd_fail_list #备份fail的日志文件到日期文件夹下,每次执行的日志以时间戳为标记区分。 if [ ! -d $foder_date ];then #判断文件夹是否存在 mkdir $foder_date else if [ ! -f $file_date$cmd_fail_list ];then #判断文件是否存在 touch ./$foder_date/$file_date$cmd_fail_list else mv *$cmd_fail_list ./$foder_date fi fi ./arg.sh #脚本执行完,调用这个脚本去删除临时文件
运行效果: