CSV文件自动化(自定义参数)
说明:
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文件自动化(自定义参数)的更多相关文章
- Jmeter读取CSV文件,请求参数乱码
Jmeter读取CSV文件,请求参数乱码 1.修改本地配置文件,jmeter.properties,修改以下配置项 sampleresult.default.encoding=UTF-8 重启Jmet ...
- 20201128-2 【自动化办公】读写csv文件
Exercise 1 import csv # 设置员工发展基金确认表路径 source_path = './员工发展基金确认表.csv' # 设置存放拆分结果文件的文件夹路径 result_path ...
- C#中的CSV文件读写
目录 CSV文件标准 文件示例 RFC 4180 简化标准 读写CSV文件 使用CsvHelper 使用自定义方法 基于简化标准的写CSV文件 使用TextFieldParser解析CSV文件 使用正 ...
- C#工具:CSV文件转换帮助类
CSV是逗号分隔值格式的文件,其文件以纯文本形式存储表格数据(数字和文本).CSV文件由任意数目的记录组成,记录间以某种换行符分隔:每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号 ...
- 【转载】 C#工具类:Csv文件转换类
CSV是逗号分隔值格式的文件,其文件以纯文本形式存储表格数据(数字和文本).CSV文件由任意数目的记录组成,记录间以某种换行符分隔:每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号 ...
- jmeter参数化、添加变量、生成随机数和导入csv文件数据
Remarks:本次使用jmeter版本为4.0 以下数据都在必应中演示: 添加普通变量 1.添加 User Defined Variables(用户自定义变量) 2.设置变量 3.使用变量 4.查看 ...
- jmeter接口自动化-通过csv文件读取用例并执行测试
最近在公司测试中经常使用jmeter这个工具进行接口自动化,简单记录下~ 一.在csv文件中编写好用例 首先在csv文件首行填写相关参数(可根据具体情况而定)并编写测试用例.脚本可通过优先级参数控制执 ...
- Spring boot中普通工具类不能使用@Value注入yml文件中的自定义参数的问题
在写一个工具类的时候,因为要用到yml中的自定义参数,使用@Value发现值不能正常注入,都显示为null: yml文件中的自定义格式 调用工具类的时候不能new的方式 要使用@Autowired的方 ...
- web端自动化——Python读取txt文件、csv文件、xml文件
1.读取txt文件 txt文件是我们经常操作的文件类型,Python提供了以下几种读取txt文件的方式. 1)read(): 读取整个文件. 2)readline(): 读取一行数据. 3)readl ...
随机推荐
- Linux实现树莓派3B的国密SM9算法交叉编译——(三)国密SM9算法实现
先参考这篇文章 Linux实现树莓派3B的国密SM9算法交叉编译——(二)miracl库的测试与静态库的生成 进行miracl库的交叉编译测试,并生成miracl静态链接库. 这篇文章主要介绍基于mi ...
- yii2的防御csrf攻击机制
csrf,中文名称:跨站请求伪造,可以在百度上搜索资料,详细了解这一方面的概念.对于我们是非常有帮助的.yii2的csrf的实现功能是在yii\web\request类实现功能的.request类中的 ...
- (爬虫)随机生成一个header
#!/usr/bin/env python #-*- coding: utf-8 -*- #__Author__: yunrui #__Version__: 1.0 #__Time__: 2019/1 ...
- 被女朋友三番五次拉黑后,我用 Python 写了个“舔狗”必备神器
在一个阳光明媚的周日,我打开窗户呼吸了一口新鲜空气.阳光灿烂,岁月静好,又是一个约女朋友出去爬山吃饭看电影的好日子. 想到女朋友的大眼睛,我脸上不禁洋溢起了幸福的微笑.打开微信,给女朋友发出去一个美好 ...
- LAMP调优
1.编译安装httpd前修改: 在安装包目录下 vim include/ap_release.h 搜索:BASEVENDOR 修改其八项隐藏curl -I http://地址 中的Server ...
- MFC程序加打印(使用控制台)
对于MFC界面编程,在调试过程常常希望时刻知道程序的运行状态,可以使用弹窗程序来进行显示,但这种操作非常的麻烦,因此可以考虑使用控制台程序,在控制台程序中添加输出信息.方法如下: 在stdafx.cp ...
- plupload上传视频插件jQuery+php
我在网上找到一个很好的视频上传插件,经过我的一些整理.补充,在这里分享给大家. 这个视频插件是新浪微博plupload上传视频插件,支持格式有mpg,m4v,mp4,flv,3gp,mov,avi,r ...
- 分布式事务 --- 2PC 和 3PC
文章部分图片来自参考资料,侵删 概述 上一篇我们讲到CAP 理论,分区容错性,一致性,可用性三者不可能同时存在,而分区容错性又是客观存在的,那么为了保证可用性,我们牺牲了一致性,虽然我们保证不了强一致 ...
- Django 字段中 null 和 blank的区别
blank 设置为 True 时,字段可以为空 设置为 False 时,字段是必须填写的 默认为 False null 设置为 True 时,数据库的字段允许为NULL,而且表单中的空值将会被存储为N ...
- 「NOIP2016」蚯蚓
传送门 Luogu 解题思路 很容易想到用一个堆去维护,但是复杂度是 \(O((n+m)\log(n+m))\) 的,显然过不了 \(7e6\). 其实这题有一个性质: 先被切开的蚯蚓,得到的两条新蚯 ...
