提交 a5ec2474 authored 作者: 陈泽健's avatar 陈泽健

实现读取测试用例JSON数据全局配置、账号管理以及信息统计的部分功能测试。优化get_notify_text传参。增加富创项目推送更新门口屏底图的消息体方法判断。

上级 fd5b2d64
...@@ -399,6 +399,33 @@ class Mqtt: ...@@ -399,6 +399,33 @@ class Mqtt:
}] }]
}) })
# 北京富创项目的门口屏底图更新
elif "/iot/v1/device/service/request/doorscreenBackgroundImageUpdate" in topic:
message = {
"action": "doorscreenBackgroundImageUpdate",
"companyNumber": config['companyNumber'],
"conferenceNumber": config['conferenceNumber'],
"data": {}
}
# 根据 updateMethod 设置不同的背景图片字段
if config.get('updateMethod') == 'restoreDefault':
message['data']['updateMethod'] = 'restoreDefault'
# 判断背景图的类型是Base64还是URL
if "backgroundImageType" == "backgroundImageBase64":
message['data']['backgroundImageBase64'] = config['backgroundImageValue']
elif 'backgroundImageType' == "backgroundImageURL":
message['data']['backgroundImageURL'] = config['backgroundImageValue']
elif config.get('updateMethod') == 'single':
message['data']['updateMethod'] = 'single'
# 判断背景图的类型是Base64还是URL
if "backgroundImageType" == "backgroundImageBase64":
message['data']['backgroundImageBase64'] = config['backgroundImageValue']
elif 'backgroundImageType' == "backgroundImageURL":
message['data']['backgroundImageURL'] = config['backgroundImageValue']
return json.dumps(message)
def send_and_receive_messages(self, topic: str, message: str, num_times: int = 1, timeout: int = 5, def send_and_receive_messages(self, topic: str, message: str, num_times: int = 1, timeout: int = 5,
interval: float = 0.2): interval: float = 0.2):
......
...@@ -369,7 +369,7 @@ def send_keyboard(element_locator, wd): ...@@ -369,7 +369,7 @@ def send_keyboard(element_locator, wd):
print(f"ElementNotInteractableException: Element {element_locator} is not interactable.") print(f"ElementNotInteractableException: Element {element_locator} is not interactable.")
# 获取常规提示文本函数,会同步进行截屏操作 # 获取常规提示文本函数,会同步进行截屏操作
def get_notify_text(wd,element_locator,module_name,function_name,name): def get_notify_text(wd,element_locator,module_name = None,function_name = None,file_name = None):
""" """
获取通知文本信息。 获取通知文本信息。
...@@ -381,7 +381,7 @@ def get_notify_text(wd,element_locator,module_name,function_name,name): ...@@ -381,7 +381,7 @@ def get_notify_text(wd,element_locator,module_name,function_name,name):
element_locator: 用于定位元素的定位器。 element_locator: 用于定位元素的定位器。
module_name: 模块名称,用于日志记录。 module_name: 模块名称,用于日志记录。
function_name: 函数名称,用于日志记录。 function_name: 函数名称,用于日志记录。
name: 屏幕截图的名称,用于日志记录。 file_name: 屏幕截图的名称,用于日志记录。
返回: 返回:
str: 提取的通知文本信息。如果未能提取到信息或发生异常,则返回None。 str: 提取的通知文本信息。如果未能提取到信息或发生异常,则返回None。
...@@ -391,8 +391,12 @@ def get_notify_text(wd,element_locator,module_name,function_name,name): ...@@ -391,8 +391,12 @@ def get_notify_text(wd,element_locator,module_name,function_name,name):
notify_text = WebDriverWait(wd, 60).until( notify_text = WebDriverWait(wd, 60).until(
EC.presence_of_element_located(element_locator) EC.presence_of_element_located(element_locator)
).text ).text
# 在获取到通知文本后进行屏幕截图 if module_name or function_name or file_name:
SELENIUM_LOG_SCREEN(wd,"50%",module_name,function_name,name) # 如果 module_name, function_name, 或 file_name 有值,则使用这些参数进行屏幕截图
SELENIUM_LOG_SCREEN(wd, "50%", module_name, function_name, file_name)
else:
# 如果 module_name, function_name, 和 file_name 都没有值,则仅使用 wd 和 "50%" 进行屏幕截图
SELENIUM_LOG_SCREEN(wd, "50%")
return notify_text return notify_text
except Exception as e: except Exception as e:
# 当发生异常时,记录异常信息 # 当发生异常时,记录异常信息
......
...@@ -250,4 +250,6 @@ ...@@ -250,4 +250,6 @@
- 实现测试用例中会控-腾讯会议的部分功能。 - 实现测试用例中会控-腾讯会议的部分功能。
- 封装会议创建、结束会议与会议状态操作的公用方法,通过会议室名称与会议类型来做判断,减少代码冗杂。实现测试用例中会议创建的部分功能。 - 封装会议创建、结束会议与会议状态操作的公用方法,通过会议室名称与会议类型来做判断,减少代码冗杂。实现测试用例中会议创建的部分功能。
- 实现测试用例中的会议修改和会议历史记录的部分功能测试。 - 实现测试用例中的会议修改和会议历史记录的部分功能测试。
- 实现测试用例中的会议模板的部分功能测试。 - 实现测试用例中的会议模板的部分功能测试。
\ No newline at end of file 67. 2025-03-12
- 实现读取测试用例JSON数据全局配置、账号管理以及信息统计的部分功能测试。优化get_notify_text传参。
\ No newline at end of file
import sys
import os
# 获取当前脚本的绝对路径
current_dir = os.path.dirname(os.path.abspath(__file__))
# 构建预定系统的绝对路径
预定系统_path = os.path.abspath(os.path.join(current_dir, '..','..'))
# 添加路径
sys.path.append(预定系统_path)
# 导入模块
from 预定系统.Base.base import *
def suite_setup():
STEP(1, "初始化浏览器")
# 初始化浏览器与系统地址
browser_init("标准版预定系统")
admin_login("admin@Test", "Ubains@4321")
sleep(2)
wd = GSTORE['wd']
# 进入后台模块
safe_click((By.XPATH, "//img[@title='后台系统']"),wd)
# 切换至信息统计模块
safe_click((By.XPATH, "//span[contains(text(),'信息统计')]"), wd)
def suite_teardown():
wd = GSTORE['wd']
wd.quit()
\ No newline at end of file
import sys
import os
# 获取当前脚本的绝对路径
current_dir = os.path.dirname(os.path.abspath(__file__))
# 构建预定系统的绝对路径
预定系统_path = os.path.abspath(os.path.join(current_dir, '..', '..', '..'))
# 添加路径
sys.path.append(预定系统_path)
# 导入模块
from 预定系统.Base.base import *
# 获取当前脚本所在的目录
current_dir = os.path.dirname(os.path.abspath(__file__))
# 构建XLSX文件的绝对路径
xlsx_file_path = os.path.join(current_dir, '..', '..', '测试数据', '会议预定测试用例.xlsx')
class ConferenceStatistics:
tags = ['新-信息统计测试']
"""
执行指令是:
1.cd 预定系统
2.hytest --report_title 信息统计测试报告 --report_url_prefix http://nat.ubainsyun.com:31133 --tag 新-信息统计测试
"""
def teststeps(self):
"""
执行测试步骤函数,主要用于执行读取的测试用例并进行信息统计模块功能测试操作
"""
# 从全局存储中获取webdriver对象
wd = GSTORE['wd']
# 读取Excel文件中的测试用例数据
ddt_cases = read_xlsx_data(xlsx_file_path, "信息统计")
# 遍历 ddt_cases 并获取每一个 JSON 对象
for case in ddt_cases:
for step in case:
print(f"当前步骤: {step}")
# 先赋值
locator_type = get_by_enum(step.get('locator_type'))
locator_value = step.get('locator_value')
element_type = step.get('element_type')
element_value = step.get('element_value')
expented_result = step.get('expented_result')
# 判断页面功能类型
if step.get("page") == "ConferenceStatistics":
if element_type == "click":
safe_click((locator_type, locator_value), wd)
sleep(1)
elif element_type == "input":
safe_send_keys((locator_type, locator_value), element_value, wd)
\ No newline at end of file
import sys
import os
# 获取当前脚本的绝对路径
current_dir = os.path.dirname(os.path.abspath(__file__))
# 构建预定系统的绝对路径
预定系统_path = os.path.abspath(os.path.join(current_dir, '..','..'))
# 添加路径
sys.path.append(预定系统_path)
# 导入模块
from 预定系统.Base.base import *
def suite_setup():
STEP(1, "初始化浏览器")
# 初始化浏览器与系统地址
browser_init("标准版预定系统")
admin_login("admin@Test", "Ubains@4321")
sleep(2)
wd = GSTORE['wd']
# 进入后台模块
safe_click((By.XPATH, "//img[@title='后台系统']"),wd)
# 展开全局配置模块
safe_click((By.XPATH, "//span[contains(text(),'全局配置')]"), wd)
sleep(1)
# 进入全局配置界面
safe_click((By.XPATH, "//li[contains(text(),'全局配置')]"), wd)
def suite_teardown():
wd = GSTORE['wd']
wd.quit()
\ No newline at end of file
import sys
import os
# 获取当前脚本的绝对路径
current_dir = os.path.dirname(os.path.abspath(__file__))
# 构建预定系统的绝对路径
预定系统_path = os.path.abspath(os.path.join(current_dir, '..', '..', '..'))
# 添加路径
sys.path.append(预定系统_path)
# 导入模块
from 预定系统.Base.base import *
# 获取当前脚本所在的目录
current_dir = os.path.dirname(os.path.abspath(__file__))
# 构建XLSX文件的绝对路径
xlsx_file_path = os.path.join(current_dir, '..', '..', '测试数据', '会议预定测试用例.xlsx')
class GlobalConfiguration:
tags = ['新-全局配置测试']
"""
执行指令是:
1.cd 预定系统
2.hytest --report_title 全局配置测试报告 --report_url_prefix http://nat.ubainsyun.com:31133 --tag 新-全局配置测试
"""
def teststeps(self):
"""
执行测试步骤函数,主要用于执行读取的测试用例并进行信息统计模块功能测试操作
"""
# 从全局存储中获取webdriver对象
wd = GSTORE['wd']
# 读取Excel文件中的测试用例数据
ddt_cases = read_xlsx_data(xlsx_file_path, "全局配置")
# 遍历 ddt_cases 并获取每一个 JSON 对象
for case in ddt_cases:
for step in case:
print(f"当前步骤: {step}")
# 先赋值
locator_type = get_by_enum(step.get('locator_type'))
locator_value = step.get('locator_value')
element_type = step.get('element_type')
element_value = step.get('element_value')
expented_result = step.get('expented_result')
# 判断页面功能类型
if step.get("page") == "GlobalConfiguration":
if element_type == "click":
safe_click((locator_type, locator_value), wd)
sleep(2)
elif element_type == "input":
safe_send_keys((locator_type, locator_value), element_value, wd)
sleep(2)
\ No newline at end of file
import sys
import os
# 获取当前脚本的绝对路径
current_dir = os.path.dirname(os.path.abspath(__file__))
# 构建预定系统的绝对路径
预定系统_path = os.path.abspath(os.path.join(current_dir, '..','..'))
# 添加路径
sys.path.append(预定系统_path)
# 导入模块
from 预定系统.Base.base import *
def suite_setup():
STEP(1, "初始化浏览器")
# 初始化浏览器与系统地址
browser_init("标准版预定系统")
admin_login("admin@Test", "Ubains@4321")
sleep(2)
wd = GSTORE['wd']
# 进入后台模块
safe_click((By.XPATH, "//img[@title='后台系统']"),wd)
# 切换至信息统计模块
safe_click((By.XPATH, "//span[contains(text(),'账号管理')]"), wd)
def suite_teardown():
wd = GSTORE['wd']
wd.quit()
\ No newline at end of file
import sys
import os
# 获取当前脚本的绝对路径
current_dir = os.path.dirname(os.path.abspath(__file__))
# 构建预定系统的绝对路径
预定系统_path = os.path.abspath(os.path.join(current_dir, '..', '..', '..'))
# 添加路径
sys.path.append(预定系统_path)
# 导入模块
from 预定系统.Base.base import *
# 获取当前脚本所在的目录
current_dir = os.path.dirname(os.path.abspath(__file__))
# 构建XLSX文件的绝对路径
xlsx_file_path = os.path.join(current_dir, '..', '..', '测试数据', '会议预定测试用例.xlsx')
class ConferenceStatistics:
tags = ['新-账号管理测试']
"""
执行指令是:
1.cd 预定系统
2.hytest --report_title 账号管理测试报告 --report_url_prefix http://nat.ubainsyun.com:31133 --tag 新-账号管理测试
"""
def teststeps(self):
"""
执行测试步骤函数,主要用于执行读取的测试用例并进行信息统计模块功能测试操作
"""
# 从全局存储中获取webdriver对象
wd = GSTORE['wd']
# 读取Excel文件中的测试用例数据
ddt_cases = read_xlsx_data(xlsx_file_path, "账号管理")
# 遍历 ddt_cases 并获取每一个 JSON 对象
for case in ddt_cases:
for step in case:
print(f"当前步骤: {step}")
# 先赋值
locator_type = get_by_enum(step.get('locator_type'))
locator_value = step.get('locator_value')
element_type = step.get('element_type')
element_value = step.get('element_value')
expented_result = step.get('expented_result')
# 判断页面功能类型
if step.get("page") == "CompanyManagement":
if element_type == "click":
safe_click((locator_type, locator_value), wd)
sleep(2)
elif element_type == "input":
safe_send_keys((locator_type, locator_value), element_value, wd)
sleep(2)
elif element_type == "getTips":
notify_text = get_notify_text(wd, (locator_type, locator_value))
INFO(f"获取到的提示信息为:{notify_text}")
CHECK_POINT(f"获取到的提示信息为:{notify_text}", expented_result in notify_text)
\ No newline at end of file
from time import sleep from time import sleep
from 预定系统.cases.账号管理.用户管理.__st__ import * from 预定系统.cases.账号管理.用户管理.__st__ import *
# 获取当前脚本的绝对路径 # 获取当前脚本的绝对路径
current_dir = os.path.dirname(os.path.abspath(__file__)) current_dir = os.path.dirname(os.path.abspath(__file__))
......
...@@ -13,7 +13,7 @@ except ModuleNotFoundError as e: ...@@ -13,7 +13,7 @@ except ModuleNotFoundError as e:
print(f"ModuleNotFoundError: {e}") print(f"ModuleNotFoundError: {e}")
print("尝试使用绝对路径导入") print("尝试使用绝对路径导入")
from 预定系统.Base.base import * from 预定系统.Base.base import *
from 预定系统.cases.账号管理.用户管理.__st__ import * from 预定系统.cases.账号管理.用户管理.__st__ import *
# 获取当前脚本所在的目录 # 获取当前脚本所在的目录
current_dir = os.path.dirname(os.path.abspath(__file__)) current_dir = os.path.dirname(os.path.abspath(__file__))
......
...@@ -13,7 +13,7 @@ except ModuleNotFoundError as e: ...@@ -13,7 +13,7 @@ except ModuleNotFoundError as e:
print(f"ModuleNotFoundError: {e}") print(f"ModuleNotFoundError: {e}")
print("尝试使用绝对路径导入") print("尝试使用绝对路径导入")
from 预定系统.Base.base import * from 预定系统.Base.base import *
from 预定系统.cases.账号管理.用户管理.__st__ import * from 预定系统.cases.账号管理.用户管理.__st__ import *
# 获取当前脚本所在的目录 # 获取当前脚本所在的目录
current_dir = os.path.dirname(os.path.abspath(__file__)) current_dir = os.path.dirname(os.path.abspath(__file__))
......
...@@ -9,7 +9,7 @@ current_dir = os.path.dirname(os.path.abspath(__file__)) ...@@ -9,7 +9,7 @@ current_dir = os.path.dirname(os.path.abspath(__file__))
sys.path.append(预定系统_path) sys.path.append(预定系统_path)
# 导入模块 # 导入模块
from 预定系统.Base.base import * from 预定系统.Base.base import *
from 预定系统.cases.账号管理.用户管理.__st__ import * from 预定系统.cases.账号管理.用户管理.__st__ import *
# 获取当前脚本所在的目录 # 获取当前脚本所在的目录
current_dir = os.path.dirname(os.path.abspath(__file__)) current_dir = os.path.dirname(os.path.abspath(__file__))
......
...@@ -9,7 +9,7 @@ current_dir = os.path.dirname(os.path.abspath(__file__)) ...@@ -9,7 +9,7 @@ current_dir = os.path.dirname(os.path.abspath(__file__))
sys.path.append(预定系统_path) sys.path.append(预定系统_path)
# 导入模块 # 导入模块
from 预定系统.Base.base import * from 预定系统.Base.base import *
from 预定系统.cases.账号管理.用户管理.__st__ import * from 预定系统.cases.账号管理.用户管理.__st__ import *
# 获取当前脚本所在的目录 # 获取当前脚本所在的目录
current_dir = os.path.dirname(os.path.abspath(__file__)) current_dir = os.path.dirname(os.path.abspath(__file__))
......
...@@ -13,7 +13,7 @@ except ModuleNotFoundError as e: ...@@ -13,7 +13,7 @@ except ModuleNotFoundError as e:
print(f"ModuleNotFoundError: {e}") print(f"ModuleNotFoundError: {e}")
print("尝试使用绝对路径导入") print("尝试使用绝对路径导入")
from 预定系统.Base.base import * from 预定系统.Base.base import *
from 预定系统.cases.账号管理.用户管理.__st__ import * from 预定系统.cases.账号管理.用户管理.__st__ import *
# 获取当前脚本所在的目录 # 获取当前脚本所在的目录
current_dir = os.path.dirname(os.path.abspath(__file__)) current_dir = os.path.dirname(os.path.abspath(__file__))
......
...@@ -13,7 +13,7 @@ except ModuleNotFoundError as e: ...@@ -13,7 +13,7 @@ except ModuleNotFoundError as e:
print(f"ModuleNotFoundError: {e}") print(f"ModuleNotFoundError: {e}")
print("尝试使用绝对路径导入") print("尝试使用绝对路径导入")
from 预定系统.Base.base import * from 预定系统.Base.base import *
from 预定系统.cases.账号管理.用户管理.__st__ import * from 预定系统.cases.账号管理.用户管理.__st__ import *
# 获取当前脚本所在的目录 # 获取当前脚本所在的目录
current_dir = os.path.dirname(os.path.abspath(__file__)) current_dir = os.path.dirname(os.path.abspath(__file__))
......
topic,action,thirdPartyMeetingId,thirdPartyRoomId,conferenceName,messageName,startTime,endTime,companyNumber topic,action,thirdPartyMeetingId,thirdPartyRoomId,conferenceName,messageName,startTime,endTime,companyNumber
/meeting/message/sync,add,7565416702283087899,1,表处办公室1号会议室,富创预约,2025-03-11 16:11:00.0,2025-03-11 16:23:00.0,CN-JHP-UBAINS /meeting/message/sync,add,7565416702283087899,1,表处办公室1号会议室,富创预约,2025-03-11 23:06:00.0,2025-03-11 23:10:00.0,CN-JHP-UBAINS
\ No newline at end of file \ No newline at end of file
topic,companyNumber,conferenceNumber,updateMethod,backgroundImagetype,backgroundImageValue
/iot/v1/device/service/request/doorscreenBackgroundImageUpdate/{CN-E8V-UBAINS}/{638u1nga4fe6rrpcxy5upqyo9ce02cm8},CN-E8V-UBAINS,638u1nga4fe6rrpcxy5upqyo9ce02cm8,single,backgroundImageURL,https://ts1.tc.mm.bing.net/th/id/R-C.37aabedb102a084f5100c6f9a2ae3382?rik=J0mfKlnt7in7Nw&riu=http%3a%2f%2fpic3.bbzhi.com%2fshejibizhi%2fpetercuigao%2fdesign_jingmeisheji_240884_9.jpg&ehk=tnQr5MvuS%2fP4f9r5YN1iqtyPaSFiFKOg7bvmvbv9p6Y%3d&risl=&pid=ImgRaw&r=0
/iot/v1/device/service/request/doorscreenBackgroundImageUpdate/{CN-E8V-UBAINS}/{638u1nga4fe6rrpcxy5upqyo9ce02cm8},CN-E8V-UBAINS,638u1nga4fe6rrpcxy5upqyo9ce02cm8,single,backgroundImageBase64,data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/4QCORXhpZgAATU0AKgAAAAgAAgESAAMAAAABAAEAAIdpAAQAAAABAAAAJgAAAAAABJADAAIAAAAUAAAAXJAEAAIAAAAUAAAAcJKRAAIAAAADMDAAAJKSAAIAAAADMDAAAAAAAAAyMDEwOjA2OjI2IDEzOjA4OjMxADIwMTA6MDY6MjYgMTM6MDg6MzEAAAD/4QGcaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49J++7vycgaWQ9J1c1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCc/Pg0KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyI+PHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj48cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0idXVpZDpmYWY1YmRkNS1iYTNkLTExZGEtYWQzMS1kMzNkNzUxODJmMWIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+PHhtcDpDcmVhdGVEYXRlPjIwMTAtMDYtMjZUMTM6MDg6MzE8L3htcDpDcmVhdGVEYXRlPjwvcmRmOkRlc2NyaXB0aW9uPjwvcmRmOlJERj48L3g6eG1wbWV0YT4NCjw/eHBhY2tldCBlbmQ9J3cnPz7/2wBDADUlKC8oITUvKy88OTU/UIVXUElJUKN1e2GFwarLyL6qurfV8P//1eL/5re6////////////zv//////////////2wBDATk8PFBGUJ1XV53/3Lrc////////////////////////////////////////////////////////////////////wAARCAAuAC4DASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwBZCCnHrTVPFJ/yx/GlA+UH3qDceq7uhpMFXAI5qSMhfrT2AkA9R0NMV9SMMOc/dPWqbuzthM4HpVi4VY4SoJLFqWGPYnuetNaCuNP+o/Gk3bY+fqKE5g/4FUfLEY5oSG2KmZCSxwo61ZLKsBKsFx0qCEj7o5UfrT5SPKbpyeKGFiJcyT5PQc1ZJqKEYUt64q0iDaCeppNiKn3bZueh4qNDkFR1xUj8Wv1xUA4/KqQmOhB31ZaHzVGDgjp6GooV2gVYjOGqW9SraESBtigdfSnzTMrbEIGOpprkpOxHQc4qBiTznk0WEf/Z
/iot/v1/device/service/request/doorscreenBackgroundImageUpdate/{CN-E8V-UBAINS}/{638u1nga4fe6rrpcxy5upqyo9ce02cm8},CN-E8V-UBAINS,638u1nga4fe6rrpcxy5upqyo9ce02cm8,restoreDefault,backgroundImageURL,https://ts1.tc.mm.bing.net/th/id/R-C.37aabedb102a084f5100c6f9a2ae3382?rik=J0mfKlnt7in7Nw&riu=http%3a%2f%2fpic3.bbzhi.com%2fshejibizhi%2fpetercuigao%2fdesign_jingmeisheji_240884_9.jpg&ehk=tnQr5MvuS%2fP4f9r5YN1iqtyPaSFiFKOg7bvmvbv9p6Y%3d&risl=&pid=ImgRaw&r=0
/iot/v1/device/service/request/doorscreenBackgroundImageUpdate/{CN-E8V-UBAINS}/{638u1nga4fe6rrpcxy5upqyo9ce02cm8},CN-E8V-UBAINS,638u1nga4fe6rrpcxy5upqyo9ce02cm8,restoreDefault,backgroundImageBase64,data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/4QCORXhpZgAATU0AKgAAAAgAAgESAAMAAAABAAEAAIdpAAQAAAABAAAAJgAAAAAABJADAAIAAAAUAAAAXJAEAAIAAAAUAAAAcJKRAAIAAAADMDAAAJKSAAIAAAADMDAAAAAAAAAyMDEwOjA2OjI2IDEzOjA4OjMxADIwMTA6MDY6MjYgMTM6MDg6MzEAAAD/4QGcaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49J++7vycgaWQ9J1c1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCc/Pg0KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyI+PHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj48cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0idXVpZDpmYWY1YmRkNS1iYTNkLTExZGEtYWQzMS1kMzNkNzUxODJmMWIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+PHhtcDpDcmVhdGVEYXRlPjIwMTAtMDYtMjZUMTM6MDg6MzE8L3htcDpDcmVhdGVEYXRlPjwvcmRmOkRlc2NyaXB0aW9uPjwvcmRmOlJERj48L3g6eG1wbWV0YT4NCjw/eHBhY2tldCBlbmQ9J3cnPz7/2wBDADUlKC8oITUvKy88OTU/UIVXUElJUKN1e2GFwarLyL6qurfV8P//1eL/5re6////////////zv//////////////2wBDATk8PFBGUJ1XV53/3Lrc////////////////////////////////////////////////////////////////////wAARCAAuAC4DASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwBZCCnHrTVPFJ/yx/GlA+UH3qDceq7uhpMFXAI5qSMhfrT2AkA9R0NMV9SMMOc/dPWqbuzthM4HpVi4VY4SoJLFqWGPYnuetNaCuNP+o/Gk3bY+fqKE5g/4FUfLEY5oSG2KmZCSxwo61ZLKsBKsFx0qCEj7o5UfrT5SPKbpyeKGFiJcyT5PQc1ZJqKEYUt64q0iDaCeppNiKn3bZueh4qNDkFR1xUj8Wv1xUA4/KqQmOhB31ZaHzVGDgjp6GooV2gVYjOGqW9SraESBtigdfSnzTMrbEIGOpprkpOxHQc4qBiTznk0WEf/Z
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论