Autotest是一套开源的完全自动化的测试框架。主要应用于Linux内核测试,其内部包含了对KVM的自动化测试。Autotest系统架构如图所示,通过Web前端或者命令行工具提交测试任务,Autotest Server通过调度器将任务分发到不同的Client,Client端任务执行完之后,再将结果返回到结果分析后端,Web前端与命令行接口即可查看测试结果。
请参考其官方主页(注:由于autotest主页改版,下面的链接可能失效了)。
1.1 Autotest Server安装
1) 必要软件
Server安装过程按照以下链接的说明。
http://www.linux-kvm.org/page/KVM-Autotest/Server_Install
注意:必须要以 autotest 帐户安装server 。
而且从/usr/local/autotest/utils/test_importer.py –A导入autotest目录下的用例后,从
http://your_ip/afe 界面上Admin interface->Tests下面可以看到刚刚导入的用例。
2) 配置DHCP server (或者在同网段的其他机器上搭建dhcp server)
yum install dhcpd
vim/etc/dhcp/dhcpd.conf
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd.conf.sample
# see 'man 5 dhcpd.conf'
#
ddns-update-style interim;
ignoreclient-updates;
allowbootp;
subnet180.96.41.0 netmask 255.255.255.0 {
option routers 180.96.41.1; # default gateway
option subnet-mask 255.255.255.0;
option domain-name "";
option domain-name-servers 180.96.41.16;
option netbios-name-servers 180.96.41.16; #WINS Server
default-lease-time 43200;
max-lease-time 86400;
option time-offset -18000; # Eastern Standard Time
range dynamic-bootp 180.96.41.100 180.96.41.160; #DHCP Range to assign
host h1 {
hardware ethernet 04:93:94:95:96:01;
fixed-address 180.96.41.161;
}
host h2 {
hardware ethernet 04:93:94:95:96:02;
fixed-address 180.96.41.162;
}
……
}
service dhcpdrestart
chkconfig --levels345 dhcpd on
autotest是通过tcpdump dhcp广播来发现虚拟机的IP的,并且autotest中有一部分测试(例如remote netperf/jmeter)都需要在dhcpd.conf文件中配置固定 mac 对应固定的IP (fixed-address)。
3) 另修改配置文件global_config.ini
[AUTOSERV]
client_autodir_paths:/usr/local/client_autotest,/home/autotest
将host上autotest的安装目录修改,使之区别于server autotest的安装目录。如果server同时配置为host,则该选项必须要修改。
1.2 Autotest Host安装
1.2.1 必要软件
HOST端按照以下链接的说明,需要安装qemu-kvm、genisoimage等(一般情况下HOST上已经安装好这些软件)。
http://autotest.kernel.org/wiki/KVMAutotest/InstallPrerequesitePackagesClient
1.2.2 无密码SSH
要作为autotest host,需要建立从autotestserver到host之间无密码的SSH,大部分测试用例需要HOST上的root帐户才能执行,所以必须直接登录到root@host_name。
root@autotest_server ---à root@host_name
autotest@autotest_server ---à root@host_name
Ø 配置第一个HOST
在autotest server上,分别用root帐户和autotest用户分别执行以下两条命令:
ssh-keygen -t rsa
注意ssh-keygen -t rsa命令,只执行一次。后续新添加的host,再配置无密码的SSH时,不需要重复执行这条命令。
Then, still on the server, copy it to the host:
ssh-copy-idroot@host_name
如果root帐户不能直接登录,则可以先借用其他帐户:
ssh-copy-id sdgadmin@host_name
cat /home/sdgadmin/.ssh/authorized_keys>> /root/.ssh/authorized_keys
验证是否配置成功:ssh -p 58422 root@180.96.41.18
如果还是需要输入密码,则需要检查host_name上面的/etc/ssh/sshd_config,再重新尝试:
PermitRootLogin yes
StrictModes no
ChallengeResponseAuthenticationno
UseDNS no
#AllowGroups sshers(注释掉)
Ø 配置后续HOST
Autotest集群里的其他host,例如host2, 可以简单地把已配置好的host1上的/root/.ssh/authorized_keys追加到自己的/root/.ssh/authorized_keys。同时注意修改本机上/etc/ssh/sshd_config 配置是否正确。
1.2.3 应用软件(打压力机)
用于打压力的host还需要安装jmeter运行的环境。
Jmeter的运行需要JDK的支持,需要安装JDK环境:
yum install java-1.6.0-openjdk-devel.x86_64
同时需要监控异常情况发邮件通知,安装sendmail:
yum install sendmail
service sendmail start
service sendmail status
如果sendmail状态异常,有可能是默认的SMTP的25号端口已被占用,修改vim/etc/mail/sendmail.cf
O DaemonPortOptions=Name=MTA
为
O DaemonPortOptions=Port=2025
1.2.4 将autotest server配置成host (不推荐)
如果机器紧张,也可以将autotest server配置成host,此时需要建立从server到root@server的无密码的SSH。
1.3 Guestimage配置
Windows与linux的guest image都有如下需求:
1) 与集群中机器可以相互socket connect (防火墙配置)
1.3.1 Linuxguest image配置
1) 防火墙配置允许集群内机器互连。如果需要关闭防火墙,对于linux:
service iptablesstop
chkconfig –deliptables
2) 配置从 server到guest的无密码的SSH(这只有linuxnetperf remote这个用例有需要)。
3) Linuximage: 配置启动时删除文件/etc/udev/rules.d/70-persistenct-net.rules
在/etc/rc.d/rc.local中加入一行:
rm –f /etc/udev/rules.d/70-persistenct-net.rules
4) Linux:配置serialconsole login
a) 在VM 启动后,检查系统是否支持serial:
dmesg| grep tty
当显示出/dev/ttyS0 和/dev/ttyS1.时说明系统支持serial
b) 修改/boot/grub/grub.conf, 在kernel后面添加参数:
console=tty0 console=ttyS0,9600n8
c) 修改/etc/inittab,添加:
s0 : 2345:respawn:/sbin/agetty -h -t 60 ttyS0 9600 vt102
d) 配置可以以root身份登录串口终端:修改/etc/securetty ,添加
ttyS0
1.3.2 Windows guestimage配置
winutil.iso中setuprss.exe的自启动。
并且根据具体测试用例的要求,需要配置好iometer/jmeter等的环境。
总的来说,集群里的所有机器(包括虚拟机)要保证:
1) 从Autotestserver 到其他机器(包括linux 虚拟机)的无密码的SSH 。
2) 保证可以相互socketconnect (host 与guest 的防火墙配置)
1.4 简单使用
1.4.1 Getstarted
cd<autotest_root>/client/tests/kvm
./get_started.py
该脚本按照cfg.sample生成cfg文件,并下载测试KVM所需的guest os ISO。由于我们是自己提供image,所以不需要guest os ISO。所以第一次运行该脚本,出现 (y/n) 时,可以一致选n ,但winutil.iso 必须选y 。 所有的image或iso建议放在autotest目录之外,否则任务执行时远程拷贝的量太大!
这是因为winutil.iso中包括了测试windows所需的套件(如rss.exe,autoit等),这个必须要下载。其默认安装路径:/tmp/kvm_autotest_root/isos/windows/winutils.iso。
当winutil.iso在guest os中加载后,双击setuprss.exe安装这些套件(配置开机自启动)。
Autotest用例是通过control文件来执行,control文件分为两种:
Ø Client control ,只需要由一台host执行的任务。这种任务可以有两种方式执行,例如:
/usr/local/autotest/client/bin/autotest path_to_client_control
或者
/usr/local/autotest/server/autoserv -m root@180.96.41.18:58422 -c path_to_client_control
Ø Server control, 一般文件扩展名是.srv。是需要由两台或两台以上的host执行的任务。这种任务必须要通过autoserv执行,例如:
/usr/local/autotest/server/autoserv -m root@180.96.41.18:58422 , root@180.96.41.19:58422-r ./results -s ../server/tests/netperf2/control.srv
使用bin/autotest或者autoserv来执行任务,其执行结果不会记录到数据库中,也不维护HOST的状态,这两种方式一般作为调试时使用。而webfrontend,以及CLI这两种方式对autoserv以及bin/autotest进行了包装,将每个job的执行状态以及结果记录到DB中。
所以,正式执行测试任务时,推荐使用以下的web frontend以及cli两种方式。
1.4.2 使用web frontend
在浏览器中访问:http://180.96.41.19/afe
Ø 创建host。注意host 名必须是可SSH 的名字,如root@180.96.41.18:58422.
在页面上点击“Admininterface”-> “HOSTS” -> ”ADD”
可以设置host的标签,分组。
Ø 创建并提交测试任务:
进入主页面:Go to Frontend à CreateJob
按要求填写各项后,然后Submit Job
如果未设置reboot_before 和reboot_after ,默认会在job 开始前以及结束后,重启该host 。
Ø 查看JOB 结果
在Job List选中相应的JOB,进入View Job,查看:
所有WEB提交的JOB存放结果的目录位于:autotest/results/
1.4.3 使用CLI
可以参照http://autotest.kernel.org/wiki/CLIHowTo
cd /usr/local/autotest/cli/
Ø 创建host,注意host名必须是可SSH的名字,如root@180.96.41.18:58422.
./attest hostcreate root@180.96.41.18:58422 -whttp://180.96.41.19
Ø 创建并提交测试任务:
./atest job create-m root@180.96.41.18:58422 -f ../client/tests/sleeptest/control --reboot_before=never--reboot_after=never -g -v -w http://180.96.41.19 yupiwang
如果未设置reboot_before和reboot_after,默认会在job开始前以及结束后,重启该host。
2 KVM配置修改
KVM的自动化测试目录在client/tests/kvm目录下,针对虚机的测试配置,包括base.cfg,subtest.cfg,guest-os.cfg,tests.cfg等配置文件(这些配置文件由get_started.py根据samples.cfg生成)。
Ø base.cfg负责虚机的通用的基本配置,包括name、mem、image、nic等信息。内部主要需要修改的项包括bridge, vms, main_vm
qemu_binary =/usr/libexec/qemu-kvm
qemu_img_binary =/usr/bin/qemu-img
Ø guest-os.cfg负责针对各操作系统的特有的参数,内部主要需要修改的项是:
修改windows的winutils.iso的实际路径:
Ø subtest.cfg负责KVM虚机各个子测试用例的相关参数。这个根据测试用例的需求作相应的修改,比如netperf的测试时长、测试类型等。
Ø tests.cfg为一个总括的测试配置,其最终决定了该测试跑什么测试用例、测试用例的顺序。
其中,配置文件的格式参见:
http://www.linux-kvm.org/page/KVM-Autotest/Test_Config_File
并且,在KVM目录下,使用以下命令可以查看tests.cfg描述的测试用例中的key-value集合是否和预期一致:
../../common_lib/cartesian_config.pytests.cfg
../../common_lib/cartesian_config.py-c tests.cfg
../../common_lib/cartesian_config.py--verbose /path/to/cfgfile
在修改配置时,必须要注意的是,如果同时跑在集群内多个任务,必须要把 nic_mac 指定为不同的值,以获取不同的IP 地址。同时,如果一个host 上同时跑多个任务创建多个VM ,还需要把各任务的image_name 指定为不同的镜像。
3 KVM测试用例的添加
KVM的测试用例目录为client/virt/tests 和client/tests/kvm/tests,前者为autotest为虚拟机提供的通用测试用例,后者为专为kvm应用。
需要多机协调进行的,需要放到server/tests目录下,只需要单机完成的,放到client/tests目录下。
测试用例的添加具体细节同时可以参考:
http://autotest.kernel.org/wiki/KVMAutotest/WritingNewTests
http://autotest.kernel.org/wiki/ControlHowto
http://autotest.kernel.org/wiki/ServerControlHowto
http://autotest.kernel.org/wiki/Autoserv
写好对应的control 以及相应脚本后,使用以下命令重新向WEB导入用例:
/usr/local/autotest/utils/test_importer.py-c
/usr/local/autotest/utils/test_importer.py
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com