Настройка
- В настоящее время используется версия Python
2. Используются пакеты Paramiko и Unitest
- Pytest еще не используется в этом тестовом примере, но я был бы очень признателен, если у кого-то есть идея, которую вы можете реализовать с помощью Pytest
В настоящее время я переписываю различные тестовые наборы и создаю новые тестовые наборы.
В моем примере вот что должно произойти:
- Пользователи должны быть созданы с разными правами на маршрутизаторе / коммутаторе
- Создан пользователь "Testuser 1" с привилегией 1 (очень низкие права)
- Выполняет команду подсказки, которую он не может выполнить по юридическим причинам.
- Если он сможет выполнить эту команду, тест должен был провалиться. Если он не может этого сделать, тест положительный.
- Последний пользователь после выполнения должен выйти из коммутатора / маршрутизатора.
- Теперь на следующем шаге будет создан еще один пользователь (сначала это не проблема)
- Вновь созданный пользователь "Testuser 2" теперь должен войти в систему как "Testuser 1". Но тут дело доходит до этой проблемы:
Исключение:
Это исключение после запуска теста 2. Логин второго пользователя, видимо этот пользователь заблокирован моим роутером и коммутатором.
Exception: Error reading SSH protocol banner Traceback (most recent call last):
File "C:\Python37\lib\site-packages\paramiko\transport.py", line 2044, in
_check_banner
buf = self.packetizer.readline(timeout)
File "C:\Python37\lib\site-packages\paramiko\packet.py", line 353, in
readline
buf += self._read_timeout(timeout)
File "C:\Python37\lib\site-packages\paramiko\packet.py", line 542, in
_read_timeout
raise EOFError() EOFError
During handling of the above exception, another exception occurred:
Traceback (most recent call last): File
"C:\Python37\lib\site-packages\paramiko\transport.py", line 1893, in
run
self._check_banner()
File "C:\Python37\lib\site-packages\paramiko\transport.py", line 2049, in
_check_banner
'Error reading SSH protocol banner' + str(e) paramiko.ssh_exception.SSHException: Error reading SSH protocol banner
connection negativ
---------------------------------------------------------------------- Ran 4 tests in 6.072s
OK
Здесь вы можете увидеть полный тест
краткая информация: testcore - это специальный специальный пакет, который использует Paramiko complete
import paramiko
import SSH
import unittest
from test import support
class SwitchAccount(unittest.TestCase):
def setUp(self):
self.s = testcore.control.ssh.SSH(host='xxx.xx.xx.xxx', username='admin', password='admin')
if self.s.login():
print('connection succesfull')
else:
print('connection negativ')
self.s.query_interactive = True
def test_change_Enforce_Enable(self):
if self.s.login():
q = self.s.query('account')
# switch to prompt account
q = self.s.query('enforce-Password-Rules yes')
def test_create_user_rights_1(self):
if self.s.login():
q = self.s.query('account')
# switch to prompt account
q = self.s.query('add 1 testuser_P1 testuser_P1')
q = self.s.query('logout')
def setUp(self):
self.s = testcore.control.ssh.SSH(host='xxx.xx.xx.xxx', username='testuser_P1', password='testuser_P1')
if self.s.login():
print('connection succesfull')
else:
print('connection negativ')
import time
print('Wait')
time.sleep(6)
def test_try_wrong_promp_command(self):
if self.s.login():
q = self.s.query('account')
# switch to prompt account
q = self.s.query('aaa')
q = self.s.query('trace ')
import time
print('Wait')
time.sleep(6)
def test_create_user_rights_2(self):
if self.s.login():
q = self.s.query('account')
# switch to prompt account
q = self.s.query('add 2 testuser_P2 testuser_P2')
import time
print('Wait')
time.sleep(6)
q = self.s.query('logout')
def setUp(self):
self.s = testcore.control.ssh.SSH(host='xxx.xx.xx.xxx', username='testuser_P2', password='testuser_P2')
if self.s.login():
print('connection succesfull')
else:
print('connection negativ')
def test_try_wrong_promp_command(self):
if self.s.login():
q = self.s.query('account')
# switch to prompt account
q = self.s.query('aaa')
q = self.s.query('trace ')
if __name__ == '__main__':
unittest.main(verbosity=3)
unittest.main(warnings='ig-nore')
log_file = 'log_file.txt'
f = open(log_file, "w")
Для лучшего обзора здесь снова подробно объяснено
Использованные библиотеки
import Paramiko
import SSH
import unittest
from test import support
UnitTest
class SwitchAccount(unittest.TestCase):
Настройка SSH
def setUp(self):
self.s = testcore.control.ssh.SSH(host='xxx.xx.xx.xxx', username='admin', password='admin')
if self.s.login():
print('connection succesfull')
else:
print('connection negativ')
self.s.query_interactive = True
Первый юнит-тест
def test_create_user_rights_1(self):
if self.s.login():
q = self.s.query('account')
# switch to prompt account
q = self.s.query('add 1 testuser_P1 testuser_P1')
q = self.s.query('logout')
def setUp(self):
self.s = testcore.control.ssh.SSH(host='xxx.xx.xx.xxx', username='testuser_P1', password='testuser_P1')
if self.s.login():
print('connection succesfull')
else:
print('connection negativ')
import time
print('Wait')
time.sleep(6)
def test_try_wrong_promp_command(self):
if self.s.login():
q = self.s.query('account')
# switch to prompt account
q = self.s.query('aaa')
q = self.s.query('trace ')
import time
print('Wait')
time.sleep(6)
Короткий перерыв:
Пока тест работает, включая создание пользователя на маршрутизаторе / коммутаторе.
2-й Unittest
Теперь мы подошли ко второму тесту и здесь исключение брошено. Это даже приводит к тому, что я не могу даже войти в маршрутизатор, и помогает только холодная перезагрузка.
def test_create_user_rights_2(self):
if self.s.login():
q = self.s.query('account')
# switch to prompt account
q = self.s.query('add 2 testuser_P2 testuser_P2')
import time
print('Wait')
time.sleep(6)
q = self.s.query('logout')
def setUp(self):
self.s = testcore.control.ssh.SSH(host='xxx.xx.xx.xxx', username='testuser_P2', password='testuser_P2')
if self.s.login():
print('connection succesfull')
else:
print('connection negativ')
def test_try_wrong_promp_command(self):
if self.s.login():
q = self.s.query('account')
# switch to prompt account
q = self.s.query('aaa')
q = self.s.query('trace ')
Наконец
важно для меня
- , чтобы уточнить, как возникла эта ошибка?
- какие другие решения могут даже помочь при pytest здесь
- Стоит ли устанавливать тестовый пакет через юнит тест или Pytest здесь?