我正在为特定设备编写自动UI测试,其中UI配置通过Websocket连接从后端服务器作为多个JSON文件传输到该设备。首先,我编写了一个小的单独脚本来接收websocket消息,将其保存到JSON文件中并关闭websocket连接。然后,当我在另一个文件中运行测试时,可以访问JSON文件并处理测试中的配置信息。
但是我要做的是将这个websocket连接集成到测试中,所以我将只运行一个测试,它将处理所有事情。我尝试执行此操作,但是测试卡在了监听Websocket的过程中,并且无法在UI中导航,这是测试的下一步,它将触发消息传输。
我正在使用Python 2.7.14在Anaconda虚拟环境中的Windows 10上运行测试,并使用ChromeDriver for 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...
我猜想测试脚本正在侦听我提供的地址中的websocket消息,并且直到收到消息后才继续。
我该如何处理此问题,以便客户端侦听具有超时限制的websocket消息并保存/共享接收到的消息,以便可以在测试脚本中同时并发地访问该消息作为测试。步骤继续运行?
在此先感谢您的关注和答复。
答案 0 :(得分:0)
我需要的显然是使用线程。我为websocket客户端和自动化测试使用了不同的线程。
我使用了 threading 库来实现此目的,并制作了运行websocket客户端守护程序线程的线程。这解决了我的问题。