Python / Router / Switch: поднять socket.error ('Socket is closed') после выполнения 5 unittest - PullRequest
0 голосов
/ 04 сентября 2018

В моей тестовой настройке я проверяю функции коммутатора и маршрутизаторов на индивидуальные права пользователей.

Настройка

Я использую различные пакеты, Testcore содержит Paramiko как единый пакет. У меня есть полный доступ к функциям этого пакета.

import testcore
from testcore.control.ssh import SSH
import unittest
from test import support

Я подключаю каждый к коммутатору и маршрутизатору через Paramiko и SSH

    def setUp(self):

    self.s = testcore.control.ssh.SSH(host='xxx.xxx.xxx.xxx', username='xxxx', password='xxxx')

    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')

    self.s = testcore.control.ssh.SSH(host='xxx.xxx.xxx.xxx', username='testuser_P2', password='testuser_P2')       
    import time
    print('Wait')
    time.sleep(2)


def test_try_wrong_promp_command_1(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(3) 

Первый из 5 тестов также отлично работает.

test_create_user_rights_1 ( main .SwitchAccount) ... ТЕСТ ТЕСТ ТЕСТ exec "logout" превысил тайм-аут None (данные не получены вообще) ok test_create_user_rights_2 ( main .SwitchAccount) ... TEST TEST TEST exec "logout" превысил тайм-аут None (данные не получены вообще) Подождите нормально test_create_user_rights_3 ( main .SwitchAccount) ... TEST TEST TEST exec "logout" превысил тайм-аут Нет (данные не получены в все) Подождите, хорошо test_create_user_rights_4 ( main .SwitchAccount) ... TEST TEST TEST exec "logout" превысил тайм-аут None (нет данных получил вообще) жди окей test_create_user_rights_5 ( main .SwitchAccount) ... TEST TEST TEST exec "logout" превышен тайм-аут None (данные вообще не получены) test_create_user_rights_7 ( main .SwitchAccount) ... TEST TEST TEST exec "logout" превысил тайм-аут None (данные не получены вообще) ok test_create_user_rights_8 ( main .SwitchAccount) ... TEST TEST TEST exec "logout" превысил тайм-аут None (данные не получены вообще) Подождите нормально test_try_wrong_promp_command_1 ( main .SwitchAccount) ... TEST TEST TEST Подождите, хорошо test_try_wrong_promp_command_2 ( main .SwitchAccount) ... TEST TEST TEST Подождите, все в порядке test_try_wrong_promp_command_3 ( main .SwitchAccount) ... TEST TEST ТЕСТ Подожди ок

И тут начинаем выпускать:

test_try_wrong_promp_command_4 ( main .SwitchAccount) ... TEST ERROR test_try_wrong_promp_command_5 ( main .SwitchAccount) ... ОШИБКА ТЕСТА test_try_wrong_promp_command_6 ( main .SwitchAccount) ... ОШИБКА ТЕСТА test_try_wrong_promp_command_7 ( main .SwitchAccount) ... ОШИБКА ТЕСТА test_try_wrong_promp_command_8 ( main .SwitchAccount) ... ОШИБКА ТЕСТА

Обзор проблемы показывает

повышение socket.error ('Сокет закрыт') OSError: Сокет закрыт

=============================================== ======================= ОШИБКА: test_try_wrong_promp_command_4 ( main .SwitchAccount) -------------------------------------------------- -------------------- Traceback (последний вызов был последним): File "C: \ Users \ frentmei \ Desktop \ PY3-testcore \ Switch_Test \ Complete \ Usertest \ test_create_user_different_privileg.py", строка 148, в test_try_wrong_promp_command_4 q = self.s.query ('account') Файл "C: \ Python37 \ lib \ site-packages \ testcore \ control \ ssh.py", строка 281, в запрос вернуть self._query_interactive (* args, ** kwargs) Файл "C: \ Python37 \ lib \ site-packages \ testcore \ control \ ssh.py", строка 329, в _query_interactive self.send (запрос) Файл "C: \ Python37 \ lib \ site-packages \ testcore \ control \ ssh.py", строка 195, в Отправить self._interactive_stdin.write (text + self.lb) Файл "C: \ Python37 \ lib \ site-packages \ paramiko \ file.py", строка 402, в записи self._write_all (data) Файл "C: \ Python37 \ lib \ site-packages \ paramiko \ file.py", строка 519, в _write_all count = self._write (data) Файл "C: \ Python37 \ lib \ site-packages \ paramiko \ channel.py", строка 1335, в _записывать self.channel.sendall (data) Файл "C: \ Python37 \ lib \ site-packages \ paramiko \ channel.py", строка 831, в отправьте всеsent = self.send (s) Файл "C: \ Python37 \ lib \ site-packages \ paramiko \ channel.py", строка 785, в send вернуть self._send (s, m) Файл "C: \ Python37 \ lib \ site-packages \ paramiko \ channel.py", строка 1170, в _Отправить поднять socket.error ('Сокет закрыт') OSError: Сокет закрыт

----------------------------------------------- ----------------------- Провел 15 тестов за 69,561 с

FAILED (ошибки = 5)

Дополнительные пояснения

Для настройки теста:

Как описано выше, я использую подсказку маршрутизатора или коммутатора для автоматической проверки соответствующих команд.

  • Создать пользователя с другими правами

    def test_create_user_rights_4(self):
    
    if self.s.login():
        q = self.s.query('account')
    
        # switch to prompt account
    
        q = self.s.query('add 4 testuser_P4 testuser_P4')  
        q = self.s.query('logout') 
    

Как только пользователь был создан, я выхожу из системы в тесте

   def test_create_user_rights_5(self):

    if self.s.login():
        q = self.s.query('account')

        # switch to prompt account

        q = self.s.query('add 5 testuser_P5 testuser_P5')  
        q = self.s.query('logout')  

После выхода из системы создается следующий пользователь.

В моем случае, однако, эта ошибка выдается после теста 4.

Прилагается полный источник

import testcore
from testcore.control.ssh import SSH
import unittest
from test import support

class SwitchAccount(unittest.TestCase):  # This      class inherits unittest.TestCase


def setUp(self):

    self.s =           testcore.control.ssh.SSH(host='xxx.xxx.xxx.xxx',   username='admin', password='admin')

    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')

    self.s = testcore.control.ssh.SSH(host='xxx.xxx.xxx.xxx', username='testuser_P2', password='testuser_P2')       
    import time
    print('Wait')
    time.sleep(2)


def test_try_wrong_promp_command_1(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(3)               


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')  
        q = self.s.query('logout')       



    self.s = testcore.control.ssh.SSH(host='xxx.xxx.xxx.xxx', username='testuser_P2', password='testuser_P2')       
    import time
    print('Wait')
    time.sleep(2)


def test_try_wrong_promp_command_2(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(3)       


def test_create_user_rights_3(self):

    if self.s.login():
        q = self.s.query('account')

        # switch to prompt account

        q = self.s.query('add 3 testuser_P3 testuser_P3')  
        q = self.s.query('logout')       



    self.s = testcore.control.ssh.SSH(host='xxx.xxx.xxx.xxx', username='testuser_P3', password='testuser_P3')       
    import time
    print('Wait')
    time.sleep(2)


def test_try_wrong_promp_command_3(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(3)  


def test_create_user_rights_4(self):

    if self.s.login():
        q = self.s.query('account')

        # switch to prompt account

        q = self.s.query('add 4 testuser_P4 testuser_P4')  
        q = self.s.query('logout')       



    self.s = testcore.control.ssh.SSH(host='xxx.xxx.xxx.xxx', username='testuser_P4', password='testuser_P4')       
    import time
    print('Wait')
    time.sleep(2)


def test_try_wrong_promp_command_4(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(3)  



def test_create_user_rights_5(self):

    if self.s.login():
        q = self.s.query('account')

        # switch to prompt account

        q = self.s.query('add 5 testuser_P5 testuser_P5')  
        q = self.s.query('logout')       



    self.s = testcore.control.ssh.SSH(host='xxx.xxx.xxx.xxx', username='testuser_P5', password='testuser_P5')       
    import time
    print('Wait')
    time.sleep(2)


def test_try_wrong_promp_command_5(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(3)                


def test_create_user_rights_5(self):

    if self.s.login():
        q = self.s.query('account')

        # switch to prompt account

        q = self.s.query('add 5 testuser_P5 testuser_P5')  
        q = self.s.query('logout')       



    self.s = testcore.control.ssh.SSH(host='xxx.xx.56.250', username='testuser_P4', password='testuser_P4')       
    import time
    print('Wait')
    time.sleep(2)


def test_try_wrong_promp_command_5(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(3)   



def test_create_user_rights_4(self):

    if self.s.login():
        q = self.s.query('account')

        # switch to prompt account

        q = self.s.query('add 6 testuser_P6 testuser_P6')  
        q = self.s.query('logout')       



    self.s = testcore.control.ssh.SSH(host='xxx.xx.56.250', username='testuser_P6', password='testuser_P6')       
    import time
    print('Wait')
    time.sleep(2)


def test_try_wrong_promp_command_6(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(3)      


def test_create_user_rights_7(self):

    if self.s.login():
        q = self.s.query('account')

        # switch to prompt account

        q = self.s.query('add 7 testuser_P6 testuser_P7')  
        q = self.s.query('logout')       



    self.s = testcore.control.ssh.SSH(host='xxx.xxx.xxx.250', username='testuser_P7', password='testuser_P7')       
    import time
    print('Wait')
    time.sleep(2)


def test_try_wrong_promp_command_7(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(3)                 



def test_create_user_rights_8(self):

    if self.s.login():
        q = self.s.query('account')

        # switch to prompt account

        q = self.s.query('add 8 testuser_P6 testuser_P8')  
        q = self.s.query('logout')       



    self.s = testcore.control.ssh.SSH(host='xxx.xxx.xxx.xxx', username='testuser_P8', password='testuser_P8')       
    import time
    print('Wait')
    time.sleep(2)


def test_try_wrong_promp_command_8(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(3)      


 if __name__ == '__main__':
 unittest.main(verbosity=3)
 unittest.main(warnings='ig-nore')
 log_file = 'log_file.txt'
 f = open(log_file, "w")   

Несколько вопросов

  • Поможет ли интеграция комплекта тестов создать это? Имеется в виду Unittest Testsuite
  • Решит ли переход на Pytest проблему здесь?
...