Python: исключение Paramiko Unittest после выполнения второго Unittest - PullRequest
0 голосов
/ 31 августа 2018

Настройка

  1. В настоящее время используется версия Python 2. Используются пакеты Paramiko и Unitest
  2. 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 здесь?
...