Artikel ini berfokus pada otomatisasi pengujian ujung ke ujung menggunakan mesin virtual. Artikel ini membahas masalah-masalah seperti otomatisasi penerapan dan konfigurasi bangku virtual, serta otomatisasi peluncuran proses di dalam mesin virtual dengan kontrol hasil selanjutnya. Di akhir artikel, kami akan menerima, meskipun tidak ideal (kami akan kembali ke ini nanti), tetapi skrip sederhana dan dapat dimengerti yang dengannya Anda dapat menjalankan pengujian sistem dengan satu tombol, bahkan tanpa satu mesin virtual di komputer Anda.
Artikel tersebut mengasumsikan bahwa pembaca memiliki keterampilan berikut:
- Penggunaan sistem operasi Linux secara percaya diri;
- Pemahaman dasar tentang prinsip-prinsip virtualisasi;
- Memperkenalkan klien grafis hypervisor dan virt-manager QEMU
Artikel ini dibagi menjadi dua bagian: di bagian pertama kita akan berkenalan dengan alat dasar yang memungkinkan kita membuat, menerapkan, dan mengelola mesin virtual hanya menggunakan baris perintah. Pengetahuan ini akan berguna bagi kami untuk bagian kedua dari artikel (yang dapat ditemukan di sini: https://habr.com/ru/post/520648/ ), di mana kami akan menghubungkan alat-alat ini bersama-sama dan mencoba untuk mengotomatiskan pengujian dari aplikasi jaringan tertentu.
. . ( .. ). , , , , .
- , , - .
Apa itu pengujian sistem
(, , 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 , .
Di bagian pertama artikel, kami belum menulis satu uji sistem nyata, tetapi kami berkenalan dengan persenjataan utilitas yang serius untuk bekerja dengan mesin virtual, mempelajari cara membuat mesin virtual secara otomatis, meluncurkan OS, mengonfigurasinya, dan juga membuat saluran kontrol melalui SSH. Dengan bekal pengetahuan ini, sekarang kita dapat dengan aman beralih ke hal yang paling penting dan menarik: bagaimana, bagaimanapun, mengotomatiskan pengujian sistem pada mesin virtual.