Este artigo se concentra na automação de testes de ponta a ponta usando máquinas virtuais. O artigo aborda questões como a automação da implantação e configuração de bancadas virtuais, bem como a automação da inicialização de processos dentro de máquinas virtuais, seguida do monitoramento dos resultados. No final do artigo, receberemos, embora não seja ideal (voltaremos a isso mais tarde), mas um script simples e compreensível com o qual você pode executar testes de sistema com um botão, mesmo sem ter uma única máquina virtual em seu computador.
O artigo pressupõe que o leitor possui as seguintes habilidades:
- Uso seguro do sistema operacional Linux;
- Conhecimento básico dos princípios de virtualização;
- Apresentando o hipervisor QEMU e o cliente gráfico virt-manager
O artigo está dividido em duas partes: na primeira iremos nos familiarizar com as ferramentas básicas que nos permitirão criar, implantar e gerenciar máquinas virtuais utilizando exclusivamente a linha de comando. Esse conhecimento será útil para a segunda parte do artigo (que pode ser encontrada aqui: https://habr.com/ru/post/520648/ ), onde conectaremos essas ferramentas e tentaremos automatizar os testes de um aplicativo de rede específico.
. . ( .. ). , , , , .
- , , - .
O que é teste de sistema
(, , 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
, .
Na primeira parte do artigo, ainda não escrevemos um único teste de sistema real, mas nos familiarizamos com um sério arsenal de utilitários para trabalhar com máquinas virtuais, aprendemos como criar máquinas virtuais automaticamente, implantar o sistema operacional nelas, configurá-las e também estabelecer um canal de controle via SSH. Com esse estoque de conhecimento, podemos agora passar com segurança para o mais importante e interessante: como, afinal, automatizar testes de sistema em máquinas virtuais.