Разработка тестовых сценариев на Python
Сценарии тестирования используются в процессе разработки программного обеспечения для проверки и валидации функциональности, производительности и надежности приложения. Они помогают убедиться, что программа работает так, как задумано, и выполняет все заявленные функции, что является основным аспектом обеспечения качества.
Одной из ключевых целей тестовых сценариев является выявление ошибок и дефектов в коде до его выпуска в продуктивную среду. Это позволяет снизить затраты на исправление ошибок в будущем и повышает общее качество программного обеспечения, так как регулярное тестирование помогает поддерживать код в рабочем состоянии и предотвращает регрессии.
Тестовые сценарии также служат документацией для требований к системе, описывая, как она должна вести себя в различных ситуациях. Это может быть полезно как для разработчиков, так и для тестировщиков, обеспечивая общее понимание требований и ожиданий. Кроме того, сценарии могут быть автоматизированы, что значительно ускоряет процесс тестирования и снижает вероятность человеческой ошибки.
Предварительная настройка виртуальных машин
Для выполнения задания понадобятся следующие образы операционных систем:
Установка 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 со всеми участниками виртуальной сети установлена.