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

实现通过JSON数据中对应的name值来区分测试用例数量。

上级 6d16de4c
def teststeps(self):
"""
执行测试步骤函数,主要用于执行读取的测试用例并进行会议模板模块功能测试操作
"""
# 从全局存储中获取webdriver对象
wd = GSTORE['wd']
# 先清空Excel文件中的测试结果和日志截图
clear_columns_in_xlsx(xlsx_file_path, "会议审批", ["测试结果", "日志截图"])
# 读取Excel文件中的测试用例数据
ddt_cases = read_xlsx_data(xlsx_file_path, "会议审批")
# 遍历 ddt_cases 并获取每一个 JSON 对象
for case in ddt_cases:
# 为每个测试用例添加一个 name 字段
case_name = case.get('case_name', f"Case_{ddt_cases.index(case) + 1}")
case['name'] = case_name
# 创建审批会议
meeting_message("审批会议室", "普通会议", "审批测试会议","长安大学", wd)
for step in case:
print(f"当前步骤: {step}")
# 先赋值
locator_type = get_by_enum(case.get('locator_type'))
locator_value = case.get('locator_value')
element_type = case.get('element_type')
element_value = case.get('element_value')
expented_result = case.get('expented_result')
# 判断页面功能类型
if case.get("page") == "ApprovalInitiate":
if element_type == "input":
safe_send_keys((locator_type, locator_value), element_value, wd)
sleep(1)
elif element_type == "click":
safe_click((locator_type, locator_value), wd)
sleep(2)
elif element_type == "getTips":
notify_text = get_notify_text(wd, (locator_type, locator_value), "Message_Template", "Template_Edit", "长安审批测试")
INFO(f"提示信息为:{notify_text}")
CHECK_POINT("编辑测试判断是否正确", expented_result in notify_text)
SELENIUM_LOG_SCREEN(wd, "50")
elif element_type == "function":
print(f"这是element_value的值:{element_value}")
# 退出登录,并调用用户登录函数
safe_click((By.XPATH, "//img[@title='退出登录']"), wd)
sleep(1)
wd.refresh()
user_login(element_value[0],element_value[1])
sleep(2)
# 调用审批会议状态设置函数
approval_status_control("审批测试会议", element_value[2], wd)
sleep(1)
# 退出登录
safe_click((By.XPATH, "//img[@title='退出登录']"), wd)
wd.refresh()
# 登录与退出操作频繁,到登录页后存在一个缓存界面,可以点击退出按钮
quit_element = wd.find_element(By.XPATH, "//div[@class='operat']//span//img")
if quit_element != "":
quit_element.click()
# 调用用户登录函数,登录普通用户
user_login("admin@PT","Ubains@4321")
# 进入会议审批模块
safe_click((By.XPATH, "//span[contains(text(),'会议审批')]"), wd)
sleep(1)
\ No newline at end of file
...@@ -396,11 +396,16 @@ class Mqtt: ...@@ -396,11 +396,16 @@ class Mqtt:
"endTime": config['endTime'], "endTime": config['endTime'],
"companyNumber": config['companyNumber'], "companyNumber": config['companyNumber'],
"participantList": ["JiaoJiao", "JiaYu", "DuiFangZhengZaiZhangTouFa", "DuoTangMaLaBan", "DaLi", "500mlLingDu", "tt.", "wilbur", "q", "Test40", "Test41", "Test42", "Test43", "Test44", "Test45", "Test46", "Test47", "Test48", "Test49", "participantList": ["JiaoJiao", "JiaYu", "DuiFangZhengZaiZhangTouFa", "DuoTangMaLaBan", "DaLi", "500mlLingDu", "tt.", "wilbur", "q", "Test40", "Test41", "Test42", "Test43", "Test44", "Test45", "Test46", "Test47", "Test48", "Test49",
"Test50", "Test51", "Test52", "Test53", "Test54", "Test55", "Test56", "Test57", "Test58", "Test59", "Test50", "Test51", "Test52", "Test53", "Test54", "Test55", "Test56", "Test57", "Test58", "Test59",
"Test60", "Test61", "Test62", "Test63", "Test64", "Test65", "Test66", "Test67", "Test68", "Test69", "Test60", "Test61", "Test62", "Test63", "Test64", "Test65", "Test66", "Test67", "Test68", "Test69",
"Test70", "Test71", "Test72", "Test73", "Test74", "Test75", "Test76", "Test77", "Test78", "Test79", "Test70", "Test71", "Test72", "Test73", "Test74", "Test75", "Test76", "Test77", "Test78", "Test79",
"Test80", "Test81", "Test82", "Test83", "Test84", "Test85", "Test86", "Test87", "Test88", "Test89", "Test80", "Test81", "Test82", "Test83", "Test84", "Test85", "Test86", "Test87", "Test88", "Test89",
"Test90"], "Test90", "Test91", "Test92", "Test93", "Test94", "Test95", "Test96", "Test97", "Test98", "Test99",
"Test100", "Test101", "Test102", "Test103", "Test104", "Test105", "Test106", "Test107", "Test108", "Test109",
"Test110", "Test111", "Test112", "Test113", "Test114", "Test115", "Test116", "Test117", "Test118", "Test119",
"Test120", "Test121", "Test122", "Test123", "Test124", "Test125", "Test126", "Test127", "Test128", "Test129",
"Test130", "Test131", "Test132", "Test133", "Test134", "Test135", "Test136", "Test137", "Test138", "Test139",
"Test140"],
"signInBeforeMinutes": config['signInBeforeMinutes'], "signInBeforeMinutes": config['signInBeforeMinutes'],
"signEndTime": config['signEndTime'], "signEndTime": config['signEndTime'],
......
...@@ -17,6 +17,7 @@ from selenium.common import ElementNotInteractableException ...@@ -17,6 +17,7 @@ from selenium.common import ElementNotInteractableException
from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.keys import Keys
from urllib.parse import urlencode from urllib.parse import urlencode
from datetime import datetime from datetime import datetime
# import datetime # import datetime
# 获取当前脚本的绝对路径 # 获取当前脚本的绝对路径
...@@ -1558,6 +1559,9 @@ def meeting_message(meeting_room_name, message_type, message_name, project_type, ...@@ -1558,6 +1559,9 @@ def meeting_message(meeting_room_name, message_type, message_name, project_type,
返回: 返回:
无返回值。 无返回值。
""" """
print("到这了")
# 切换至会议室列表界面,开始新一轮的审批会议创建
safe_click((By.XPATH, "//li[@class='meeting_list_li']//span[contains(text(),'会议室列表')]"), wd)
# 先搜索会议室 # 先搜索会议室
safe_click((By.XPATH, "//i[@class='el-collapse-item__arrow el-icon-arrow-right']"), wd) safe_click((By.XPATH, "//i[@class='el-collapse-item__arrow el-icon-arrow-right']"), wd)
sleep(1) sleep(1)
......
...@@ -263,4 +263,6 @@ ...@@ -263,4 +263,6 @@
69. 2025-03-19 69. 2025-03-19
- 处理datetime类重复导入的问题,调整get_current_time_formatted函数相关的代码。 - 处理datetime类重复导入的问题,调整get_current_time_formatted函数相关的代码。
70. 2025-03-20 70. 2025-03-20
- 补充clear_columns_in_xlsx函数实现在读取测试用例前,先将测试结果和日志截图清空。 - 补充clear_columns_in_xlsx函数实现在读取测试用例前,先将测试结果和日志截图清空。
\ No newline at end of file 71. 2025-03-21
- 实现通过JSON数据中对应的name值来区分测试用例数量。
\ No newline at end of file
...@@ -13,74 +13,76 @@ from 预定系统.Base.base import * ...@@ -13,74 +13,76 @@ from 预定系统.Base.base import *
# 构建XLSX文件的绝对路径 # 构建XLSX文件的绝对路径
xlsx_file_path = os.path.join(预定系统_path, '测试数据', '长安大学测试用例.xlsx') xlsx_file_path = os.path.join(预定系统_path, '测试数据', '长安大学测试用例.xlsx')
class MessageApproval: class ChangAnMessageApproval:
tags = ['长安大学审批测试'] tags = ['长安大学取消审批测试']
""" """
执行指令是: 执行指令是:
1.cd 预定系统 1.cd 预定系统
2.hytest --report_title 长安大学审批测试报告 --report_url_prefix http://nat.ubainsyun.com:31133 --tag 长安大学审批测试 2.hytest --report_title 长安大学取消审批测试报告 --report_url_prefix http://nat.ubainsyun.com:31133 --tag 长安大学取消审批测试
""" """
ddt_cases = read_xlsx_data(xlsx_file_path, sheet_name='会议审批')
def teststeps(self): def teststeps(self):
""" """
执行测试步骤函数,主要用于执行读取的测试用例并进行会议模板模块功能测试操作 执行测试步骤函数,主要用于执行读取的测试用例并进行会议模板模块功能测试操作
""" """
# 从全局存储中获取webdriver对象 # 从全局存储中获取webdriver对象
wd = GSTORE['wd'] wd = GSTORE['wd']
# 先清空Excel文件中的测试结果和日志截图 name = self.name
clear_columns_in_xlsx(xlsx_file_path, "会议审批", ["测试结果", "日志截图"]) # 创建审批会议
# 读取Excel文件中的测试用例数据 meeting_message("审批会议室", "普通会议", "审批测试会议", "长安大学", wd)
ddt_cases = read_xlsx_data(xlsx_file_path, "会议审批")
# 遍历 ddt_cases 并获取每一个 JSON 对象 for step in self.para:
for case in ddt_cases: # 赋值元素定位类型,并将字符串转为Enum类型
# 创建审批会议 locator_type = get_by_enum(step.get('locator_type'))
meeting_message("审批会议室", "普通会议", "审批测试会议","长安大学", wd) # 赋值元素值
for step in case: locator_value = step.get('locator_value')
print(f"当前步骤: {step}") # 赋值元素类型,例如:click点击、input输入框等
# 先赋值 element_type = step.get('element_type')
locator_type = get_by_enum(step.get('locator_type')) # 赋值元素值,例如输入框的输入值
locator_value = step.get('locator_value') element_value = step.get('element_value')
element_type = step.get('element_type') # 赋值预期结果
element_value = step.get('element_value') expented_result = step.get('expented_result')
expented_result = step.get('expented_result')
# 判断页面功能类型 # 判断页面功能类型
if step.get("page") == "ApprovalInitiate": if step.get("page") == "ApprovalInitiate":
if element_type == "input": if element_type == "input":
safe_send_keys((locator_type, locator_value), element_value, wd) safe_send_keys((locator_type, locator_value), element_value, wd)
sleep(1) sleep(1)
elif element_type == "click": elif element_type == "click":
safe_click((locator_type, locator_value), wd) safe_click((locator_type, locator_value), wd)
sleep(2) sleep(2)
elif element_type == "getTips": elif element_type == "getTips":
notify_text = get_notify_text(wd, (locator_type, locator_value), "Message_Template", "Template_Edit", "长安审批测试") notify_text = get_notify_text(wd, (locator_type, locator_value), "Message_Template",
INFO(f"提示信息为:{notify_text}") "Template_Edit", "长安审批测试")
CHECK_POINT("编辑测试判断是否正确", expented_result in notify_text) INFO(f"提示信息为:{notify_text}")
SELENIUM_LOG_SCREEN(wd, "50") CHECK_POINT("编辑测试判断是否正确", expented_result in notify_text)
SELENIUM_LOG_SCREEN(wd, "50")
elif element_type == "function": elif element_type == "function":
print(f"这是element_value的值:{element_value}") print(f"这是element_value的值:{element_value}")
# 退出登录,并调用用户登录函数 # 退出登录,并调用用户登录函数
safe_click((By.XPATH, "//img[@title='退出登录']"), wd) safe_click((By.XPATH, "//img[@title='退出登录']"), wd)
sleep(1) sleep(1)
wd.refresh() wd.refresh()
user_login(element_value[0],element_value[1]) user_login(element_value[0], element_value[1])
sleep(2) sleep(2)
# 调用审批会议状态设置函数 # 调用审批会议状态设置函数
approval_status_control("审批测试会议", element_value[2], wd) approval_status_control("审批测试会议", element_value[2], wd)
sleep(1) sleep(1)
# 退出登录 # 退出登录
safe_click((By.XPATH, "//img[@title='退出登录']"), wd) safe_click((By.XPATH, "//img[@title='退出登录']"), wd)
wd.refresh() wd.refresh()
# 登录与退出操作频繁,到登录页后存在一个缓存界面,可以点击退出按钮 # 登录与退出操作频繁,到登录页后存在一个缓存界面,可以点击退出按钮
quit_element = wd.find_element(By.XPATH, "//div[@class='operat']//span//img") quit_element = wd.find_element(By.XPATH, "//div[@class='operat']//span//img")
if quit_element != "": if quit_element != "":
quit_element.click() quit_element.click()
# 调用用户登录函数,登录普通用户 # 调用用户登录函数,登录普通用户
user_login("admin@PT","Ubains@4321") user_login("admin@PT", "Ubains@4321")
# 进入会议审批模块 # 进入会议审批模块
safe_click((By.XPATH, "//span[contains(text(),'会议审批')]"), wd) safe_click((By.XPATH, "//span[contains(text(),'会议审批')]"), wd)
sleep(1) sleep(1)
\ No newline at end of file \ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论