isoft-ltp测试小结

最近做了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的目的就是代替部分的手工测试,提高执行效率。而以后的工作方向就是尽可能多的增加用例,代替手工测试,领导已经给我安排了任务,空闲时就得扩大自动化测试覆盖率。任重道远,吾将上下而求索。

发表回复