Использование нескольких клиентов WebSocket в автоматических тестах Selenium с unittest - PullRequest
0 голосов
/ 06 июля 2018

Я пишу автоматические тесты пользовательского интерфейса для конкретного устройства, где конфигурации пользовательского интерфейса передаются на устройство с внутреннего сервера в виде нескольких файлов JSON через соединения через веб-сокеты. Сначала я написал небольшой отдельный скрипт, который получает сообщения websocket, сохраняет их в файлы JSON и закрывает соединение websocket. Затем, когда я запустил свой тест в другом файле, я мог получить доступ к файлам JSON и обработать информацию о конфигурации в моем тесте.

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

Я запускаю тесты на Windows 10 в виртуальной среде Anaconda с Python 2.7.14 и использую ChromeDriver для Selenium 3.11.0. Библиотека websocket является версией 0.2.1.

Вот код, который я использовал:

#!/usr/bin/python
#-*- encoding: utf-8 -*-

import json
from lib import *
import sys
import unittest
import websocket
import xmlrunner


class TestCases(TestObject):

    def test_service_recharge(self):

        # Step 1: Login and initialize websocket client
        credential = self.get_data()["credentials"][0]
        login_page = LoginPage(self.get_driver(), url=self.get_url())
        login_page.load_page()
        login_page.try_login(credential["username"], credential["password"])

        ws = websocket.WebSocket()
        ws.connect("ws://192.168.1.105:8888/gui/services/menudata")
        print "Receiving websocket messages..."
        menu_data = ws.recv()

        # Step 2: Check successful login 
        services_page = ServicesPage(self.get_driver())
        services_page.check_opened()

        # Step 3: Save websocket message to a .json file
        menu_data_json = json.loads(menu_data)

        with open('PATH_TO_FILE\\Services_Menu_Recharge_JSON.json', 'w') as outfile:
            json.dump(menu_data_json, outfile)

        ws.close()

        # Step 4: Start a new websocket client to get a second, different message
        ws = websocket.WebSocket()
        ws.connect("ws://192.168.1.105:8888/gui/services/servicesdata")
        print "Receiving websocket messages..."
        menu_data = ws.recv()

        # Step 5: Navigate to another page and save the obtained message to a local file
        services_page.go_to_recharge()
        recharge_page = RechargePage(self.get_driver())
        recharge_page.check_opened()

        menu_data_json = json.loads(menu_data)

        with open('PATH_TO_FILE\\Services_Components_Recharge_JSON.json', 'w') as outfile:
            json.dump(menu_data_json, outfile)

        ws.close()

        # Step 6: Work with the locally saved json files
        parser = JsonParser()
        service_components_list = parser.read_all_nodes()

        # Rest of the test #

if __name__ == '__main__':
    unittest.main(testRunner=xmlrunner.XMLTestRunner(
        output='test-reports'), failfast=False, buffer=False, catchbreak=False)

А вот где он застревает:

Running tests...
----------------------------------------------------------------------
[17364:19032:0705/163445.321:ERROR:install_util.cc(597)] Unable to read registry value HKLM\SOFTWARE\Policies\Google\Chrome\MachineLevelUserCloudPolicyEnrollmentToken for writing result=2

DevTools listening on ws://127.0.0.1:12069/devtools/browser/a91244ef-8daf-422e-a24a-ca0e19218aa1
Receiving websocket messages...

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

Как я могу решить эту проблему, чтобы клиент прослушивал сообщение веб-сокета с ограничением времени ожидания и сохранял / делился полученным сообщением, чтобы к нему можно было получить доступ из скрипта теста одновременно в качестве шагов теста продолжить бежать?

Заранее спасибо за ваше внимание и за ваши ответы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...