说明: 
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. next.config.js

    const configs = { // 编译文件的输出目录 distDir: 'dest', // 是否给每个路由生成Etag generateEtags: true, // 页面内容缓存配置 on ...

  2. [LeetCode]1.Two Sum 两数之和&&第一次刷题感想

    ---恢复内容开始--- 参考博客: https://www.cnblogs.com/grandyang/p/4130379.html https://blog.csdn.net/weixin_387 ...

  3. 【PAT甲级】1106 Lowest Price in Supply Chain (25分)

    题意:输入一个正整数N(<=1e5),两个小数P和R,分别表示树的结点个数和商品原价以及每下探一层会涨幅的百分比.输出叶子结点深度最小的商品价格和深度最小的叶子结点个数. trick: 测试点1 ...

  4. vue中,怎么给data对象添加新的属性?(尼玛这面试题居然让我给碰上了。。。。)

    Vue中给data中的对象属性添加一个新的属性时会发生什么,如何解决? 示例: <template> <div> <ul> <li v-for="v ...

  5. 生成SSH密钥过程

    1.查看是否已经有了ssh密钥:cd ~/.ssh 如果没有密钥则不会有此文件夹,有则备份删除 2.生存密钥: $ ssh-keygen -t rsa -C "name@doumi.com& ...

  6. AttributeError: This QueryDict instance is immutable

    当写添加注册后端时,运行当运行时,会出现: "AttributeError: This QueryDict instance is immutable": 因为默认的 QueryD ...

  7. 01-Spring的概述

    Spring概述 ①Spring是一个开源框架 ②Spring为简化企业级开发而生,使用Spring开发可以将Bean对象,Dao组件对象,Service组件对象等交给Spring容器来管理,这样使得 ...

  8. STM32开发记录

    一.使用keil时经常遇到的问题 1.没有下载固件包 2.下载器没选择对 3.没安装下载器的驱动 二.关于数据手册和开发手册 1.如何下载这些手册 在官网下载,官网永远是一手资源 意法半导体官网:ww ...

  9. 浅析PHP页面局部刷新功能的实现小结(转)

    转载地址 https://www.jb51.net/article/38901.htm 方法其实挺多的.以前比较常用的是iframe这样来做.现在多了个ajax,所以一般情况下都是用的ajax.第一种 ...

  10. 【C语言】创建一个函数,判断某一正整数是否为水仙花数,并调用这个函数找出1000以内所有水仙花数

    #include <stdio.h> int fun(int x) { int a, b, c; a = x / ; b = x % / ; c = x % ; if (x == a * ...