说明: 
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. gitlab创建项目及分支

    链接:https://blog.51cto.com/13760226/2426209

  2. C++ 宏定义创建(销毁)单例

    Util.h: #define CREATE_SINGLETON_POINTER(CLASS,INSTANCE,MUTEX) if (NULL == INSTANCE) \ { \ MUTEX.loc ...

  3. Java入门笔记 07-枚举类

    介绍:在某些情况下,一个类的对象是有限且固定的,比如季节类,只有四个对象:春夏秋冬.这种实例有限而且固定的类,被称为枚举类.在JDK 5.0及以后,可以使用enum关键字定义枚举类,并且默认继承于ja ...

  4. PAT 1014 Waiting in Line (30分) 一个简单的思路

    这题写了有一点时间,最开始想着优化一下时间,用优先队列去做,但是发现有锅,因为忽略了队的长度. 然后思考过后,觉得用时间线来模拟最好做,先把窗口前的队列填满,这样保证了队列的长度是统一的,这样的话如果 ...

  5. mysql测试点

    前言 性能测试过程中,数据库相关指标的监控是不可忽视的,在这里我们就MySQL的监控配置及重点涉及性能的一些参数进行说明. 在笔者的日常性能测试过程中,重点关注了这些参数,但不代表仅仅只有这些参数对性 ...

  6. Euler Sums系列(一)

    \[\Large\sum_{n=1}^{\infty} \frac{H_{n}}{2^nn^4}\] \(\Large\mathbf{Solution:}\) Let \[\mathcal{S}=\s ...

  7. ListView 基础列表组件、水平 列表组件、图标组件

    一.Flutter 列表组件概述 列表布局是我们项目开发中最常用的一种布局方式.Flutter 中我们可以通过 ListView 来定义 列表项,支持垂直和水平方向展示.通过一个属性就可以控制列表的显 ...

  8. CDH搭建大数据集群(5.10.0)

    纠结了好久,还是花钱了3个4核8G的阿里云主机,且行且珍惜,想必手动搭建过Hadoop集群的完全分布式.HBase的完全分布式的你(当然包括我,哈哈),一定会抱怨如此多的配置,而此时CDH正是解决我们 ...

  9. 计算机二级-C语言-程序设计题-190111记录-两种指针赋值的不同,普通输入输出函数和文件输入输出函数的使用

    //程序设计题:函数fun的功能是:将两位数的正整数a,b合并形成一个整数放在c中.合并的方式是:将a数的十位和个位数依次放在c数的个位和百位上,b数的十位和个位数依次放在c数的十位和千位上.例如:当 ...

  10. 今天启动项目的时候报了一个错MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk.

    从报错信息看应该是内存问题导致不能持久化到硬盘,在网上找到了一个解决方法: Redis被配置为保存数据库快照,但它目前不能持久化到硬盘.用来修改集合数据的命令不能用.请查看Redis日志的详细错误信息 ...