Cet article se concentre sur l'automatisation des tests de bout en bout à l'aide de machines virtuelles. L'article traite de problèmes tels que l'automatisation du déploiement et de la configuration des bancs virtuels, ainsi que l'automatisation du lancement des processus à l'intérieur des machines virtuelles avec le contrôle ultérieur des résultats. À la fin de l'article, nous recevrons, certes pas idéal (nous y reviendrons plus tard), mais un script simple et compréhensible avec lequel vous pouvez exécuter des tests système avec un seul bouton, même sans avoir une seule machine virtuelle sur votre ordinateur.
L'article suppose que le lecteur possède les compétences suivantes:
- Utilisation sûre du système d'exploitation Linux;
- Compréhension de base des principes de la virtualisation;
- Présentation de l'hyperviseur QEMU et du client graphique virt-manager
L'article est divisé en deux parties: dans une première partie, nous nous familiariserons avec les outils de base qui nous permettront de créer, déployer et gérer des machines virtuelles en utilisant exclusivement la ligne de commande. Cette connaissance nous sera utile pour la deuxième partie de l'article (que vous pouvez trouver ici: https://habr.com/ru/post/520648/ ), où nous allons connecter ces outils entre eux et essayer d'automatiser les tests d'une application réseau spécifique.
. . ( .. ). , , , , .
- , , - .
Qu'est-ce que le test du système
(, , 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/24
virt-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
, .
Dans la première partie de l'article, nous n'avons pas encore écrit un seul test de système réel, mais nous nous sommes familiarisés avec un arsenal sérieux d'utilitaires pour travailler avec des machines virtuelles, avons appris à créer automatiquement des machines virtuelles, à déployer un système d'exploitation dessus, à les configurer et également à établir un canal de contrôle via SSH. Avec ce stock de connaissances, nous pouvons maintenant passer en toute sécurité à la chose la plus importante et la plus intéressante: comment, après tout, automatiser les tests système sur les machines virtuelles.