Automatización de pruebas de sistemas basada en QEMU (Parte 1/2)

Este artículo se centra en la automatización de pruebas de un extremo a otro utilizando máquinas virtuales. El artículo aborda temas como la automatización del despliegue y configuración de stands virtuales, así como la automatización del lanzamiento de procesos dentro de las máquinas virtuales, seguido del seguimiento de los resultados. Al final del artículo, recibiremos, aunque no lo ideal (volveremos a esto más adelante), sino un script simple y comprensible con el que puede ejecutar pruebas del sistema con un solo botón, incluso sin tener una sola máquina virtual en su computadora.



El artículo asume que el lector tiene las siguientes habilidades:



  • Uso seguro del sistema operativo Linux;
  • Comprensión básica de los principios de virtualización;
  • Presentamos el hipervisor QEMU y el cliente gráfico virt-manager


El artículo se divide en dos partes: en la primera parte nos familiarizaremos con las herramientas básicas que nos permitirán crear, desplegar y gestionar máquinas virtuales utilizando exclusivamente la línea de comandos. Este conocimiento nos será útil para la segunda parte del artículo (que se puede encontrar aquí: https://habr.com/ru/post/520648/ ), donde conectaremos estas herramientas e intentaremos automatizar las pruebas de una aplicación de red específica.



Descargo de responsabilidad

. . ( .. ). , , , , .



- , , - .



Que es la prueba del sistema



(, , end-to-end ) — ( ) , . unit- ( ), ( ) . ?



, , , - . , , , . , . :



  • ;
  • (, );
  • ( .. );
  • ;
  • .


, , , . , , , , - .



?



, ? (, ). , . , , :



  1. Linux, ;
  2. GUI ( -GUI);
  3. .


1 2 , . 3 , . ( ) , , .



?



, , , . QEMU, , . , , (, VirtualBox).



?



, , :



  1. ;
  2. "" ;
  3. . , , .


-, , , , : , . , , . , . , , , .



, !





, . , , , . , 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

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.



:



  1. ;
  2. ;
  3. root ;
  4. SSH- , SSH .


ssh

, , . . , — , sudo. , .



. :



  1. ;
  2. ( -).


, .



virsh, — libvirt.



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:



netcfg_ssh.yaml
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



:



  1. root- ;
  2. SSH-, ;
  3. 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 , .





En la primera parte del artículo, aún no hemos escrito una sola prueba de sistema real, pero nos familiarizamos con un arsenal serio de utilidades para trabajar con máquinas virtuales, aprendimos cómo crear automáticamente máquinas virtuales, implementar sistemas operativos en ellas, configurarlas y también establecer un canal de control a través de SSH. Con este acervo de conocimientos, ahora podemos pasar con seguridad a lo más importante e interesante: cómo, después de todo, automatizar las pruebas del sistema en máquinas virtuales.




All Articles