Dieser Artikel konzentriert sich auf die Automatisierung von End-to-End-Tests mit virtuellen Maschinen. Der Artikel behandelt Themen wie die Automatisierung der Bereitstellung und Konfiguration von virtuellen Bänken sowie die Automatisierung des Starts von Prozessen in virtuellen Maschinen, gefolgt von der Überwachung der Ergebnisse. Am Ende des Artikels erhalten wir, wenn auch unvollständig (wir werden später darauf zurückkommen), ein einfaches und verständliches Skript, mit dem Sie Systemtests mit einer Schaltfläche ausführen können, auch ohne eine einzige virtuelle Maschine auf Ihrem Computer.
Der Artikel geht davon aus, dass der Leser über die folgenden Fähigkeiten verfügt:
- Sicherer Gebrauch des Linux-Betriebssystems;
- Grundlegendes Verständnis der Prinzipien der Virtualisierung;
- Einführung in den grafischen Client QEMU Hypervisor und Virt-Manager
Der Artikel ist in zwei Teile gegliedert: Im ersten Teil lernen wir die grundlegenden Tools kennen, mit denen wir virtuelle Maschinen ausschließlich über die Befehlszeile erstellen, bereitstellen und verwalten können. Dieses Wissen wird uns für den zweiten Teil des Artikels (hier zu finden: https://habr.com/ru/post/520648/ ) nützlich sein , in dem wir diese Tools miteinander verbinden und versuchen, Tests einer bestimmten Netzwerkanwendung zu automatisieren.
. . ( .. ). , , , , .
- , , - .
Was ist Systemtest?
(, , end-to-end ) — ( ) , . unit- ( ), ( ) . ?
, , , - . , , , . , . :
- ;
- (, );
- ( .. );
- ;
- .
, , , . , , , , - .
?
, ? (, ). , . , , :
- Linux, ;
- GUI ( -GUI);
- .
1 2 , . 3 , . ( ) , , .
?
, , , . QEMU, , . , , (, VirtualBox).
?
, , :
- ;
- "" ;
- . , , .
-, , , , : , . , , . , . , , , .
, !
, . , , , . , QEMU virt-install. :
virt-install \
--name my_super_vm \
--ram 1024 \
--disk my_super_vm.qcow2,size=8 \
--cdrom /path/to/ubuntu_server.iso
my_super_vm, 1024 , my_super_vm.qcow2 8 . CD- ubuntu_server.iso (, ), , , .
, , VNC-, . Ubuntu Server 18.04. , Ubuntu Server, , .
, -.
( ) . ( ) , , . . , . , , VirtualBox .
virt-install, , : . - , .
, . , . libguestfs . , virt-builder, "" .
Libguestfs — , . , . , , . ( Unix-way), , virt-copy-in. , -, , virt-builder.
, virt-builder? "" Ubuntu Server. :
virt-builder ubuntu-18.04 \
--format qcow2 \
--output my_super_disk.qcow2
? , qcow2 ( ) ubuntu-18.04, libguestfs. virt-builder , Ubuntu Server!
virt-builder , ,
, () my_super_disk.qcow2:
virt-install \
--import \
--name my_super_vm \
--ram 1024 \
--disk my_super_vm.qcow2
, --cdrom, . --import. , cdrom, ( Bios Boot Options ). .. Ubuntu Server, .
my_super_vm. , Ubuntu Server 18.04 .
. .
, : , . , ( ) . , GUI, bash- .
, , , : SSH- .
ssh . , , - . , ssh-. , ? , , .
. (pipe), . Linux- unix-socket, — . , , . , ssh, , . qemu-guest-agent.
, Hyper-V, KVP (Key-Value Pairs) Hyper-V Sockets.
:
- ;
- ;
-
root; - SSH- , SSH .
, , . . , — , sudo. , .
. :
- ;
- ( -).
, .
virsh, — libvirt.
Libvirt — , , , . libvirt — , . , . , QEMU, . , - QEMU, libvirt virsh, , .
libvirt (, , ) XML-. XML- :
<network>
<name>net_for_ssh</name>
<bridge name='net_for_ssh'/>
<ip address='192.168.100.1' netmask='255.255.255.0'/>
</network>
192.168.100.1 — , , .
, — xml :
virsh net-define net_for_ssh.xml
, :
virsh net-start net_for_ssh
. --network:
virt-install \
--import \
--name my_super_vm \
--ram 1024 \
--disk my_super_vm.qcow2 \
--network network=net_for_ssh \
--noautoconsole
--noautoconsole, VNC- (, - , virt-manager).
, : .
, (SSH- )? libguestfs virt-builder.
, , , . , Ubuntu Server 18.04 netplan, , , .yaml /etc/netplan. virt-builder --copy-in:
network:
version: 2
renderer: networkd
ethernets:
ens3:
addresses:
- 192.168.100.2/24virt-builder ubuntu-18.04 \
--format qcow2 \
--output my_super_disk.qcow2 \
--copy-in netcfg_ssh.yaml:/etc/netplan/
Ubuntu Server 18.04 virt-builder netcfg_ssh.yaml /etc/netplan/ .
, :
ping 192.168.100.2 -c5
, SSH.
SSH
:
-
root- ; - SSH-, ;
- SSH- .
root. virt-builder, , , , — root-:
virt-builder ubuntu-18.04 \
--format qcow2 \
--output my_super_disk.qcow2 \
--root-password password:1111 \
--copy-in netcfg_ssh.yaml:/etc/netplan/
SSH . - :
ssh-keygen -A
sed -i \"s/.*PermitRootLogin.*/PermitRootLogin yes/g\" /etc/ssh/sshd_config
, ? virt-builder , . , virt-builder . --run-command:
virt-builder ubuntu-18.04 \
--format qcow2 \
--output my_super_disk.qcow2 \
--root-password password:1111 \
--run-command "ssh-keygen -A" \
--run-command "sed -i \"s/.*PermitRootLogin.*/PermitRootLogin yes/g\" /etc/ssh/sshd_config" \
--copy-in netcfg_ssh.yaml:/etc/netplan/
. libguestfs , . , , User Space Linux Kernel. , . :
-
--run-command, ; - . —
apt install.
… ! ! , "". virt-install - . ssh . ssh :
#!/bin/bash
SSH_CMD="sshpass -p 1111 ssh -o StrictHostKeyChecking=no"
while ! $SSH_CMD root@192.168.100.2 echo Hello world from my super vm!
do
echo "Waiting for my super vm ..."
sleep 1
done
, -o StrictHostKeyChecking=no ssh , . sshpass , .
Im ersten Teil des Artikels haben wir noch keinen einzigen realen Systemtest geschrieben, aber wir haben ein umfangreiches Arsenal an Dienstprogrammen für die Arbeit mit virtuellen Maschinen kennengelernt, gelernt, wie man virtuelle Maschinen automatisch erstellt, Betriebssysteme auf ihnen einführt, sie konfiguriert und über SSH einen Steuerkanal einrichtet. Mit diesem Wissensbestand können wir nun sicher zu dem Wichtigsten und Interessantesten übergehen: Wie man schließlich Systemtests auf virtuellen Maschinen automatisiert.