Разработка тестовых сценариев на Python

· 21 мин чтения

Сценарии тестирования используются в процессе разработки программного обеспечения для проверки и валидации функциональности, производительности и надежности приложения. Они помогают убедиться, что программа работает так, как задумано, и выполняет все заявленные функции, что является основным аспектом обеспечения качества.

Одной из ключевых целей тестовых сценариев является выявление ошибок и дефектов в коде до его выпуска в продуктивную среду. Это позволяет снизить затраты на исправление ошибок в будущем и повышает общее качество программного обеспечения, так как регулярное тестирование помогает поддерживать код в рабочем состоянии и предотвращает регрессии.

Тестовые сценарии также служат документацией для требований к системе, описывая, как она должна вести себя в различных ситуациях. Это может быть полезно как для разработчиков, так и для тестировщиков, обеспечивая общее понимание требований и ожиданий. Кроме того, сценарии могут быть автоматизированы, что значительно ускоряет процесс тестирования и снижает вероятность человеческой ошибки.

Предварительная настройка виртуальных машин

Для выполнения задания понадобятся следующие образы операционных систем:

Установка 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 со всеми участниками виртуальной сети установлена.