QEMUベースのシステムテスト自動化(パート1/2)

この記事では、仮想マシンを使用したエンドツーエンドのテストの自動化に焦点を当てています。この記事では、仮想ベンチの展開と構成の自動化、仮想マシン内のプロセスの起動の自動化などの問題について説明し、結果を監視します。記事の最後に、不完全ではありますが(後でこれに戻ります)、コンピュータに単一の仮想マシンがなくても、ボタン1つでシステムテストを実行できるシンプルで理解しやすいスクリプトを受け取ります。



この記事は、読者が次のスキルを持っていることを前提としています。



  • Linuxオペレーティングシステムの自信のある使用。
  • 仮想化の原則の基本的な理解。
  • QEMUハイパーバイザーとvirt-managerグラフィカルクライアントの紹介


この記事は2つのパートに分かれています。最初のパートでは、コマンドラインのみを使用して仮想マシンを作成、展開、および管理できるようにする基本的なツールについて説明します。この知識は、記事の後半(https://habr.com/ru/post/520648/にあります)で役立ちます。ここでは、これらのツールを相互に接続し、特定のネットワークアプリケーションのテストを自動化しようとします。



免責事項

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



- , , - .



システムテストとは



システムテスト(または、エンドツーエンドテストと呼ばれることもあります)は、プログラムが機能する環境を考慮して、プログラム(またはシステム全体)をテストします。システムテストに加えて、ユニットテスト(特定の機能とモジュールのテスト)、統合テスト(プログラムの大きな独立したコンポーネントまたはプログラム全体のテスト)、および他の多くのタイプのテストもあります。しかし、なぜ体系的なものが私たちに興味を持ってくれるのでしょうか?



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



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


, , , . , , , , - .



?



, ? (, ). , . , , :



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





記事の最初の部分では、実際のシステムテストをまだ1つも作成していませんが、仮想マシンを操作するためのユーティリティの真剣な武器を知り、仮想マシンを自動的に作成し、OSをロールアウトし、構成し、SSHを介して制御チャネルを確立する方法を学びました。この豊富な知識により、最も重要で興味深いことに安全に進むことができます。結局のところ、仮想マシンでのシステムテストを自動化する方法です。




All Articles