OSError [WinError6] возникает при запуске unittestts с sqlite - PullRequest
0 голосов
/ 08 февраля 2019

Мне было поручено создать графический интерфейс для нашего модульного тестирования.Для этого я создал базу данных sqlite.Вот фрагмент SQL-менеджера, который я использую

manager.py

    def write_results_true(self):
        connection = sqlite3.connect('../data.db')
        cursor = connection.cursor()
        cursor.execute('''UPDATE Tests 
                          SET Passed = 'True'
                          WHERE Script = ''' + self.test + '''''')
        connection.close()

И пример теста:

test.py

manager = manager.Manager("'test_login_superuser'")

class TestTest(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Firefox()
        self.driver.get("https://example.com")

    def first_test(self):
         current_url = self.driver.current_url

        if current_url == 'https://example.com':
            manager.write_results_true()
            self.assertEqual(current_url, assertion_url)

Я считаю, что проблема, с которой я столкнулся, вызвана sqlite3.Тесты все еще завершены, и терминал отражает это.Он также выводит игнорируемое исключение, но ничего не записывается в базу данных.

D:\_jb_unittest_runner.py" --path D:/test.py
Launching unittests with arguments python -m unittest D:/test.py in D:\

Ran 1 test in 6.167s

OK
 Exception ignored in: <function Popen.__del__ at 0x02F91738>
 Traceback (most recent call last):
      File "C:\Users\[user]\AppData\Local\Programs\Python\Python37-32\lib\subprocess.py", line 854, in __del__
self._internal_poll(_deadstate=_maxsize)

    File "C:\Users\[user]\AppData\Local\Programs\Python\Python37-32\lib\subprocess.py", line 1210, in _internal_poll
    if _WaitForSingleObject(self._handle, 0) == _WAIT_OBJECT_0:
OSError: [WinError 6] The handle is invalid

Process finished with exit code 0

1 Ответ

0 голосов
/ 01 марта 2019

В этом случае не было необходимости в курсоре.При использовании курсора, subprocess не может передать имя дескриптора.

По этой причине это прекрасно работает

        connection = sqlite3.connect(os.path.abspath('path'))
        connection.execute('UPDATE Details '
                           'SET Passed'
                           '= "True"'
                           'WHERE Name = "' + test + '";')
        connection.commit()
        connection.close()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...