说明: 
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. Homebrew安装和Mac使用

    软件安装 1.Homebrew安装   ruby环境: curl -sSL https://get.rvm.io | bash -s stable   官网方式: /usr/bin/ruby -e & ...

  2. 吴裕雄 python 机器学习——支持向量机线性分类LinearSVC模型

    import numpy as np import matplotlib.pyplot as plt from sklearn import datasets, linear_model,svm fr ...

  3. CGMH:Constrained Sentence Generation by Metropolis-Hastings Sampling解读

    根据关键字生成句子: 读进关键字,随机选择处理手段(增删改)以及待处理word的位置,然后计算接受/拒绝概率,根据概率生成一个新的序列,再循环这一过程,循环次数是500,每次都将困惑度最低的生成句子放 ...

  4. Codeforces 1315C Restoring Permutation

    You are given a sequence b1,b2,…,bnb1,b2,…,bn . Find the lexicographically minimal permutation a1,a2 ...

  5. chomp/undef/标量 --Perl 入门第二章

    1.chomp 用途:去掉字符串 末尾的换行符 $text="a line of text \n" chomp($text) #去除行末的换行符 chomp()  --本质上是一个 ...

  6. webRTC中回声消除(AEC)模块编译时aec_rdft.c文件报错:

    webRTC中回声消除(AEC)模块编译时aec_rdft.c文件报错. 原因是: 局部变量ip跟全局变量冲突的问题,可以将局部变量重新命名一下,就可以通过编译了. aec_rdft.c修改以后文件代 ...

  7. ARM64架构下登录mysql出错:mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object file:

    Linux下登录mysql出错:mysql: error while loading shared libraries: libncurses.so.5: cannot open shared obj ...

  8. Android如何运行他人工程

    首先新建一个本地的新工程做对比,用记事本打开以下的几个工程文件,把本地工程文件的内容覆盖掉他人工程的文件内容,注意只覆盖两个工程共有的内容条目即可,不要删掉他人工程的其他依赖!(具体哪几个文件本人还没 ...

  9. cas的单点登录实现

    1.  前提条件 环境:jdk1.8.shiro1.4.0及以上版本.项目以 spring+shiro构建 工具:buji-pac4j-3.1.0-jar-with-dependencies.jar以 ...

  10. 从0到1了解 CI/CD

    现代软件开发的需求加上部署到不同基础设施的复杂性使得创建应用程序成为一个繁琐的过程.当应用程序出现规模性增长,开发团队人员变得更分散时,快速且不断地生产和发布软件的流程将会变得更加困难.为了解决这些问 ...