تركز هذه المقالة على أتمتة الاختبار الشامل باستخدام الأجهزة الافتراضية. تناقش المقالة قضايا مثل أتمتة نشر وتكوين المقاعد الافتراضية ، فضلاً عن أتمتة إطلاق العمليات داخل الأجهزة الافتراضية ، متبوعًا بمراقبة النتائج. في نهاية المقال ، سنحصل ، وإن كان غير كامل (سنعود إلى هذا لاحقًا) ، لكنه نص بسيط ومفهوم يمكنك من خلاله إجراء اختبارات النظام باستخدام زر واحد ، حتى بدون وجود جهاز افتراضي واحد على جهاز الكمبيوتر الخاص بك.
تفترض المقالة أن القارئ لديه المهارات التالية:
- الاستخدام الواثق لنظام التشغيل Linux ؛
- الفهم الأساسي لمبادئ الافتراضية ؛
- تقديم العميل الرسومي لـ QEMU Hypervisor و Virt-manager
تنقسم المقالة إلى جزأين: في الجزء الأول سوف نتعرف على الأدوات الأساسية التي ستسمح لنا بإنشاء ونشر وإدارة الأجهزة الافتراضية باستخدام سطر الأوامر حصريًا. ستكون هذه المعرفة مفيدة لنا في الجزء الثاني من المقالة (والذي يمكن العثور عليه هنا: https://habr.com/ru/post/520648/ ) ، حيث سنقوم بتوصيل هذه الأدوات معًا ومحاولة أتمتة اختبارات تطبيق شبكة معين.
. . ( .. ). , , , , .
- , , - .
ما هو اختبار النظام
اختبار النظام (أو ، كما يطلق عليه أحيانًا ، الاختبار الشامل) هو اختبار برنامج (أو حتى نظام كامل) مع مراعاة البيئة التي يتعين على البرنامج العمل فيها. بالإضافة إلى اختبار النظام ، هناك أيضًا اختبار الوحدة (اختبار وظائف ووحدات محددة) ، واختبار التكامل (اختبار المكونات المستقلة الكبيرة لبرنامج أو برنامج بأكمله) والعديد من أنواع الاختبارات الأخرى. لكن لماذا يجب أن نهتم بالمنهجية؟
, , , - . , , , . , . :
- ;
- (, );
- ( .. );
- ;
- .
, , , . , , , , - .
?
, ? (, ). , . , , :
- 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 , .
في الجزء الأول من المقالة ، لم نكتب بعد اختبارًا حقيقيًا واحدًا للنظام ، لكننا تعرفنا على ترسانة كبيرة من الأدوات المساعدة للعمل مع الأجهزة الافتراضية ، وتعلمنا كيفية إنشاء أجهزة افتراضية تلقائيًا ، ونشر نظام التشغيل عليها ، وتكوينها ، وكذلك إنشاء قناة تحكم عبر SSH. مع هذا المخزون من المعرفة ، يمكننا الآن الانتقال بأمان إلى الشيء الأكثر أهمية وإثارة للاهتمام: كيف ، بعد كل شيء ، لأتمتة اختبارات النظام على الأجهزة الافتراضية.