利用脚本测试程序
前言:最近第一次作业,用残酷的事实告诉了我测试的重要性。平时测试的时候,经常自己一个个情况测,每测一次都要重新输入一次,费时费力效果差,所以下定决心学一下如何利用脚本进行简单的程序测试,下面记录一下一下用到的语法。
基本概念
以Mac为例,新建一个脚本的基本流程为
- 新建脚本文件(后缀为sh)
touch script.sh
- 打开并修改脚本文件
open script.sh
oremacs -nw script.sh
- 修改脚本文件的权限
chmod +x script.sh
注意事项:
- 脚本是对空格敏感的,如
a="Hello World"
是合法的(声明了一个变量),而a = "Hello World"
是不合法的(等号两边多了一个空格)
输出一段话
- 利用
echo
向屏幕输出一段话
向控制台输出Hello World $\dArr$
echo Hello World
变量
- 利用
$
符号引用一个变量
利用一个变量,向控制台输出Hello World $\dArr$
a="Hello World"
echo $a
变量运算
修改一个变量的值(4种方法) $\dArr$
let i+=1;
((i++));
i=$[$i+1];
i=$(($i+1))
变量输出格式控制
- 可以通过printf来控制变量输出的格式(如固定5位,多余的补0)
- 还可以将printf的结果保存到一个变量内方便使用
# printf in binary
printf "%05d\n" `echo "obase=2;$var" | bc`
# printf in decimal
printf "%05d" "$var"
# store the result of printf into a variable
var=$(printf "%05d\n" `echo "obase=2;$var" | bc`);
echo $var
从命令行读入指令
- 利用
read
指令从命令行读入数据(保存在一个变量内)
从命令行读入一个字符串,并原样输出 $\dArr$
read readAll
echo you enter $readAll
循环(for)
- 注意for循环有两层括号
- 要打引号
;
循环向控制台输出 30 个 Hello World $\dArr$
for((i=0;i<30;i++));
do
echo Hello World $i
done
数组
- 利用括号声明一个数组,数组元素之间用空格隔开
- 利用
${list[index]}
访问数组元素
将整个数组输出到命令行 $\dArr$
story_list=(hello0 hello1 hello2)
for((i=0;i<3;i++));
do
echo ${story_list[$i]}
done
for i in {0..3};
do
echo ${story_list[$i]}
done
条件判断(if-else)
- 条件判断需要两个中括号
- 用
then
和fi
来表示if-else的范围
读入一个字符,并作出判断 $\dArr$
echo "do you...?(y/n):"
read readAll
if [[ $readAll = "y" ]]; then
echo yes
else
echo "no"
fi
读取文件
cat
指令:以文本形式输出文件内容
逐行读取并输出文件内容 $\dArr$
cat filename.txt | while read line
do
echo $line
done
写入文件
- 利用插入符
>>
写入文件 - 利用
$FILE
来指定某个文件
打开一个文件,写入一个变量和一串字符$\dArr$
a="Hello world"
FILE="./filename.txt"
echo $a >> $FILE
echo "----------------------" >> $FILE
简单的运行一个可执行程序
- rand_story 是一个编译好的可执行程序,story.txt,words.txt和3是这个程序接受的三个输入参数
运行程序rand_story $\dArr$
./rand_story story.txt words.txt 3
将可执行程序的输出写入到文件内
- 注意第一行用的是 ` 而不是单引号 ‘
运行程序rand_story,并将程序输出写入到指定文件 $\dArr$
cmd=`./rand_story story.txt words.txt 3`
a=${cmd}
FILE="./output.txt"
echo "$a" >> $FILE
简易版自动化测试脚本
- 利用循环更改数字类参数
- 利用循环 + 数组更改字符串类参数
- 将所有结果写入.txt文件
# file name
FILE="./output.txt"
# clear the file content
echo "" > $FILE
echo "-----------test start-----------" >> $FILE
# modify number parameter
for i in {0..30};
do
echo =====testcase $i===== >> $FILE
cmd=`./rand_story story.txt words.txt $i`
a=${cmd}
echo $a >> $FILE
done
story_list=(story.txt story1.txt story2.txt)
# modify string parameter
for i in {0..2};
do
echo =====testcase $i===== >> $FILE
cmd=`./rand_story ${story_list[$i]} words.txt 1`
a=${cmd}
echo $a >> $FILE
done