说明: 
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 #!/bin/bash
#################################################################
# Copyrith (C) 2020 XXXX Ltd. All rights reserved. #
# #
# Author :Bing Song #
# Create Time : Jan 8,2020 #
# Applied Project:XXX #
# How to Use:Copy the script into OS in /root,call this script#
#################################################################
cmd_list="test.csv"
cmd_fail_list="cmd_fail_list.csv"
cmd_count=0
cmd_skip=0
cmd_pass=0
cmd_fail=0
#分别替换每个字段
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 }
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]
if [ "X$cmd_ndt" == X"yes" ];then if [[ -n "$cmd_var1" ]] && [[ -n "$cmd_var2" ]];then
echo $cmd_cli >> tmp0.log #case1:two parameters var1 and var2
#setting (1 2) loop method
for v2 in $(seq 1 ${cmd_var2[@]})
do
echo
for v1 in ${cmd_var1[@]}
do
#loop to insted with $v1 and $v2
echo `sed 's/\[\]/'$v1'/1;s/\[\]/'$v2'/' tmp0.log` >> tmp1.log#同时替换2个变量用;分开,【】需要转意
done done
while read line
do
eval $line
echo "#$line"
echo $line
sleep 1
done < tmp1.log
rm -rf tmp1.log #case2:one parameters var1
elif [[ -n "$cmd_var1" ]] && [[ ! -n $cmd_loop ]];then
for v1 in ${cmd_var1[@]}
do
echo "#${cmd_cli/[]/$v1}"
cmd_v1=`eval ${cmd_cli/[]/$v1}`
echo $cmd_v1
sleep 1
done
#case3:one parameters var2
elif [[ -n "$cmd_var2" ]] && [[ ! -n $cmd_loop ]];then
for v2 in ${cmd_var2[@]}
do
echo "#${cmd_cli/[]/$v2}" #用v2值替换[],只替换查找到的第一个匹配的字符串
cmd_v2=`eval ${cmd_cli/[]/$v2}`
echo $cmd_v2
sleep 1
done
#case4:one parameters var1 and loop
elif [[ -n "$cmd_var1" ]]&&[[ -n "$cmd_loop" ]];then
for((lp=1;lp<=${cmd_loop};lp++))
do
echo
for v1 in ${cmd_var1[@]}
do
echo ${cmd_cli//[]/$v1}|awk -F ';' '{for(i=1;i<=NF;i++) print$i}' >>tmp4.log#v1替换所有【】值,之后,以分号分割,打印所有命令
#echo `sed 's/\[\]/'$v1'/g' tmp0.log` >> tmp1.log
while read row
do
echo "#$row"
v1_loop=`eval $row`
sleep 1
echo $v1_loop
done < tmp4.log
done
done
rm -rf tmp4.log
#case5:no parameters var2 and loop
elif [[ -n "$cmd_var2" ]]&&[[ -n "$cmd_loop" ]];then
for((lp=1;lp<=${cmd_loop};lp++))
do
echo
for v2 in ${cmd_var2[@]}
do
echo ${cmd_cli//[]/$v2}|awk -F ';' '{for(i=1;i<=NF;i++) print$i}' >>tmp5.log
while read line
do
echo "#$line"
line=`eval $line`
sleep 1
echo $line
done < tmp5.log done
done
rm -rf tmp5.log
else
echo "#${cmd_cli}"
cmd_cli=`eval ${cmd_cli}`
echo ${cmd_cli} fi if [ X"$?" == X"" ];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}" --[Faild]"
cmd_fail_info=${cmd_tc}","${cmd_fun}","${cmd_ifc}","${cmd_cli}","${cmd_ndt}
echo $cmd_fail_info |tee -a > $cmd_fail_list 2>&1
fi
else
cmd_skip=$[$cmd_skip+1]
fi
fi else echo "file $cmd_list is empty"
exit
fi
#skip first row
done < $cmd_list |tail -n+2 #读取文件,从第二行开始读,跳过第一行
rm -rf tmp0.log
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 $cmd_fail_list

CSV文件自动化(自定义参数)的更多相关文章

  1. Jmeter读取CSV文件,请求参数乱码

    Jmeter读取CSV文件,请求参数乱码 1.修改本地配置文件,jmeter.properties,修改以下配置项 sampleresult.default.encoding=UTF-8 重启Jmet ...

  2. 20201128-2 【自动化办公】读写csv文件

    Exercise 1 import csv # 设置员工发展基金确认表路径 source_path = './员工发展基金确认表.csv' # 设置存放拆分结果文件的文件夹路径 result_path ...

  3. C#中的CSV文件读写

    目录 CSV文件标准 文件示例 RFC 4180 简化标准 读写CSV文件 使用CsvHelper 使用自定义方法 基于简化标准的写CSV文件 使用TextFieldParser解析CSV文件 使用正 ...

  4. C#工具:CSV文件转换帮助类

    CSV是逗号分隔值格式的文件,其文件以纯文本形式存储表格数据(数字和文本).CSV文件由任意数目的记录组成,记录间以某种换行符分隔:每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号 ...

  5. 【转载】 C#工具类:Csv文件转换类

    CSV是逗号分隔值格式的文件,其文件以纯文本形式存储表格数据(数字和文本).CSV文件由任意数目的记录组成,记录间以某种换行符分隔:每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号 ...

  6. jmeter参数化、添加变量、生成随机数和导入csv文件数据

    Remarks:本次使用jmeter版本为4.0 以下数据都在必应中演示: 添加普通变量 1.添加 User Defined Variables(用户自定义变量) 2.设置变量 3.使用变量 4.查看 ...

  7. jmeter接口自动化-通过csv文件读取用例并执行测试

    最近在公司测试中经常使用jmeter这个工具进行接口自动化,简单记录下~ 一.在csv文件中编写好用例 首先在csv文件首行填写相关参数(可根据具体情况而定)并编写测试用例.脚本可通过优先级参数控制执 ...

  8. Spring boot中普通工具类不能使用@Value注入yml文件中的自定义参数的问题

    在写一个工具类的时候,因为要用到yml中的自定义参数,使用@Value发现值不能正常注入,都显示为null: yml文件中的自定义格式 调用工具类的时候不能new的方式 要使用@Autowired的方 ...

  9. web端自动化——Python读取txt文件、csv文件、xml文件

    1.读取txt文件 txt文件是我们经常操作的文件类型,Python提供了以下几种读取txt文件的方式. 1)read(): 读取整个文件. 2)readline(): 读取一行数据. 3)readl ...

随机推荐

  1. Linux shell tr 命令详解

    该随笔摘自 https://www.jb51.net/article/103892.htm Linux shell tr 命令详解 1. 用途 tr,translate的简写,主要用于压缩重复字符,删 ...

  2. 每日扫盲(二):xxx.dll文件的作用

    DLL,dynamic-link library 动态链接库.我们看他的说明,是应用程序扩展.DLL内是一些程序的功能.由于使用静态链接库(static LIBrary,LIB)会使主程序变得臃肿,并 ...

  3. datatable自动增加序号

    { "targets": [0], "visible": true, "render": function (data, type, ful ...

  4. Wx-小程序-组件式开发之Vant

    开始:https://youzan.github.io/vant-weapp/#/intro 小程序开发者工具中 -->工具栏-->构建npm 一.初始化package.json npm ...

  5. 被女朋友三番五次拉黑后,我用 Python 写了个“舔狗”必备神器

    在一个阳光明媚的周日,我打开窗户呼吸了一口新鲜空气.阳光灿烂,岁月静好,又是一个约女朋友出去爬山吃饭看电影的好日子. 想到女朋友的大眼睛,我脸上不禁洋溢起了幸福的微笑.打开微信,给女朋友发出去一个美好 ...

  6. Vue-cli 多页相关配置记录

    Vue-cli 多页相关配置记录 搭建一个顺手的MPA项目脚手架,其实根据项目的不同目录结构和打包配置都可以进行灵活的调整.这次的项目可能是包含各种客户端和管理后台在一起的综合项目所以需要将样式和脚本 ...

  7. ‘\0’的ASCII码

    1.'\0'的ASCII码为0 2.用串口发送字符串时,可以通过'\0'判断字符串是否结束,但发送数字数组的时候不能通过'\0'判断数组是否结束,因为数字0与'\0'的ASCII码值相同.

  8. 基于SILVACO ATLAS的a-IGZO薄膜晶体管二维器件仿真(07)

    今天主要解决一下defect语句: defect region=1 nta=1.55e20 wta=0.013 wtd=0.12 ngd=6.5e16 wga=2 ntd=1.55e20 ngd=0 ...

  9. 搭建第一个django项目

    django是python做web最为强大和全能的后端框架,不会django的python如一条咸鱼... 所以开始学习django框架. 首选得在python中下载django 下载命令: pip ...

  10. Centos 7源码编译安装 php7.1 之生产篇

    Centos 7源码编译安装 php7.1 之生产篇 Published 2017年4月30日 by Node Cloud 介绍: 久闻php7的速度以及性能那可是比php5系列的任何一版本都要快,具 ...