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

调整预定系统后台管理模块的执行顺序,将所有预定后台管理模块整合到一个执行指令中,优化各个模块之间的逻辑处理。调整各个模块的__st__.py的浏览器初始化调...

调整预定系统后台管理模块的执行顺序,将所有预定后台管理模块整合到一个执行指令中,优化各个模块之间的逻辑处理。调整各个模块的__st__.py的浏览器初始化调用。调整截屏函数的图片存放路径,并且将服务80端口映射出来,实现公网访问测试报告文件。增加ngrok程序,后续调整自动执行ngrok映射。
上级 cc50c6a5
......@@ -463,6 +463,7 @@ def get_latest_report_file(report_dir, base_url):
def dingding_send_message(test_report_url, title, text, mobile):
"""
发送钉钉机器人消息
参考接口文档:https://open.dingtalk.com/document/orgapp/custom-robots-send-group-messages#title-7fs-kgs-36x
:param test_report_url: 测试报告链接
:param title: 消息标题
......@@ -505,7 +506,7 @@ def dingding_send_message(test_report_url, title, text, mobile):
'link': {
'title': title,
'messageUrl': test_report_url,
'text': text
'text': test_report_url
},
"at": {
"atMobiles": [mobile],
......@@ -610,4 +611,7 @@ def get_reportfile_send_dingding(report_title, report_url_prefix):
logging.error(f"发生操作系统错误: {e}")
finally:
# 无论是否成功,都记录测试结束的日志
logging.info("自动化测试完成。")
\ No newline at end of file
logging.info("自动化测试完成。")
# if __name__ == '__main__':
# get_reportfile_send_dingding("测试","http://192.168.1.166")
\ No newline at end of file
......@@ -78,4 +78,7 @@
- 封装get_reportfile_send_dingding函数用来获取测试报告文件并拼接IP地址,并发送钉钉群消息。优化定时任务run_automation_test函数的调用处理,并增加对于的日志输出。
- 补充定时任务执行的注解。
- 调整元素定位的显示等待时间,避免因服务器的网络波动导致元素获取异常。
- 调整钉钉发送消息调用函数,去除callback回调。补充部门管理模块的定时执行任务。调整get_reportfile_send_dingding函数的参数。
\ No newline at end of file
- 调整钉钉发送消息调用函数,去除callback回调。补充部门管理模块的定时执行任务。调整get_reportfile_send_dingding函数的参数。
23. 2024-11-29
- 调整预定系统后台管理模块的执行顺序,将所有预定后台管理模块整合到一个执行指令中,优化各个模块之间的逻辑处理。调整各个模块的__st__.py的浏览器初始化调用。
- 调整截屏函数的图片存放路径,并且将服务80端口映射出来,实现公网访问测试报告文件。增加ngrok程序,后续调整自动执行ngrok映射。
\ No newline at end of file
......@@ -15,11 +15,11 @@ except ModuleNotFoundError as e:
print("尝试使用绝对路径导入")
from 预定系统.Base.base import *
def suite_setup():
STEP(1, "初始化浏览器")
browser_init()
# STEP(2, "处理SSL认证")
# handle_ssl_warning()
# def suite_setup():
# STEP(1, "初始化浏览器")
# browser_init()
# # STEP(2, "处理SSL认证")
# # handle_ssl_warning()
def suite_teardown():
browser_quit()
\ No newline at end of file
......@@ -11,5 +11,8 @@ sys.path.append(预定系统_path)
from 预定系统.Base.base import *
def suite_setup():
STEP(1, "初始化浏览器")
browser_init()
wd = GSTORE['wd']
admin_login()
\ No newline at end of file
......@@ -21,6 +21,7 @@ current_dir = os.path.dirname(os.path.abspath(__file__))
csv_file_path = os.path.join(current_dir, '../../../测试数据/会议室管理/会议室管理模块/会议室新增.csv')
class Conference_Add_000x:
tags = ['会议室管理功能' , '后台管理功能']
"""
执行指令:
1.cd 预定系统
......@@ -277,4 +278,7 @@ class Conference_Add_000x:
# 记录日志,检查新增会议室容纳人数是否正确
INFO(f"检查新增会议室容纳人数为:{conference_capacity_text}")
CHECK_POINT("检查新增会议室容纳人数", conference_capacity_text == conference_capacity)
\ No newline at end of file
CHECK_POINT("检查新增会议室容纳人数", conference_capacity_text == conference_capacity)
if name == '会议室新增_101':
wd.refresh()
\ No newline at end of file
......@@ -33,11 +33,11 @@ def text_query(wd,element_locator,query_text):
STEP(2, "查看搜索结果")
notify_text = elment_get_text(element_locator, wd)
INFO(f"搜索结果为:{notify_text}")
CHECK_POINT("搜索结果是否正确", query_text in notify_text)
return notify_text
class Conference_Query_000x:
tags = ['会议室管理功能' , '后台管理功能']
"""
执行指令:
1.cd 预定系统
......@@ -59,15 +59,26 @@ class Conference_Query_000x:
conference_name, query_type, query_text = self.para
if query_type == "模糊查询":
text_query(wd,(By.XPATH, "//tbody/tr[contains(@class,'el-table__row')]/td[2]/div[1]"),query_text)
notify_text = text_query(wd,(By.XPATH, "//tbody/tr[contains(@class,'el-table__row')]/td[2]/div[1]"),query_text)
INFO(f"搜索结果为:{notify_text}")
CHECK_POINT("搜索结果是否正确", query_text in notify_text)
elif query_type == "精确查询":
text_query(wd, (By.XPATH, "//tbody/tr[contains(@class,'el-table__row')]/td[2]/div[1]"), query_text)
notify_text = text_query(wd, (By.XPATH, "//tbody/tr[contains(@class,'el-table__row')]/td[2]/div[1]"), query_text)
INFO(f"搜索结果为:{notify_text}")
CHECK_POINT("搜索结果是否正确", query_text in notify_text)
elif query_type == "错误查询":
text_query(wd, (By.XPATH, "//span[contains(@class,'el-table__empty-text')]"), query_text)
notify_text = text_query(wd, (By.XPATH, "//span[@class='el-table__empty-text']"), query_text)
INFO(f"搜索结果为:{notify_text}")
CHECK_POINT("搜索结果是否正确", "暂无数据" in notify_text)
elif query_type == "分页查询":
# 切换分页
safe_click((By.XPATH,"//li[normalize-space()='4']"),wd)
text_query(wd, (By.XPATH, "//tbody/tr[contains(@class,'el-table__row')]/td[2]/div[1]"), query_text)
\ No newline at end of file
notify_text = text_query(wd, (By.XPATH, "//tbody/tr[contains(@class,'el-table__row')]/td[2]/div[1]"), query_text)
INFO(f"搜索结果为:{notify_text}")
CHECK_POINT("搜索结果是否正确", query_text in notify_text)
if name == '会议室查询_005':
wd.refresh()
\ No newline at end of file
......@@ -21,6 +21,7 @@ current_dir = os.path.dirname(os.path.abspath(__file__))
csv_file_path = os.path.join(current_dir, '../../../测试数据/会议室管理/会议室管理模块/会议室删除.csv')
class Conference_Delete_000x:
tags = ['会议室管理功能' , '后台管理功能']
"""
执行指令:
1.cd 预定系统
......@@ -122,4 +123,7 @@ class Conference_Delete_000x:
STEP(3, f"检查不勾选数据批量删除弹窗的文本提示语")
notify_text = get_notify_text(wd,(By.XPATH, "//p[@class='el-message__content']"),"Conference_Manage","Conference_Del",f"{name}_不勾选数据批量删除提示信息")
INFO(f"不勾选数据批量删除弹窗的文本提示语为:{notify_text}")
CHECK_POINT("不勾选数据批量删除弹窗的文本提示语检查", notify_text == check_text)
\ No newline at end of file
CHECK_POINT("不勾选数据批量删除弹窗的文本提示语检查", notify_text == check_text)
if name == '会议室删除_011':
wd.refresh()
\ No newline at end of file
......@@ -21,6 +21,7 @@ current_dir = os.path.dirname(os.path.abspath(__file__))
csv_file_path = os.path.join(current_dir, '../../../测试数据/会议室管理/会议室管理模块/会议室编辑.csv')
class Conference_Edit_000x:
tags = ['会议室管理功能' , '后台管理功能']
"""
执行指令:
1.cd 预定系统
......@@ -196,4 +197,7 @@ class Conference_Edit_000x:
f"数据回显结果为:{conference_name_text},{conference_capacity_text},{conference_function_text},{conference_maxbook_text},{conference_open_text}")
# 检查点:验证数据回显是否正确
CHECK_POINT("检查数据回显是否正确",
conference_name_text == new_conference_name and conference_capacity_text == new_conference_capacity and conference_function_text == new_conference_function and conference_maxbook_text == max_book_day and conference_open_text == open_department)
new_conference_name in conference_name_text and new_conference_capacity in conference_capacity_text and new_conference_function in conference_function_text and max_book_day in conference_maxbook_text and open_department in conference_open_text)
if name == '会议室编辑_003':
wd.refresh()
\ No newline at end of file
......@@ -17,6 +17,9 @@ except ModuleNotFoundError as e:
from 预定系统.Base.base import *
def suite_setup():
STEP(1, "初始化浏览器")
browser_init()
wd = GSTORE['wd']
admin_login()
enter_the_backend()
......@@ -27,4 +30,8 @@ def suite_setup():
INFO("进入功能管理模块")
safe_click((By.XPATH, "//li[contains(text(),'会议室管理')]"), wd)
sleep(1)
\ No newline at end of file
sleep(1)
def suite_teardown():
wd = GSTORE['wd']
wd.quit()
\ No newline at end of file
......@@ -21,6 +21,7 @@ current_dir = os.path.dirname(os.path.abspath(__file__))
csv_file_path = os.path.join(current_dir, '../../../测试数据/会议室管理/功能管理模块/功能新增.csv')
class Function_Add_000x:
tags =['会议室功能管理' , '后台管理功能']
"""
执行指令:
1.cd 预定系统
......@@ -74,4 +75,8 @@ class Function_Add_000x:
if notify_text != "添加成功":
# 返回功能列表
safe_click((By.XPATH,"//div[@aria-label='添加功能']//i[@class='el-dialog__close el-icon el-icon-close']"),wd)
\ No newline at end of file
safe_click((By.XPATH,"//div[@aria-label='添加功能']//i[@class='el-dialog__close el-icon el-icon-close']"),wd)
# 刷新页面元素
if name == '功能新增_021':
wd.fresh()
\ No newline at end of file
from sys import dllhandle
from time import sleep
from hytest import *
# 获取当前脚本的绝对路径
......@@ -22,6 +21,7 @@ current_dir = os.path.dirname(os.path.abspath(__file__))
csv_file_path = os.path.join(current_dir, '../../../测试数据/会议室管理/功能管理模块/功能删除.csv')
class Function_Delete_000x:
tags = ['会议室功能管理' , '后台管理功能']
"""
执行指令:
1.cd 预定系统
......@@ -161,4 +161,8 @@ class Function_Delete_000x:
notify_text = get_notify_text(wd, (By.XPATH,"//p[@class='el-message__content']"), "Function_Manage", "Function_Del",
f"{name}_检查提示信息")
INFO(f"取消结果:{notify_text}")
CHECK_POINT("取消结果正确", notify_text == check_text)
\ No newline at end of file
CHECK_POINT("取消结果正确", notify_text == check_text)
# 刷新页面元素
if name == '功能删除_013':
wd.refresh()
\ No newline at end of file
......@@ -21,6 +21,7 @@ current_dir = os.path.dirname(os.path.abspath(__file__))
csv_file_path = os.path.join(current_dir, '../../../测试数据/会议室管理/功能管理模块/功能查询.csv')
class Function_Query_000x:
tags = ['会议室功能管理' , '后台管理功能']
"""
执行指令:
1.cd 预定系统
......@@ -43,6 +44,7 @@ class Function_Query_000x:
# 根据查询类型执行不同的测试步骤
if query_type == "精确查询":
INFO(f"精确查询功能:{function_name}")
# 步骤1: 输入功能名称
STEP(1, f"输入功能名称:{function_name}")
safe_send_keys((By.XPATH, "//input[@placeholder='输入关键字']"), function_name, wd)
......@@ -56,6 +58,7 @@ class Function_Query_000x:
CHECK_POINT("查询结果正确", notify_text == function_name)
elif query_type == "模糊查询":
INFO(f"模糊查询功能:{function_name}")
# 步骤1: 输入功能名称
STEP(1, f"输入功能名称:{function_name}")
safe_send_keys((By.XPATH, "//input[@placeholder='输入关键字']"), function_name, wd)
......@@ -69,6 +72,7 @@ class Function_Query_000x:
CHECK_POINT("查询结果正确", function_name in notify_text)
elif query_type == "错误查询":
INFO(f"错误查询功能:{function_name}")
# 步骤1: 输入功能名称
STEP(1, f"输入功能名称:{function_name}")
safe_send_keys((By.XPATH, "//input[@placeholder='输入关键字']"), function_name, wd)
......@@ -77,11 +81,12 @@ class Function_Query_000x:
# 步骤2: 检查查询结果
STEP(2, "检查查询结果")
notify_text = elment_get_text((By.XPATH, "//span[contains(@class,'el-table__empty-text')]"), wd)
notify_text = elment_get_text((By.XPATH, "//span[@class='el-table__empty-text']"), wd)
INFO(f"查询结果为:{notify_text}")
CHECK_POINT("查询结果正确", notify_text == "暂无数据")
elif query_type == "分页查询":
INFO(f"分页查询功能:{function_name}")
# 步骤1: 切换分页
STEP(1, f"切换分页")
safe_click((By.XPATH, "//li[@class='number']"), wd)
......@@ -97,4 +102,8 @@ class Function_Query_000x:
STEP(2, "检查查询结果")
notify_text = elment_get_text((By.XPATH, "//tbody/tr[1]/td[2]/div[1]"), wd)
INFO(f"查询结果为:{notify_text}")
CHECK_POINT("查询结果正确", notify_text in function_name)
\ No newline at end of file
CHECK_POINT("查询结果正确", notify_text in function_name)
# 刷新页面元素
if name == '功能查询_004':
wd.refresh()
\ No newline at end of file
......@@ -21,6 +21,7 @@ current_dir = os.path.dirname(os.path.abspath(__file__))
csv_file_path = os.path.join(current_dir, '../../../测试数据/会议室管理/功能管理模块/功能编辑.csv')
class Function_Edit_000x:
tags = ['会议室功能管理' , '后台管理功能']
"""
执行指令:
1.cd 预定系统
......@@ -79,10 +80,14 @@ class Function_Edit_000x:
notify_text = get_notify_text(wd, (By.XPATH,"//p[@class='el-message__content']"), "Function_Manage", "Function_Edit",
f"{name}检查提示信息")
INFO(f"修改结果为:{notify_text}")
CHECK_POINT("修改结果检查", notify_text == check_text)
CHECK_POINT("修改结果检查", check_text in notify_text)
if check_text != "修改成功":
INFO("check_text不等于修改成功")
# 返回功能列表
safe_click((By.XPATH, "//div[@aria-label='修改功能']//i[@class='el-dialog__close el-icon el-icon-close']"),
wd)
\ No newline at end of file
wd)
# 刷新页面元素
if name == '功能编辑_022':
wd.refresh()
\ No newline at end of file
......@@ -17,6 +17,9 @@ except ModuleNotFoundError as e:
from 预定系统.Base.base import *
def suite_setup():
STEP(1, "初始化浏览器")
browser_init()
wd = GSTORE['wd']
admin_login()
enter_the_backend()
......@@ -27,4 +30,8 @@ def suite_setup():
INFO("进入功能管理模块")
safe_click((By.XPATH, "//li[contains(text(),'功能管理')]"), wd)
sleep(1)
\ No newline at end of file
sleep(1)
def suite_teardown():
wd = GSTORE['wd']
wd.quit()
\ No newline at end of file
......@@ -21,6 +21,7 @@ current_dir = os.path.dirname(os.path.abspath(__file__))
csv_file_path = os.path.join(current_dir, '../../../测试数据/会议室管理/区域管理模块/区域新增.csv')
class Area_Add_000x:
tags = ['区域管理功能' , '后台管理功能']
"""
执行指令:
1.cd 预定系统
......@@ -77,4 +78,7 @@ class Area_Add_000x:
"//div[@role='group']//span[contains(text(),'默认区域名称')]"),
wd)
INFO(f"获取到新增区域的名称:{notify_text}")
CHECK_POINT("新增区域的默认名称是否与预期相符", area_name in notify_text)
\ No newline at end of file
CHECK_POINT("新增区域的默认名称是否与预期相符", area_name in notify_text)
if name == '区域新增_001':
wd.refresh()
\ No newline at end of file
......@@ -21,6 +21,7 @@ current_dir = os.path.dirname(os.path.abspath(__file__))
csv_file_path = os.path.join(current_dir, '../../../测试数据/会议室管理/区域管理模块/区域删除.csv')
class Area_Delete_000x:
tags = ['区域管理功能' , '后台管理功能']
"""
执行指令:
1.cd 预定系统
......@@ -88,4 +89,7 @@ class Area_Delete_000x:
notify_text = get_notify_text(wd, (By.XPATH, "//p[@class='el-message__content']"), "Area_Manage",
"Area_Del", f"{name}_检查父区域删除提示信息")
INFO(f"删除后的提示信息:{notify_text}")
CHECK_POINT("删除后的提示信息是否正确", notify_text == check_text)
\ No newline at end of file
CHECK_POINT("删除后的提示信息是否正确", notify_text == check_text)
if name == "区域删除_002":
wd.refresh()
\ No newline at end of file
......@@ -21,6 +21,7 @@ current_dir = os.path.dirname(os.path.abspath(__file__))
csv_file_path = os.path.join(current_dir, '../../../测试数据/会议室管理/区域管理模块/区域编辑.csv')
class Area_Edit_000x:
tags = ['区域管理功能' , '后台管理功能']
"""
执行指令:
1.cd 预定系统
......@@ -70,6 +71,7 @@ class Area_Edit_000x:
STEP(4,f"输入区域名称{new_area_name}")
INFO(f"输入区域名称:{new_area_name}")
safe_send_keys((By.XPATH, "//input[@placeholder='请输入区域名称']"),new_area_name,wd)
sleep(1)
safe_click((By.XPATH, "(//span[contains(text(),'确定')])[4]"), wd)
sleep(2)
......@@ -77,4 +79,16 @@ class Area_Edit_000x:
notify_text = get_notify_text(wd, (By.XPATH, "//p[@class='el-message__content']"), "Area_Manage", "Area_Edit",
f"{name}_检查编辑提示信息")
INFO(f"获取到编辑提示信息:{notify_text}")
CHECK_POINT("编辑提示信息是否与预期相符", notify_text == check_text )
\ No newline at end of file
CHECK_POINT("编辑提示信息是否与预期相符", notify_text == check_text )
# 清除数据
if name == "区域编辑_005":
INFO("清除测试数据")
safe_click((By.XPATH, "//span[contains(text(),'删除')]"),wd)
sleep(1)
safe_click((By.XPATH, "(//span[contains(text(),'确定')])[5]"), wd)
sleep(2)
notify_text = get_notify_text(wd, (By.XPATH, "//p[@class='el-message__content']"), "Area_Manage", "Area_Edit",
f"{name}_检查删除提示信息")
INFO(f"获取到删除提示信息:{notify_text}")
CHECK_POINT("删除提示信息是否与预期相符", notify_text == "删除成功")
\ No newline at end of file
......@@ -17,6 +17,8 @@ except ModuleNotFoundError as e:
from 预定系统.Base.base import *
def suite_setup():
STEP(1, "初始化浏览器")
browser_init()
wd = GSTORE['wd']
admin_login()
enter_the_backend()
......@@ -27,4 +29,8 @@ def suite_setup():
INFO("进入区域管理模块")
safe_click((By.XPATH, "//li[contains(text(),'区域管理')]"), wd)
sleep(1)
\ No newline at end of file
sleep(1)
def suite_teardown():
wd = GSTORE['wd']
wd.quit()
\ No newline at end of file
import sys
import os
from time import sleep
# 获取当前脚本的绝对路径
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()
def suite_teardown():
wd = GSTORE['wd']
wd.quit()
\ No newline at end of file
from time import sleep
from hytest import *
import sys
import os
# 获取当前脚本的绝对路径
......@@ -26,6 +25,7 @@ current_dir = os.path.dirname(os.path.abspath(__file__))
csv_file_path = os.path.join(current_dir, '../../测试数据/登录模块/账号密码登录.csv')
class Login_00x:
tags = ['登录功能' , '后台管理功能']
"""
执行指令是:
1.cd 预定系统
......
......@@ -12,6 +12,9 @@ sys.path.append(预定系统_path)
from 预定系统.Base.base import *
def suite_setup():
STEP(1, "初始化浏览器")
browser_init()
wd = GSTORE['wd']
admin_login()
enter_the_backend()
......
......@@ -14,12 +14,20 @@ except ModuleNotFoundError as e:
print("尝试使用绝对路径导入")
from 预定系统.Base.base import *
class System_Setting_0001:
# 获取当前脚本所在的目录
current_dir = os.path.dirname(os.path.abspath(__file__))
# 构建CSV文件的绝对路径
csv_file_path = os.path.join(current_dir, '../../测试数据/系统设置模块/系统设置.csv')
class System_Setting_000x:
tags = ['系统设置功能']
"""
执行指令:
1.cd 预定系统
2.hytest --report_title 系统设置测试报告 --test System_Setting_0001
2.hytest --report_title 系统设置测试报告 --test 系统设置_001
"""
ddt_cases = read_csv_data(csv_file_path)
def teststeps(self):
"""
执行测试步骤以用户新增功能。
......@@ -33,8 +41,11 @@ class System_Setting_0001:
version_houdaun_text = ""
# 从全局存储中获取webdriver实例
wd = GSTORE['wd']
name = self.name
check_text = self.para
STEP(1, "检查fastDFS服务运行是否正常")
sleep(3)
notify_fastdfs_text = elment_get_text((By.XPATH,"(//div[@class='detail_content'][contains(text(),'正常启动')])[1]"), wd)
notify_mysql_text = elment_get_text((By.XPATH,"(//div[@class='detail_content'][contains(text(),'正常启动')])[2]"),wd)
notify_redis_text = elment_get_text((By.XPATH,"(//div[@class='detail_content'][contains(text(),'正常启动')])[3]"),wd)
......@@ -45,4 +56,6 @@ class System_Setting_0001:
version_houdaun_text = elment_get_text((By.XPATH,"/html/body/div[1]/div/div[2]/div[2]/div/div/div[2]/div[5]/div[1]/div/div"), wd)
INFO(f"前端版本:{version_qianduan_text},后端版本:{version_houdaun_text}")
CHECK_POINT("检查fastDFS、mysql、redis服务运行", notify_fastdfs_text == "正常启动", notify_mysql_text == "正常启动", notify_redis_text == "正常启动")
CHECK_POINT("检查fastDFS服务运行", check_text in notify_fastdfs_text)
CHECK_POINT("检查mysql服务运行", check_text in notify_mysql_text)
CHECK_POINT("检查redis服务运行", check_text in notify_redis_text)
\ No newline at end of file
......@@ -32,7 +32,7 @@ logging.basicConfig(
class User_Chanage_Pwd_000x:
tags = ['用户管理功能']
tags = ['用户管理功能' , '后台管理功能']
"""
执行指令:
1.cd 预定系统
......
......@@ -31,7 +31,7 @@ logging.basicConfig(
)
class Add_User_000x:
tags = ['用户管理功能']
tags = ['用户管理功能' , '后台管理功能']
"""
执行指令:
1.cd 预定系统
......
......@@ -27,7 +27,7 @@ logging.basicConfig(
)
class Query_User_000x:
tags = ['用户管理功能']
tags = ['用户管理功能' , '后台管理功能']
"""
执行指令:
1.cd 预定系统
......
......@@ -27,7 +27,7 @@ logging.basicConfig(
)
class Delete_User_000x:
tags = ['用户管理功能']
tags = ['用户管理功能' , '后台管理功能']
"""
执行指令:
1.cd 预定系统
......
......@@ -31,7 +31,7 @@ logging.basicConfig(
)
class User_Status_000x:
tags = ['用户管理功能']
tags = ['用户管理功能' , '后台管理功能']
"""
执行指令:
1.cd 预定系统
......
......@@ -31,7 +31,7 @@ logging.basicConfig(
)
class User_Edit_000x:
tags = ['用户管理功能']
tags = ['用户管理功能' , '后台管理功能']
"""
执行指令:
1.cd 预定系统
......
......@@ -15,6 +15,9 @@ except ModuleNotFoundError as e:
from 预定系统.Base.base import *
def suite_setup():
STEP(1, "初始化浏览器")
browser_init()
wd = GSTORE['wd']
admin_login()
enter_the_backend()
......@@ -23,4 +26,8 @@ def suite_setup():
safe_click((By.XPATH, "//span[@class='aside_menu menu_account']"), wd)
INFO("进入用户管理模块")
safe_click((By.XPATH, "//li[contains(text(),'用户管理')]"), wd)
\ No newline at end of file
safe_click((By.XPATH, "//li[contains(text(),'用户管理')]"), wd)
def suite_teardown():
wd = GSTORE['wd']
wd.quit()
\ No newline at end of file
......@@ -15,7 +15,7 @@ current_dir = os.path.dirname(os.path.abspath(__file__))
csv_file_path = os.path.join(current_dir, '../../../测试数据/账号管理/部门管理模块/部门编辑.csv')
class Department_Edit_000x:
tags = ['部门管理功能']
tags = ['部门管理功能' , '后台管理功能']
"""
执行指令:
1.cd 预定系统
......@@ -111,4 +111,7 @@ class Department_Edit_000x:
(By.XPATH, f"//div[@class='currentDep']//div[contains(text(),'{department_user}')]"), wd)
CHECK_POINT("检查部门负责人查询结果", department_user in notify_text)
safe_click((By.XPATH, "//div[@aria-label='编 辑']//i[@class='el-dialog__close el-icon el-icon-close']"), wd)
sleep(2)
\ No newline at end of file
sleep(2)
if name == '部门编辑_009':
wd.refresh()
\ No newline at end of file
......@@ -20,7 +20,7 @@ class Main_Department_Manage_000x:
1.cd 预定系统
2.hytest --report_title 部门主流程测试报告 --test 部门主流程_0**
"""
tags = ['部门管理功能']
tags = ['部门管理功能' , '后台管理功能']
ddt_cases = read_csv_data(csv_file_path)
def teststeps(self):
......@@ -104,4 +104,7 @@ class Main_Department_Manage_000x:
INFO(f"部门删除提示文本:{notify_text}")
# 检查删除提示文本是否与预期相符
CHECK_POINT("部门删除提示文本", notify_text == check_del_text)
sleep(3)
\ No newline at end of file
sleep(3)
if name == '部门主流程_005':
wd.refresh()
\ No newline at end of file
......@@ -15,7 +15,7 @@ current_dir = os.path.dirname(os.path.abspath(__file__))
csv_file_path = os.path.join(current_dir, '../../../测试数据/账号管理/部门管理模块/部门新增.csv')
class Department_Add_000x:
tags = ['部门管理功能']
tags = ['部门管理功能' , '后台管理功能']
"""
执行指令:
1.cd 预定系统
......@@ -86,4 +86,7 @@ class Department_Add_000x:
"Department_Add", f"{name}部门新增")
# 检查新增提示文本是否与预期相符
INFO(f"检查清除数据的提示文本:{notify_text}")
CHECK_POINT("校验清除数据提示文本", notify_text == check_add_text)
\ No newline at end of file
CHECK_POINT("校验清除数据提示文本", notify_text == check_add_text)
if name == '部门新增_002':
wd.refresh()
\ No newline at end of file
......@@ -15,7 +15,7 @@ current_dir = os.path.dirname(os.path.abspath(__file__))
csv_file_path = os.path.join(current_dir, '../../../测试数据/账号管理/部门管理模块/部门删除.csv')
class Department_Add_000x:
tags = ['部门管理功能']
tags = ['部门管理功能' , '后台管理功能']
"""
执行指令:
1.cd 预定系统
......@@ -94,4 +94,7 @@ class Department_Add_000x:
sleep(2)
STEP(2, "检查提示信息")
notify_text = get_notify_text(wd, (By.XPATH,"//p[@class='el-message__content']"),"Department_Manage", "Department_Delete", f"{name}部门不勾选批量删除")
CHECK_POINT("不勾选部门进行批量删除提示文本", notify_text == check_del_text)
\ No newline at end of file
CHECK_POINT("不勾选部门进行批量删除提示文本", notify_text == check_del_text)
if name == '部门删除_003':
wd.refresh()
\ No newline at end of file
......@@ -15,7 +15,7 @@ current_dir = os.path.dirname(os.path.abspath(__file__))
csv_file_path = os.path.join(current_dir, '../../../测试数据/账号管理/部门管理模块/部门查询.csv')
class Department_Query_000x:
tags = ['部门管理功能']
tags = ['部门管理功能' , '后台管理功能']
"""
执行指令:
1.cd 预定系统
......@@ -103,4 +103,7 @@ class Department_Query_000x:
# 获取删除后的通知文本并与预期比较
notify_text = get_notify_text(wd, (By.XPATH,"//p[@class='el-message__content']"),"Department_Manage", "Department_Query", f"{name}删除部门数据")
CHECK_POINT("部门删除提示", notify_text == "删除成功")
INFO(f"检查CPU使用率:{get_cpu_usage()}")
\ No newline at end of file
INFO(f"检查CPU使用率:{get_cpu_usage()}")
if name == '部门查询_006':
wd.refresh()
\ No newline at end of file
......@@ -9,6 +9,9 @@ sys.path.append(预定系统_path)
from 预定系统.Base.base import *
def suite_setup():
STEP(1, "初始化浏览器")
browser_init()
wd = GSTORE['wd']
admin_login()
enter_the_backend()
......
此差异已折叠。
此差异已折叠。
此差异已折叠。
server_addr: "ngrok.ubsyun.com:9083"
trust_host_root_certs: false
tunnels:
nat1:
remote_port: 31133
proto:
tcp: "192.168.1.166:80"
\ No newline at end of file
ngrok -config=ngrok.cfg start nat1
\ No newline at end of file
此差异已折叠。
此差异已折叠。
import schedule
import threading
import queue
from Base.base import *
import time
import logging
# 配置日志记录器,仅输出到控制台
logging.basicConfig(
level=logging.DEBUG,
format='%(asctime)s - %(levelname)s - %(message)s',
level=logging.DEBUG, # 设置日志级别为 DEBUG
format='%(asctime)s - %(levelname)s - %(message)s', # 日志格式:时间 - 日志级别 - 消息
handlers=[
logging.StreamHandler()
logging.StreamHandler() # 将日志输出到控制台
]
)
"""
执行指令:
打开终端1:
1.cd 预定系统
2.python ./定时执行功能测试.py
打开终端2:
1.python -m http.server 80 --directory reports (可以让同网段下的电脑通过使用测试主机的IP地址+测试报告文件进行访问查看)
"""
# 创建一个任务队列,用于存储待处理的任务
task_queue = queue.Queue()
def run_task(task, *args, **kwargs):
# 将任务及其参数放入任务队列
task_queue.put((task, args, kwargs))
logging.debug(f"任务已加入队列: {task.__name__} with args: {args} and kwargs: {kwargs}")
def worker():
# 工作线程的主循环
while True:
# 从任务队列中获取任务及其参数
task, args, kwargs = task_queue.get()
try:
# 记录任务开始执行的时间
logging.debug(f"开始执行任务: {task.__name__} with args: {args} and kwargs: {kwargs}")
# 执行任务并获取结果
result = task(*args, **kwargs)
# 如果任务有返回结果,记录日志
if result:
logging.info(result)
except Exception as e:
# 捕获任务执行过程中发生的任何异常并记录错误日志
logging.error(f"执行任务时发生错误: {e}", exc_info=True)
finally:
# 无论任务是否成功执行,都标记任务已完成
task_queue.task_done()
# 记录任务完成的时间
logging.debug(f"任务完成: {task.__name__}")
def start_workers(num_workers):
# 启动指定数量的工作线程
for _ in range(num_workers):
# 创建一个新的工作线程,目标函数为 worker,设置为守护线程
threading.Thread(target=worker, daemon=True).start()
# 启动3个工作线程
start_workers(3)
# 每天凌晨 0 点执行任务
schedule.every().day.at("09:30").do(run_automation_test, report_title="用户管理模块_测试报告", report_url_prefix="http://192.168.1.166", test_case="用户管理功能")
schedule.every().day.at("09:40").do(run_automation_test, report_title="部门管理模块_测试报告", report_url_prefix="http://192.168.1.166", test_case="部门管理功能")
# 定义每天定时执行的任务
# 每天早上08:10执行后台系统设置功能测试
schedule.every().day.at("16:11").do(run_task, run_automation_test, report_title="预定系统_后台管理功能_测试报告", report_url_prefix="http://nat.ubainsyun.com:31133", test_case="后台管理功能")
try:
# 无限循环,持续检查并执行计划任务
......@@ -32,7 +67,4 @@ except KeyboardInterrupt:
logging.info("Scheduler interrupted by user.")
except Exception as e:
# 捕获其他未预期的异常
logging.error(f"Unexpected error: {e}")
#
# if __name__ == "__main__":
# get_reportfile_send_dingding("用户管理模块_测试报告", "http://192.168.1.166")
\ No newline at end of file
logging.error(f"Unexpected error: {e}", exc_info=True)
\ No newline at end of file
name,conference_name,message_name,book_start_time,book_end_time,book_check_text
会议状态设置_001,产研中心会议室,哈哈哈哈会议,16:00,16:15,预定成功
\ No newline at end of file
......@@ -9,5 +9,4 @@ name,conference_name,del_type,check_text
会议室删除_008,测试会议室6,批量删除,删除成功
会议室删除_009,测试会议室7,批量删除,删除成功
会议室删除_010,测试会议室8,批量删除,删除成功
会议室删除_011,测试会议室9,批量删除,删除成功
会议室删除_012,测试会议室100,单个删除,删除成功
\ No newline at end of file
会议室删除_011,测试会议室9,批量删除,删除成功
\ No newline at end of file
......@@ -3,4 +3,4 @@ name,conference_name,query_type,query_text
会议室查询_002,测试会议室2,精确查询,测试会议室2
会议室查询_003,测试会议室3,精确查询,测试会议室3
会议室查询_004,测试会议室4,分页查询,测试会议室4
会议室查询_005,,错误查询,暂无数据
\ No newline at end of file
会议室查询_005,,错误查询,哈哈哈哈
\ No newline at end of file
name,conference_name,new_conference_name,conference_function,new_conference_function,conference_capacity,new_conference_capacity,max_book_day,open_department,check_text
会议室编辑_001,产研中心会议室,营销中心会议室,Test01,Test02,2,50,10,测试,修改成功
会议室编辑_002,营销中心会议室,研发中心会议室,Test02,Test03,50,60,20,全部开放,修改成功
会议室编辑_003,研发中心会议室,产研中心会议室,Test03,Test01,3,50,10,测试,修改成功
\ No newline at end of file
会议室编辑_003,研发中心会议室,产研中心会议室,Test03,Test01,3,50,10,测试,修改成功
会议室编辑_004,产研中心会议室,产研中心会议室,Test01,Test01,50,50,20,全部开放,修改成功
\ No newline at end of file
......@@ -6,8 +6,8 @@ name,function_name,del_type,check_text
功能删除_005,功能测试,不勾选数据,请先选择功能
功能删除_006,测试功能测试功能测试功能测试功能测试功能,单个删除,删除成功
功能删除_007,测试功能AB,单个删除,删除成功
功能删除_008,测试功能12,单个删除,删除成功
功能删除_009,测试功能@@,单个删除,删除成功
功能删除_010,功能测试12,单个删除,删除成功
功能删除_011,###,单个删除,删除成功
功能删除_012,功能测试,批量删除,删除成功
\ No newline at end of file
功能删除_008,测试功能@@,单个删除,删除成功
功能删除_010,###,单个删除,删除成功
功能删除_011,功能测试,批量删除,删除成功
功能删除_012,123,单个删除,删除成功
功能删除_013,测试功能12,单个删除,删除成功
\ No newline at end of file
......@@ -19,5 +19,4 @@ name,function_name,function_detail,function_type,check_text
功能新增_018,功能测试8,功能测试8,SMC,添加成功
功能新增_019,功能测试9,功能测试9,语音转录,添加成功
功能新增_020,功能测试10,功能测试10,腾讯会议,添加成功
功能新增_021,功能测试11,功能测试11,华为云会议,添加成功
功能新增_022,功能测试12,功能测试12,SMC3.0,添加成功
\ No newline at end of file
功能新增_021,功能测试11,功能测试11,华为云会议,添加成功
\ No newline at end of file
name,function_name,query_type
功能查询_001,功能查询专用,精确查询
功能查询_002,功能查询,模糊查询
功能查询_003,12,错误查询
功能查询_004,功能查询专用,分页查询
\ No newline at end of file
功能查询_003,12,错误查询
\ No newline at end of file
......@@ -14,10 +14,9 @@ name,function_name,new_function_name,new_function_detail,function_type,check_tex
功能编辑_013,功能编辑专用1,功能编辑专用1,123,普通,修改成功
功能编辑_014,功能编辑专用1,功能编辑专用1,###,普通,修改成功
功能编辑_015,功能编辑专用1,功能编辑专用1,功能编辑专用,普通,修改成功
功能编辑_016,功能编辑专用2,功能编辑专用2,功能编辑专用2,普通,该功能已存在
功能编辑_017,功能编辑专用1,功能编辑专用1,功能编辑专用1,WeLink,修改成功
功能编辑_018,功能编辑专用1,功能编辑专用1,功能编辑专用1,SMC,修改成功
功能编辑_019,功能编辑专用1,功能编辑专用1,功能编辑专用1,语音转录,修改成功
功能编辑_020,功能编辑专用1,功能编辑专用1,功能编辑专用1,腾讯会议,修改成功
功能编辑_021,功能编辑专用1,功能编辑专用1,功能编辑专用1,华为云会议,修改成功
功能编辑_022,功能编辑专用1,功能编辑专用1,功能编辑专用1,SMC3.0,修改成功
\ No newline at end of file
功能编辑_016,功能编辑专用1,功能编辑专用1,功能编辑专用1,WeLink,修改成功
功能编辑_017,功能编辑专用1,功能编辑专用1,功能编辑专用1,SMC,修改成功
功能编辑_018,功能编辑专用1,功能编辑专用1,功能编辑专用1,语音转录,修改成功
功能编辑_019,功能编辑专用1,功能编辑专用1,功能编辑专用1,腾讯会议,修改成功
功能编辑_020,功能编辑专用1,功能编辑专用1,功能编辑专用1,华为云会议,修改成功
功能编辑_021,功能编辑专用1,功能编辑专用,功能编辑专用,SMC3.0,修改成功
\ No newline at end of file
name,check_text
系统设置_001,正常启动
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论