最近做了ServerOS 3.2 for x86_64 和ServerOS 5.0 for mips的自动化测试。使用的工具就是isoft-ltp,测试的部分主要是BaseSystem(基本系统)、Kernel(内核模块)、Server(系统服务)三大块的自动化实现的用例,大约112个用例。
介绍
测试时是在autotest框架下实现的,以后我会单独介绍autotest自动化测试。今天主要是做isoft-ltp的介绍。
要介绍isoft-ltp首先得介绍下LTP。LTP(Linux Test Project)是SGI、IBM、OSDL和Bull合作的项目,目的是为开源社区提供一个测试套件,用来验证Linux系统可靠性、健壮性和稳定性。LTP可以测试linux系统的内核功能、网络功能和稳定性,于isoft-ltp相比,LTP测试更底层的东西。
而isoft-ltp是咱们公司自己在ltp的基础上开发的测试套件,用于执行系统的部分功能测试。代替手工测试,提高执行效率。通过脚本可以发现主要是赵盼盼和朱倩倩做的工作。
安装
加压:tar zxvf isoft-ltp-pkg.tar.gz
切换到目录:cd isoft-ltp
安装:./setup
默认会在opt下生成isoft-ltp目录。
文件目录介绍
根目录有如下文件:
bin
IDcheck.sh
runalltests.sh
runltp
runltplite.sh
runtest
scenario_groups
share
testcases
testscripts
ver_linux
Version
各目录和文件功能介绍:
目录或文件名 | 功能 |
bin | 存放LTP测试的驱动程序和辅助脚本 |
results | 测试结果默认存储目录 |
testcases | 测试项集,测试用例脚本都存放于此 |
output | 测试日志默认存储目录 |
share | 脚本使用说明目录 |
runtest | 测试命令集 |
testscripts | 用于执行某一项的测试脚本,不常用 |
IDcheck.sh | 检查系统是否缺少执行LTP测试套件所需的用户和用户组,此处不用 |
runalltest.sh
runltplite.sh |
用于测试部分的用例,此处用不到 |
runltp | 测试时使用的执行程序,经常用到 |
ver_linux | Shell脚本,用于获取系统的软件版本和硬件信息 |
Version | Ltp版本号 |
测试
使用命令:./runltp -p -l /tmp/result.log -o /tmp/result.out -C /tmp/result.fail –
T /tmp/result.tconf -d /tmp
-p:易于查看的方式输出。
-l:结果日志输出。
-o:详细日志输出。
-C:失败用例命令集。
-T:conf用例命令集。
-d:临时目录输出。
测试完毕后会有日志输出,通过详细日志可以看出失败用例的出错原因。有的是系统bug、有的是配置出错、有的是脚本本身有问题通不过。
用例脚本分析
现在单独拿出一个脚本来分析一下工作原理。
以serv-vsftpd为例。我在脚本中做了注释,大家可以参考一下。
#!/bin/sh
#this case checks if vsftpd service provide client access normally
#created by zhuqianqian
#这部分主要是脚本的功能和创建者名字,一般是赵盼盼或者朱倩倩的名字
do_setup() #这是一个配置信息的函数,用来做测试的准备工作,比如设置环境变量,下载rpm包等
{
export TCID= #将TCID变量置空,可能是这个意思,要不然呢?
. cmdlib.sh #点是source的功能,就是引用cmdlib.sh脚本里的函数和全局变量
service iptables stop
setenforce 0
yum -y install ftp vsftpd >/dev/null #add by kai.liang at 2017.04
}
do_test() #这个函数是执行测试的函数
{
#config #测试前配置信息,修改某些文件,这里跟具体用例有关系了,跟在手工测试时类似
grep "listen=YES" /etc/vsftpd/vsftpd.conf
if [ $? -ne 0 ] ; then #if是个判断语句,非常常见的,用于判断上步是否执行成功
sed -i "s/listen.*/listen=YES/g" /etc/vsftpd/vsftpd.conf
fi
#start vstfpd
service vsftpd restart
if [ $? -ne 0 ] ; then
tst_resm TFAIL "start vsftpd service failed" #tst_resm 是一个c语言程序,用来输出某些信息。
#后面会跟两个参数,TFAIL或者TPASS加信息
clean_test #clean_test是清理函数,将先前做的修改还原
end_testcase "start vsftpd service failed" #end_testcase是刚source的smdlib.sh文件的函数
#此函数一旦在do_test里执行就表示用例失败了
#通过源脚本可以看出来的,只有在最后执行才算成功
else
tst_resm TPASS "start vsftpd service succeed"
fi
#create user
cat /etc/passwd |grep "testuser"
if [ $? -ne 0 ] ; then
useradd testuser
if [ $? -ne 0 ] ; then
tst_resm TFAIL "add user failed"
clean_test
end_testcase "add user failed"
else
tst_resm TPASS "add user succeed"
fi
fi
#set passwd #设置密码,<<后的passwd是标识符,类似EOF
passwd testuser< { send \"quit\r\" };
expect \r;
expect eof;
"` #expect工具,用于交互式传输,经常用到,关于expect可以独立写篇文章了,很强大
echo $output |grep "221 Goodbye"
if [ $? -ne 0 ] ; then
tst_resm TFAIL "anonymous access ftp failed"
clean_test
end_testcase "anonymous access ftp failed"
else
tst_resm TPASS "anonymous access ftp succeed"
fi
#normal user access ftp
output=`expect -c "
set timeout 30;
spawn ftp localhost;
expect Name { send \"testuser\r\" };
expect assword { send \"abc123\r\" };
expect ftp> { send \"quit\r\" };
expect \r;
expect eof;
"`
echo $output |grep "221 Goodbye"
if [ $? -ne 0 ] ; then
tst_resm TFAIL "normal user access ftp failed"
clean_test
end_testcase "normal user access ftp failed"
else
tst_resm TPASS "normal user access ftp succeed"
fi
}
clean_test() #清理函数,用来清理执行测试的做的工作,一般是删除用户,将配置文件还原,关闭服务等
{
userdel testuser
rm -rf /home/testuser
service vsftpd stop
}
do_setup
do_test
clean_test
end_testcase
#四个函数依次执行,分别是配置、执行、清理、结束。如果脚本执行失败,最后一个函数不会执行。只有在成功时
#才会执行它。
可以看出主要是四个函数do_setup、do_test、clean_test、end_testcase,分别是分别是配置、执行、清理、结束。如果脚本执行失败,最后一个函数不会执行。只有在成功时才会执行它。
总结
开始测试时还是有点累人的,因为用例不过的话你得看日志或者脚本,系统bug到是好说,直接提bug就行了,如果配置问题你还得找出原因来才行,如果是脚本问题你得考虑更新脚本,虽然是用shell写的,语法比较简单,但是要看懂还得下点功夫才行呢。要真正懂得一个用例,你首先得shell语法过关,其次是专业知识过关,就是说你得知道这个用例是做什么的,如果使用手工执行你得会才行,否则的话遇到问题就抓瞎了。
可以看出使用isoft-ltp的目的就是代替部分的手工测试,提高执行效率。而以后的工作方向就是尽可能多的增加用例,代替手工测试,领导已经给我安排了任务,空闲时就得扩大自动化测试覆盖率。任重道远,吾将上下而求索。