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

补充展厅中控屏巡检流程的rtsp视频流截取监控画面,优化主题函数的代码,将每个设备控制封装为函数调用,增加可维护性。

上级 187defb5
/预定系统/log /预定系统/log
/预定系统/reports
\ No newline at end of file
from time import sleep
from appium.webdriver.common.appiumby import AppiumBy from appium.webdriver.common.appiumby import AppiumBy
from dominate.tags import button
from pygments.console import light_colors
import logging
from time import sleep from time import sleep
from appium.options.android import UiAutomator2Options from appium.options.android import UiAutomator2Options
import logging
from selenium import webdriver from selenium import webdriver
from hytest import *
def app_setup_driver(platformName, platformVersion, deviceName, appPackage, appActivity, udid): def app_setup_driver(platformName, platformVersion, deviceName, appPackage, appActivity, udid):
...@@ -330,7 +326,7 @@ def light_control(app_drive): ...@@ -330,7 +326,7 @@ def light_control(app_drive):
light_training_room_button.click() light_training_room_button.click()
sleep(2) sleep(2)
def curtain_control(app_drive): def curtain_control(app_drive,wd):
# 所有窗帘全部上升 # 所有窗帘全部上升
logging.info("尝试定位所有【窗帘上升】按钮元素,并点击按钮") logging.info("尝试定位所有【窗帘上升】按钮元素,并点击按钮")
# 上升按钮的定位 # 上升按钮的定位
...@@ -340,10 +336,21 @@ def curtain_control(app_drive): ...@@ -340,10 +336,21 @@ def curtain_control(app_drive):
f"/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.RelativeLayout[2]/android.widget.Button[{i}]") f"/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.RelativeLayout[2]/android.widget.Button[{i}]")
curtain_up_button.click() curtain_up_button.click()
sleep(2) sleep(2)
INFO("请检查窗帘上升状态是否正常")
SELENIUM_LOG_SCREEN(wd, "50%", "Exhibit_Inspect", "Control_Manage", "curtain_up")
# 截图获取当前中控屏软件窗帘上升的界面 # 截图获取当前中控屏软件窗帘上升的界面
app_drive.get_screenshot_as_file( app_drive.get_screenshot_as_file(
r"D:\GithubData\自动化\ubains-module-test\预定系统\reports\imgs\Exhibit_Inspect\Control_Manage\curtain_up.png") r"D:\GithubData\自动化\ubains-module-test\预定系统\reports\imgs\Exhibit_Inspect\Control_Manage\curtain_up.png")
sleep(10) sleep(10)
# # 测试报告中补充窗帘上升的截图
SELENIUM_LOG_SCREEN(wd, "50%", "Exhibit_Inspect", "Control_Manage", "curtain_rtsp_up")
# 通过rtsp流获取当前窗帘的上升效果图
curtain_rtsp_url = "rtsp://admin:huawei@123@192.168.4.18/LiveMedia/ch1/Media2"
logging.info("开始捕获RTSP流中的帧")
if capture_frame_from_rtsp(curtain_rtsp_url, "curtain_rtsp_up.png"):
logging.info("帧捕获成功")
else:
logging.error("帧捕获失败")
# 所有窗帘全部下降 # 所有窗帘全部下降
logging.info("尝试定位所有【窗帘下降】按钮元素,并点击按钮") logging.info("尝试定位所有【窗帘下降】按钮元素,并点击按钮")
...@@ -354,17 +361,31 @@ def curtain_control(app_drive): ...@@ -354,17 +361,31 @@ def curtain_control(app_drive):
f"/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.RelativeLayout[2]/android.widget.Button[{i}]") f"/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.RelativeLayout[2]/android.widget.Button[{i}]")
curtain_down_button.click() curtain_down_button.click()
sleep(2) sleep(2)
INFO("请检查窗帘下降状态是否正常")
SELENIUM_LOG_SCREEN(wd, "50%", "Exhibit_Inspect", "Control_Manage", "curtain_down")
# 截图获取当前中控屏软件窗帘上升的界面 # 截图获取当前中控屏软件窗帘上升的界面
app_drive.get_screenshot_as_file( app_drive.get_screenshot_as_file(
r"D:\GithubData\自动化\ubains-module-test\预定系统\reports\imgs\Exhibit_Inspect\Control_Manage\curtain_down.png") r"D:\GithubData\自动化\ubains-module-test\预定系统\reports\imgs\Exhibit_Inspect\Control_Manage\curtain_down.png")
# 测试报告中补充窗帘下降的截图
SELENIUM_LOG_SCREEN(wd, "50%", "Exhibit_Inspect", "Control_Manage", "curtain_rtsp_down")
logging.info("开始捕获RTSP流中的帧")
if capture_frame_from_rtsp(curtain_rtsp_url, "curtain_rtsp_down.png"):
logging.info("帧捕获成功")
else:
logging.error("帧捕获失败")
def air_condition_control(app_drive): def air_condition_control(app_drive,wd):
# 点击【打开空调】按钮 # 点击【打开空调】按钮
logging.info("尝试定位【打开空调】按钮元素,并点击按钮") logging.info("尝试定位【打开空调】按钮元素,并点击按钮")
open_air_conditioner_button = app_drive.find_element(AppiumBy.XPATH, open_air_conditioner_button = app_drive.find_element(AppiumBy.XPATH,
"/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.RelativeLayout[2]/android.widget.Button[14]") "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.RelativeLayout[2]/android.widget.Button[14]")
open_air_conditioner_button.click() open_air_conditioner_button.click()
sleep(20) sleep(20)
# 这是空调开启的状态显示
INFO("请检查空调开启的状态是否正常")
SELENIUM_LOG_SCREEN(wd, "50%", "Exhibit_Inspect", "Control_Manage", "air_condition_on")
app_drive.get_screenshot_as_file( app_drive.get_screenshot_as_file(
r"D:\GithubData\自动化\ubains-module-test\预定系统\reports\imgs\Exhibit_Inspect\Control_Manage\air_condition_on.png") r"D:\GithubData\自动化\ubains-module-test\预定系统\reports\imgs\Exhibit_Inspect\Control_Manage\air_condition_on.png")
sleep(2) sleep(2)
...@@ -375,15 +396,107 @@ def air_condition_control(app_drive): ...@@ -375,15 +396,107 @@ def air_condition_control(app_drive):
"/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.RelativeLayout[2]/android.widget.Button[14]") "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.RelativeLayout[2]/android.widget.Button[14]")
close_air_conditioner_button.click() close_air_conditioner_button.click()
sleep(20) sleep(20)
# 这是空调关闭的状态显示
INFO("请检查空调关闭的状态是否正常")
SELENIUM_LOG_SCREEN(wd, "50%", "Exhibit_Inspect", "Control_Manage", "air_condition_off")
app_drive.get_screenshot_as_file( app_drive.get_screenshot_as_file(
r"D:\GithubData\自动化\ubains-module-test\预定系统\reports\imgs\Exhibit_Inspect\Control_Manage\air_condition_off.png") r"D:\GithubData\自动化\ubains-module-test\预定系统\reports\imgs\Exhibit_Inspect\Control_Manage\air_condition_off.png")
sleep(2) sleep(2)
def command_centre_control(rtsp_url,app_drive): def information_control(app_drive,wd):
# 选择生日快乐内容播放
brithday_information_button = app_drive.find_element(AppiumBy.XPATH,
"/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.RelativeLayout[2]/android.widget.Button[2]")
brithday_information_button.click()
logging.info("选择生日快乐内容播放")
sleep(5)
# 这是生日快乐主题内容发布
INFO("请检查中控屏软件信息发布界面是否正常")
SELENIUM_LOG_SCREEN(wd, "50%", "Exhibit_Inspect", "Control_Manage", "information_brithday_on")
information_rtsp_url = "rtsp://admin:huawei@123@192.168.4.19/LiveMedia/ch1/Media2" # 替换为你的RTSP流地址
logging.info("开始捕获RTSP流中的帧")
if capture_frame_from_rtsp(information_rtsp_url, "information_brithday_on.png"):
logging.info("帧捕获成功")
else:
logging.error("帧捕获失败")
# 选择欢迎领导发布内容播放
meeting_information_button = app_drive.find_element(AppiumBy.XPATH,
"/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.RelativeLayout[2]/android.widget.Button[3]")
meeting_information_button.click()
logging.info("选择会议发布内容播放")
sleep(5)
# 这是会议欢迎主题内容发布
INFO("请检查中控屏软件信息发布界面是否正常")
SELENIUM_LOG_SCREEN(wd, "50%", "Exhibit_Inspect", "Control_Manage", "information_meeting_on")
logging.info("开始捕获RTSP流中的帧")
if capture_frame_from_rtsp(information_rtsp_url, "information_meeting_on.png"):
logging.info("帧捕获成功")
else:
logging.error("帧捕获失败")
# 选择展厅空间结构内容播放
information_space_button = app_drive.find_element(AppiumBy.XPATH,
"/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.RelativeLayout[2]/android.widget.Button[4]")
information_space_button.click()
logging.info("选择展厅空间结构内容播放")
sleep(5)
# 这是展厅空间结构内容发布
INFO("请检查中控屏软件信息发布界面是否正常")
SELENIUM_LOG_SCREEN(wd, "50%", "Exhibit_Inspect", "Control_Manage", "information_space_on")
if capture_frame_from_rtsp(information_rtsp_url, "information_space_on.png"):
logging.info("帧捕获成功")
else:
logging.error("帧捕获失败")
# 点击信息发布关闭按钮
logging.info("点击信息发布关闭按钮")
information_close_button = app_drive.find_element(AppiumBy.XPATH,
"/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.RelativeLayout[2]/android.widget.Button[7]")
information_close_button.click()
def music_control(app_drive,wd):
# 点击【播放音乐】
logging.info("尝试定位【播放音乐】按钮元素,并点击按钮")
play_music_button = app_drive.find_element(AppiumBy.XPATH,
"/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.RelativeLayout[2]/android.widget.Button[8]")
play_music_button.click()
sleep(2)
# 调用音频采集判断音量函数
INFO("请检查中控屏音乐播放的音频采集是否正常!!!")
volume_acquisition()
sleep(10)
# 这是音乐开启播放后的界面显示
INFO("请检查中控屏软件打开音乐播放后的界面状态显示")
SELENIUM_LOG_SCREEN(wd, "50%", "Exhibit_Inspect", "Control_Manage", "music_on")
app_drive.get_screenshot_as_file(
r"D:\GithubData\自动化\ubains-module-test\预定系统\reports\imgs\Exhibit_Inspect\Control_Manage\music_on.png")
# 点击【关闭播放音乐】
logging.info("尝试定位【关闭播放音乐】按钮元素,并点击按钮")
close_play_music_button = app_drive.find_element(AppiumBy.XPATH,
"/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.RelativeLayout[2]/android.widget.Button[8]")
close_play_music_button.click()
sleep(5)
# 这是音乐关闭播放后的界面显示
INFO("请检查中控屏软件关闭音乐播放后的界面状态显示")
SELENIUM_LOG_SCREEN(wd, "50%", "Exhibit_Inspect", "Control_Manage", "music_off")
app_drive.get_screenshot_as_file(
r"D:\GithubData\自动化\ubains-module-test\预定系统\reports\imgs\Exhibit_Inspect\Control_Manage\music_off.png")
def command_centre_control(rtsp_url,app_drive,wd):
open_center_button = app_drive.find_element(AppiumBy.XPATH, open_center_button = app_drive.find_element(AppiumBy.XPATH,
"/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.RelativeLayout[2]/android.widget.Button") "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.RelativeLayout[2]/android.widget.Button")
open_center_button.click() open_center_button.click()
sleep(10) sleep(10)
# 这是指挥大屏开启的监控视频显示
INFO("请检查指挥大屏开启的监控视频状态是否正常")
SELENIUM_LOG_SCREEN(wd, "50%", "Exhibit_Inspect", "Control_Manage", "command_screen_on")
# 从rtsp流中截取一帧保存为图片 # 从rtsp流中截取一帧保存为图片
logging.info("开始捕获RTSP流中的帧") logging.info("开始捕获RTSP流中的帧")
if capture_frame_from_rtsp(rtsp_url, "command_screen_on.png"): if capture_frame_from_rtsp(rtsp_url, "command_screen_on.png"):
...@@ -391,6 +504,9 @@ def command_centre_control(rtsp_url,app_drive): ...@@ -391,6 +504,9 @@ def command_centre_control(rtsp_url,app_drive):
else: else:
logging.error("帧捕获失败") logging.error("帧捕获失败")
# 这是指挥大屏关闭的监控视频显示
INFO("请检查指挥大屏关闭的监控视频状态是否正常")
SELENIUM_LOG_SCREEN(wd, "50%", "Exhibit_Inspect", "Control_Manage", "command_screen_down")
# 关闭指挥中心大屏幕 # 关闭指挥中心大屏幕
logging.info("尝试定位【关闭指挥中心控制】按钮元素,并点击按钮") logging.info("尝试定位【关闭指挥中心控制】按钮元素,并点击按钮")
close_center_button = app_drive.find_element(AppiumBy.XPATH, close_center_button = app_drive.find_element(AppiumBy.XPATH,
...@@ -404,3 +520,61 @@ def command_centre_control(rtsp_url,app_drive): ...@@ -404,3 +520,61 @@ def command_centre_control(rtsp_url,app_drive):
logging.info("帧捕获成功") logging.info("帧捕获成功")
else: else:
logging.error("帧捕获失败") logging.error("帧捕获失败")
import pyaudio
import numpy as np
# 定义参数
FORMAT = pyaudio.paInt16 # 16-bit resolution
CHANNELS = 1 # 1 channel
RATE = 44100 # 44.1kHz sampling rate
CHUNK = 1024 # 2^10 samples for buffer
THRESHOLD = 1000 # 阈值,可以根据实际情况调整
RECORD_SECONDS = 10 # 录制时长
def is_audio_loud(data, threshold=THRESHOLD):
"""
判断音频数据是否超过阈值
:param data: 音频数据
:param threshold: 阈值
:return: 如果声音大小超过阈值,返回True;否则返回False
"""
return np.abs(np.frombuffer(data, dtype=np.int16)).mean() > threshold
def volume_acquisition():
audio = pyaudio.PyAudio() # 初始化pyaudio
# 打开音频流
stream = audio.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
frames_per_buffer=CHUNK)
logging.info("开始录音...")
frames = []
for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
data = stream.read(CHUNK) # 读取音频数据
frames.append(data)
logging.info("录音结束。")
# 停止和关闭音频流
stream.stop_stream()
stream.close()
audio.terminate()
# 将所有帧合并成一个字节流
audio_data = b''.join(frames)
# 判断音量状态
if is_audio_loud(audio_data):
INFO("整段音频声音过大!")
else:
INFO("整段音频声音正常。")
# 进一步处理音频数据(例如保存为文件或分析)
# ...
# if __name__ == "__main__":
# volume_acquisition()
\ No newline at end of file
...@@ -157,3 +157,4 @@ ...@@ -157,3 +157,4 @@
- 切换标准版预订系统功能检测环境,定时运行程序,并进行调试,修复出现的异常情况。 - 切换标准版预订系统功能检测环境,定时运行程序,并进行调试,修复出现的异常情况。
34. 2025-01-06 34. 2025-01-06
- 补充展厅巡检后的会议创建流程。 - 补充展厅巡检后的会议创建流程。
- 补充展厅中控屏巡检流程的rtsp视频流截取监控画面,优化主题函数的代码,将每个设备控制封装为函数调用,增加可维护性。
\ No newline at end of file
...@@ -25,51 +25,60 @@ def suite_setup(): ...@@ -25,51 +25,60 @@ def suite_setup():
wd = GSTORE['wd'] wd = GSTORE['wd']
admin_login("Test02", "ubains@123") admin_login("Test02", "ubains@123")
sleep(5) sleep(5)
INFO("请检查中控屏软件灯光开启的状态是否正常") # STEP(2, "检查灯光开启状态")
STEP(2, "检查灯光开启状态") # # 这是全部灯光关闭后在软件界面上的状态显示
# 这是全部灯光关闭后在软件界面上的状态显示 # INFO("请检查中控屏软件的灯光关闭状态显示是否正常")
INFO("请检查中控屏软件的灯光关闭状态显示是否正常") # SELENIUM_LOG_SCREEN(wd,"50%","Exhibit_Inspect","Control_Manage","light_all_off")
SELENIUM_LOG_SCREEN(wd,"50%","Exhibit_Inspect","Control_Manage","light_all_off") # # 这是全部灯光开启后在软件界面上的状态显示
# 这是全部灯光开启后在软件界面上的状态显示 # INFO("请检查中控屏软件的灯光开启状态显示是否正常")
INFO("请检查中控屏软件的灯光开启状态显示是否正常") # SELENIUM_LOG_SCREEN(wd,"50%","Exhibit_Inspect","Control_Manage","light_all_on")
SELENIUM_LOG_SCREEN(wd,"50%","Exhibit_Inspect","Control_Manage","light_all_on") # # 这是灯光开启前的截图
# 这是灯光开启前的截图 # INFO("请检查灯光开启前的监控视频状态是否正常")
INFO("请检查灯光开启前的监控视频状态是否正常") # SELENIUM_LOG_SCREEN(wd,"50%","Exhibit_Inspect","Control_Manage","light_down")
SELENIUM_LOG_SCREEN(wd,"50%","Exhibit_Inspect","Control_Manage","light_down") # # 这是灯光开启后的截图
# 这是灯光开启后的截图 # INFO("请检查灯光开启后的监控视频状态是否正常")
INFO("请检查灯光开启后的监控视频状态是否正常") # SELENIUM_LOG_SCREEN(wd, "50%", "Exhibit_Inspect", "Control_Manage", "light_on")
SELENIUM_LOG_SCREEN(wd, "50%", "Exhibit_Inspect", "Control_Manage", "light_on")
STEP(3, "检查窗帘的上升下降状态") # STEP(3, "检查窗帘的上升下降状态")
INFO("请检查窗帘上升状态是否正常") # INFO("请检查窗帘上升状态是否正常")
SELENIUM_LOG_SCREEN(wd, "50%", "Exhibit_Inspect", "Control_Manage", "curtain_up") # SELENIUM_LOG_SCREEN(wd, "50%", "Exhibit_Inspect", "Control_Manage", "curtain_up")
INFO("请检查窗帘下降状态是否正常") # INFO("请检查窗帘下降状态是否正常")
SELENIUM_LOG_SCREEN(wd, "50%", "Exhibit_Inspect", "Control_Manage", "curtain_down") # SELENIUM_LOG_SCREEN(wd, "50%", "Exhibit_Inspect", "Control_Manage", "curtain_down")
STEP(3, "检查空调开启状态") # STEP(3, "检查空调开启状态")
# 这是空调关闭的状态显示 # # 这是空调关闭的状态显示
INFO("请检查空调关闭的状态是否正常") # INFO("请检查空调关闭的状态是否正常")
SELENIUM_LOG_SCREEN(wd, "50%", "Exhibit_Inspect", "Control_Manage", "air_condition_off") # SELENIUM_LOG_SCREEN(wd, "50%", "Exhibit_Inspect", "Control_Manage", "air_condition_off")
# 这是空调开启的状态显示 # # 这是空调开启的状态显示
INFO("请检查空调开启的状态是否正常") # INFO("请检查空调开启的状态是否正常")
SELENIUM_LOG_SCREEN(wd, "50%", "Exhibit_Inspect", "Control_Manage", "air_condition_on") # SELENIUM_LOG_SCREEN(wd, "50%", "Exhibit_Inspect", "Control_Manage", "air_condition_on")
STEP(4, "检查指挥大屏开启状态") # STEP(4, "检查指挥大屏开启状态")
# 这是指挥大屏关闭的监控视频显示 # # 这是指挥大屏关闭的监控视频显示
INFO("请检查指挥大屏关闭的监控视频状态是否正常") # INFO("请检查指挥大屏关闭的监控视频状态是否正常")
SELENIUM_LOG_SCREEN(wd, "50%", "Exhibit_Inspect", "Control_Manage", "command_screen_down") # SELENIUM_LOG_SCREEN(wd, "50%", "Exhibit_Inspect", "Control_Manage", "command_screen_down")
# 这是指挥大屏开启的监控视频显示 # # 这是指挥大屏开启的监控视频显示
INFO("请检查指挥大屏开启的监控视频状态是否正常") # INFO("请检查指挥大屏开启的监控视频状态是否正常")
SELENIUM_LOG_SCREEN(wd, "50%", "Exhibit_Inspect", "Control_Manage", "command_screen_on") # SELENIUM_LOG_SCREEN(wd, "50%", "Exhibit_Inspect", "Control_Manage", "command_screen_on")
STEP(5,"检查音乐播放状态") # STEP(5,"检查音乐播放状态")
# 这是音乐开启播放后的界面显示 # # 这是音乐开启播放后的界面显示
INFO("请检查中控屏软件打开音乐播放后的界面状态显示") # INFO("请检查中控屏软件打开音乐播放后的界面状态显示")
SELENIUM_LOG_SCREEN(wd, "50%", "Exhibit_Inspect", "Control_Manage", "music_on") # SELENIUM_LOG_SCREEN(wd, "50%", "Exhibit_Inspect", "Control_Manage", "music_on")
# 这是音乐关闭播放后的界面显示 # # 这是音乐关闭播放后的界面显示
INFO("请检查中控屏软件关闭音乐播放后的界面状态显示") # INFO("请检查中控屏软件关闭音乐播放后的界面状态显示")
SELENIUM_LOG_SCREEN(wd, "50%", "Exhibit_Inspect", "Control_Manage", "music_off") # SELENIUM_LOG_SCREEN(wd, "50%", "Exhibit_Inspect", "Control_Manage", "music_off")
# STEP(6,"检查信息发布界面展示")
# # 这是生日快乐主题内容发布
# INFO("请检查中控屏软件信息发布界面是否正常")
# SELENIUM_LOG_SCREEN(wd, "50%", "Exhibit_Inspect", "Control_Manage", "information_brithday_on")
# # 这是会议欢迎主题内容发布
# INFO("请检查中控屏软件信息发布界面是否正常")
# SELENIUM_LOG_SCREEN(wd, "50%", "Exhibit_Inspect", "Control_Manage", "information_meeting_on")
# # 这是展厅空间结构内容发布
# INFO("请检查中控屏软件信息发布界面是否正常")
# SELENIUM_LOG_SCREEN(wd, "50%", "Exhibit_Inspect", "Control_Manage", "information_space_on")
def suite_teardown(): def suite_teardown():
......
from appium.webdriver.common.appiumby import AppiumBy
from dominate.tags import button
from pygments.console import light_colors
from 预定系统.Base.app_base import * from 预定系统.Base.app_base import *
import logging import logging
from time import sleep from time import sleep
from hytest import *
# 配置日志记录 # 配置日志记录
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s') logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')
...@@ -22,6 +20,7 @@ class Exhibition_hall_Control_000x: ...@@ -22,6 +20,7 @@ class Exhibition_hall_Control_000x:
该方法初始化应用驱动,等待应用加载,定位并点击会议按钮,加入会议,并截取会议画面。 该方法初始化应用驱动,等待应用加载,定位并点击会议按钮,加入会议,并截取会议画面。
""" """
app_drive = None app_drive = None
wd = GSTORE['wd']
try: try:
# 初始化应用驱动,连接到指定的设备和应用 # 初始化应用驱动,连接到指定的设备和应用
app_drive = app_setup_driver("Android", "5.1.1", "UT-13", "com.ubains.gviewer", app_drive = app_setup_driver("Android", "5.1.1", "UT-13", "com.ubains.gviewer",
...@@ -36,12 +35,17 @@ class Exhibition_hall_Control_000x: ...@@ -36,12 +35,17 @@ class Exhibition_hall_Control_000x:
"/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.RelativeLayout[1]/android.widget.Button[6]") "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.RelativeLayout[1]/android.widget.Button[6]")
logging.info("尝试定位【空气净化】按钮元素,并点击按钮") logging.info("尝试定位【空气净化】按钮元素,并点击按钮")
air_button.click() air_button.click()
sleep(20) sleep(10)
STEP(2, "检查灯光控制功能")
# 这是灯光开启前的截图
INFO("请检查灯光开启前的监控视频状态是否正常")
SELENIUM_LOG_SCREEN(wd, "50%", "Exhibit_Inspect", "Control_Manage", "light_down")
# 先截取当前空间的灯光状态图片 # 先截取当前空间的灯光状态图片
rtsp_url = "rtsp://admin:huawei@123@192.168.4.15/LiveMedia/ch1/Media2" # 替换为你的RTSP流地址 light_rtsp_url = "rtsp://admin:huawei@123@192.168.4.15/LiveMedia/ch1/Media2" # 替换为你的RTSP流地址
logging.info("开始捕获RTSP流中的帧") logging.info("开始捕获RTSP流中的帧")
if capture_frame_from_rtsp(rtsp_url, "light_down.png"): if capture_frame_from_rtsp(light_rtsp_url, "light_down.png"):
logging.info("帧捕获成功") logging.info("帧捕获成功")
else: else:
logging.error("帧捕获失败") logging.error("帧捕获失败")
...@@ -54,24 +58,39 @@ class Exhibition_hall_Control_000x: ...@@ -54,24 +58,39 @@ class Exhibition_hall_Control_000x:
# 点击【灯光控制】按钮 # 点击【灯光控制】按钮
light_button.click() light_button.click()
logging.info("点击【灯光控制】按钮成功") logging.info("点击【灯光控制】按钮成功")
sleep(20) sleep(10)
# 这是全部灯光关闭后在软件界面上的状态显示
INFO("请检查中控屏软件的灯光关闭状态显示是否正常")
SELENIUM_LOG_SCREEN(wd, "50%", "Exhibit_Inspect", "Control_Manage", "light_all_off")
# 截图获取当前软件的灯光控制界面 # 截图获取当前软件的灯光控制界面
app_drive.get_screenshot_as_file( app_drive.get_screenshot_as_file(
r"D:\GithubData\自动化\ubains-module-test\预定系统\reports\imgs\Exhibit_Inspect\Control_Manage\light_all_off.png") r"D:\GithubData\自动化\ubains-module-test\预定系统\reports\imgs\Exhibit_Inspect\Control_Manage\light_all_off.png")
# 调用灯光控制函数 # 调用灯光控制函数
light_control(app_drive) light_control(app_drive)
# 这是全部灯光开启后在软件界面上的状态显示
INFO("请检查中控屏软件的灯光开启状态显示是否正常")
SELENIUM_LOG_SCREEN(wd, "50%", "Exhibit_Inspect", "Control_Manage", "light_all_on")
# 截图获取当前软件的灯光控制界面 # 截图获取当前软件的灯光控制界面
app_drive.get_screenshot_as_file( app_drive.get_screenshot_as_file(
r"D:\GithubData\自动化\ubains-module-test\预定系统\reports\imgs\Exhibit_Inspect\Control_Manage\light_all_on.png") r"D:\GithubData\自动化\ubains-module-test\预定系统\reports\imgs\Exhibit_Inspect\Control_Manage\light_all_on.png")
# 这是灯光开启后的截图
INFO("请检查灯光开启后的监控视频状态是否正常")
SELENIUM_LOG_SCREEN(wd, "50%", "Exhibit_Inspect", "Control_Manage", "light_on")
# 先截取当前空间的灯光状态图片 # 先截取当前空间的灯光状态图片
rtsp_url = "rtsp://admin:huawei@123@192.168.4.15/LiveMedia/ch1/Media2" # 替换为你的RTSP流地址 light_rtsp_url = "rtsp://admin:huawei@123@192.168.4.15/LiveMedia/ch1/Media2" # 替换为你的RTSP流地址
logging.info("开始捕获RTSP流中的帧") logging.info("开始捕获RTSP流中的帧")
if capture_frame_from_rtsp(rtsp_url, "light_on.png"): if capture_frame_from_rtsp(light_rtsp_url, "light_on.png"):
logging.info("帧捕获成功") logging.info("帧捕获成功")
else: else:
logging.error("帧捕获失败") logging.error("帧捕获失败")
STEP(3, "检查窗帘的升降功能")
# 切换至窗帘控制界面 # 切换至窗帘控制界面
logging.info("尝试定位【窗帘控制】按钮元素,并点击按钮") logging.info("尝试定位【窗帘控制】按钮元素,并点击按钮")
curtain_button = app_drive.find_element(AppiumBy.XPATH, curtain_button = app_drive.find_element(AppiumBy.XPATH,
...@@ -79,8 +98,9 @@ class Exhibition_hall_Control_000x: ...@@ -79,8 +98,9 @@ class Exhibition_hall_Control_000x:
curtain_button.click() curtain_button.click()
sleep(2) sleep(2)
# 调用窗口上升下降的函数 # 调用窗口上升下降的函数
curtain_control(app_drive) curtain_control(app_drive,wd)
STEP(3, "检查空调控制是否正常")
# 切换至空调控制界面 # 切换至空调控制界面
logging.info("尝试定位【空调控制】按钮元素,并点击按钮") logging.info("尝试定位【空调控制】按钮元素,并点击按钮")
air_conditioner_button = app_drive.find_element(AppiumBy.XPATH, air_conditioner_button = app_drive.find_element(AppiumBy.XPATH,
...@@ -88,8 +108,9 @@ class Exhibition_hall_Control_000x: ...@@ -88,8 +108,9 @@ class Exhibition_hall_Control_000x:
air_conditioner_button.click() air_conditioner_button.click()
sleep(2) sleep(2)
# 调用空调控制的函数 # 调用空调控制的函数
air_condition_control(app_drive) air_condition_control(app_drive,wd)
STEP(4, "检查指挥大屏控制是否正常")
# 切换至指挥中心控制界面 # 切换至指挥中心控制界面
# 打开指挥中心大屏幕 # 打开指挥中心大屏幕
logging.info("尝试定位【开启指挥中心控制】按钮元素,并点击按钮") logging.info("尝试定位【开启指挥中心控制】按钮元素,并点击按钮")
...@@ -98,33 +119,36 @@ class Exhibition_hall_Control_000x: ...@@ -98,33 +119,36 @@ class Exhibition_hall_Control_000x:
center_button.click() center_button.click()
sleep(2) sleep(2)
# 调用指挥中心控制函数 # 调用指挥中心控制函数
command_centre_control(rtsp_url, app_drive) command_centre_control(light_rtsp_url, app_drive,wd)
STEP(5, "检查音乐控制功能是否正常")
# 切换至音乐区域 # 切换至音乐区域
logging.info("尝试定位【音乐】按钮元素,并点击按钮") logging.info("尝试定位【音乐】按钮元素,并点击按钮")
music_button = app_drive.find_element(AppiumBy.XPATH, music_button = app_drive.find_element(AppiumBy.XPATH,
"/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.RelativeLayout[1]/android.widget.Button[9]") "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.RelativeLayout[1]/android.widget.Button[9]")
music_button.click() music_button.click()
sleep(2) sleep(2)
# 调用音乐控制函数
music_control(app_drive,wd)
# 点击【播放音乐】
logging.info("尝试定位【播放音乐】按钮元素,并点击按钮")
play_music_button = app_drive.find_element(AppiumBy.XPATH,
"/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.RelativeLayout[2]/android.widget.Button[8]")
play_music_button.click()
sleep(5)
app_drive.get_screenshot_as_file(
r"D:\GithubData\自动化\ubains-module-test\预定系统\reports\imgs\Exhibit_Inspect\Control_Manage\music_on.png")
# 点击【关闭播放音乐】 STEP(6, "检查信息发布界面发布内容功能是否正常")
logging.info("尝试定位【关闭播放音乐】按钮元素,并点击按钮") logging.info("尝试定位【发布屏】按钮元素,并点击按钮")
close_play_music_button = app_drive.find_element(AppiumBy.XPATH, information_delivery = app_drive.find_element(AppiumBy.XPATH,
"/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.RelativeLayout[2]/android.widget.Button[8]") "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.RelativeLayout[1]/android.widget.Button[7]")
close_play_music_button.click() logging.info("定位成功")
information_delivery.click()
sleep(5) sleep(5)
app_drive.get_screenshot_as_file(
r"D:\GithubData\自动化\ubains-module-test\预定系统\reports\imgs\Exhibit_Inspect\Control_Manage\music_off.png")
# 打开信息发布播放
information_on_button = app_drive.find_element(AppiumBy.XPATH,
"/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.RelativeLayout[2]/android.widget.Button[7]")
information_on_button.click()
logging.info("信息发布播放开启成功")
# 调用信息发布控制函数
information_control(app_drive,wd)
STEP(7, "关闭展厅环境灯光。")
# 切换灯光控制界面 # 切换灯光控制界面
# 所有测试结束后关闭灯光 # 所有测试结束后关闭灯光
logging.info("尝试定位【灯光控制】按钮元素,并点击按钮") logging.info("尝试定位【灯光控制】按钮元素,并点击按钮")
......
...@@ -70,7 +70,7 @@ start_workers(3) ...@@ -70,7 +70,7 @@ start_workers(3)
# 每天早上07:50执行后台系统设置功能测试 # 每天早上07:50执行后台系统设置功能测试
schedule.every().day.at("10:00").do(run_task, run_automation_test, report_title="预定系统_后台管理功能_测试报告", report_url_prefix="http://nat.ubainsyun.com:31133", test_case="预定系统功能", ding_type="标准版巡检") schedule.every().day.at("10:00").do(run_task, run_automation_test, report_title="预定系统_后台管理功能_测试报告", report_url_prefix="http://nat.ubainsyun.com:31133", test_case="预定系统功能", ding_type="标准版巡检")
schedule.every().day.at("07:55").do(run_task, run_automation_test, report_title="展厅巡检测试报告", report_url_prefix="http://nat.ubainsyun.com:31133", test_case="展厅巡检", ding_type="展厅巡检") schedule.every().day.at("07:50").do(run_task, run_automation_test, report_title="展厅巡检测试报告", report_url_prefix="http://nat.ubainsyun.com:31133", test_case="展厅巡检", ding_type="展厅巡检")
# schedule.every().day.at("08:25").do(run_task, run_automation_test, report_title="展厅巡检_腾讯终端入会测试报告", report_url_prefix="http://nat.ubainsyun.com:31133", test_case="展厅巡检_腾讯会议") # schedule.every().day.at("08:25").do(run_task, run_automation_test, report_title="展厅巡检_腾讯终端入会测试报告", report_url_prefix="http://nat.ubainsyun.com:31133", test_case="展厅巡检_腾讯会议")
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论