РАЗРАБОТКА ТЕСТОВЫХ СЦЕНАРИЕВ НА PYTHON
Цель: разработать тестовые сценарии, которые будут выполняться на виртуальных машинах с помощью протокола SSH.
Сценарии тестирования используются в процессе разработки программного обеспечения для проверки и валидации функциональности, производительности и надежности приложения. Они помогают убедиться, что программа работает так, как задумано, и выполняет все заявленные функции, что является основным аспектом обеспечения качества.
Одной из ключевых целей тестовых сценариев является выявление ошибок и дефектов в коде до его выпуска в продуктивную среду. Это позволяет снизить затраты на исправление ошибок в будущем и повышает общее качество программного обеспечения, так как регулярное тестирование помогает поддерживать код в рабочем состоянии и предотвращает регрессии.
Тестовые сценарии также служат документацией для требований к системе, описывая, как она должна вести себя в различных ситуациях. Это может быть полезно как для разработчиков, так и для тестировщиков, обеспечивая общее понимание требований и ожиданий. Кроме того, сценарии могут быть автоматизированы, что значительно ускоряет процесс тестирования и снижает вероятность человеческой ошибки.
Предварительная настройка виртуальных машин
Для выполнения задания понадобятся следующие образы операционных систем:
-
RouterOS;
-
Alt Workstation;
-
Alt Server.
Установка RouterOS в VMware Workstation. Прежде, чем устанавливать и настраивать виртуальные машины, необходимо создать папку для нашего «тестового» стенда: ниже списка с виртуальными машинами необходимо нажать ПКМ и выбрать пункт «New Folder». Папка должна называться «TestScript».
Создание виртуальной машины RouterOS:
После этого в рабочей области появится новая виртуальная машина с названием ISP:
После этого «ОК». Должны стать так:
Создание виртуальной машины Alt Server:
Создание виртуальной машины Alt Workstation:
Виртуальные машины созданы. Теперь необходимо каждую из них установить.
ISP:
После того, как нажали «i», необходимо написать «y» и нажать «Enter». Начнётся процесс установки. После установки необходимо повторно нажать «Enter», чтобы устройство перезагрузилось.
Логин «admin», пароль – отсутствует. Просто, после ввода логина, нужно нажать «Enter». После написать «n», нажать «Enter» и через несколько секунд ещё раз «Enter». Попросит новый пароль: введите дважды P@ssword.
Операционная система RouterOS установлена и готова к работе.
AltServer:
После перезагрузки запустится ОС в минимальной комплектации (без интерфейса):
AltWorkstation:
После перезагрузки запустится ОС:
После авторизации («P@ssw0rd»):
Чтобы выполнить тестирование с помощью Python, необходимо настроить основные параметры для подключения к виртуальным машинам. На ISP необходимо настроить DHCP Client, чтобы роутер мог получить IP-адрес со стороны NAT-соединения.
Проверяем отсутствие IP-адреса:
Создаём DHCP Client и убеждаемся, что всё сработало:
Переходим в PyCharm и создаём файл «test_script.py». Необходимо дополнительно установить модуль, с помощью которого будет осуществляться взаимодействие с RouterOS: «pip install routeros_api».
Код для подключения к ISP и вывода информации об интерфейсах:
from routeros_api import RouterOsApiPool
if __name__ == '__main__': routeros_api = RouterOsApiPool( host='10.0.0.106', username='admin', password='P@ssw0rd', port=8728, plaintext_login=True, ) api = routeros_api.get_api()
try: result = api.get_resource('/ip/address').get()
for item in result: print(item)
except Exception as err: print(f'[!] Ошибка: {err}')
finally: routeros_api.disconnect() |
IP-адрес хоста должен соответствовать тому адресу, который выводится при выполнении команды «ip/address/print».
Вывод кода:
{'id': '*1', 'address': '10.0.0.106/24', 'network': '10.0.0.0', 'interface': 'ether1', 'actual-interface': 'ether1', 'invalid': 'false', 'dynamic': 'true', 'slave': 'false', 'disabled': 'false'} |
Настройка NAT на ISP, чтобы виртуальные машины – AltServer и AltWorkstation могли свободны выходить в Интернет:
Настройка шлюзов (интерфейсов) для виртуальных машин:
Обратите внимание, что все действия на AltServer и AltWorkstation выполняются с повышенными привилегиями (из-под «root»). Чтобы выполнять команды из-под «root», необходимо в командной строке AltServer и AltWorkstation выполнить команду: «su -» и ввести пароль «P@ssw0rd».
AltServer:
Проверяем возможность выхода в Интернет:
AltWorkstation:
Esc + Да:
Проверяем возможность выхода в Интернет:
После настройка соединения с Интернет, необходимо на AltServer и AltWorkstation настроить возможность подключения по SSH.
AltServer:
Esc + Да:
После того, как убедились в возможности подключаться по SSH, отключаемся с помощью команды «Ctrl + D»:
AltWorkstation:
Esc + Да:
После того, как убедились в возможности подключаться по SSH, отключаемся с помощью команды «Ctrl + D»:
Чтобы можно было подключаться к виртуальным машинам AltServer и AltWorkstation, необходимо настроить проброс портов на ISP:
Проверка из хостовой ОС Windows:
Как видно, всё работает.
Теперь можно написать Python-скрипт, который будет выполнять подключение к AltServer или AltWorkstation. Перед этим необходимо установить модуль «paramiko»: «pip install paramiko».
Дорабатываем программу:
import paramiko from routeros_api import RouterOsApiPool
def isp(): routeros_api = RouterOsApiPool( host='10.0.0.106', username='admin', password='P@ssw0rd', port=8728, plaintext_login=True, ) api = routeros_api.get_api()
try: result = api.get_resource('/ip/address').get()
for item in result: print(item)
except Exception as err: print(f'[!] Ошибка: {err}')
finally: routeros_api.disconnect()
def alt_server(): ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(hostname='10.0.0.106', port=2210, username='root', password='P@ssw0rd')
stdin, stdout, stderr = ssh.exec_command('ip -c --br a')
print(stdout.read().decode()) print(stderr.read().decode())
ssh.close()
if __name__ == '__main__': #isp() alt_server() |
IP-адрес хоста должен соответствовать тому адресу, который выводится при выполнении команды «ip -c --br a».
Вывод в консоли:
Добавляем к коду подключение к AltWorkstation:
import paramiko from routeros_api import RouterOsApiPool
def isp(): routeros_api = RouterOsApiPool( host='10.0.0.106', username='admin', password='P@ssw0rd', port=8728, plaintext_login=True, ) api = routeros_api.get_api()
try: result = api.get_resource('/ip/address').get()
for item in result: print(item)
except Exception as err: print(f'[!] Ошибка: {err}')
finally: routeros_api.disconnect()
def alt_server(): ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(hostname='10.0.0.106', port=2210, username='root', password='P@ssw0rd')
stdin, stdout, stderr = ssh.exec_command('ip -c --br a')
print(stdout.read().decode()) print(stderr.read().decode())
ssh.close()
def alt_workstation(): ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(hostname='10.0.0.106', port=2220, username='root', password='P@ssw0rd')
stdin, stdout, stderr = ssh.exec_command('ip -c --br a')
print(stdout.read().decode()) print(stderr.read().decode())
ssh.close()
if __name__ == '__main__': #isp() #alt_server() alt_workstation() |
IP-адрес хоста должен соответствовать тому адресу, который выводится при выполнении команды «ip -c --br a».
Вывод в консоли:
Суммарный вывод всех функций:
Базовое взаимодействие через Python со всеми участниками виртуальной сети установлена.
Практическая работа
Доработайте данную программу, чтобы можно было выполнять дополнительные действия внутри виртуальной сети на виртуальных машинах:
-
получение полной конфигурации ISP;
-
тестирование связности между устройствами AltServer и AltWorkstation;
-
получение логов с ISP;
-
выполнение резервного копирования конфигурации ISP на основную (хостовую) машину;
-
проверка состояния служб на AltServer;
-
автоматическое обновление пакетов на AltServer/AltWorkstation;
-
мониторинг дискового пространства на AltServer/AltWorkstation;
-
проверка доступности определённых портов с помощью стандартного модуля Python «socket»;
-
создание пользователей на AltServer/AltWorkstation;
-
разработка интерактивной среды для последовательного выполнения команд на виртуальных машинах.