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

refactor(预定系统): 重构工商银行项目测试代码

- 删除了多个冗余的 __st__.py 文件
- 合并了会议创建、会议修改等测试用例
- 优化了测试用例的读取和执行逻辑
- 调整了浏览器初始化和登录逻辑
- 移除了不必要的代码和导入
上级 7b4de874
......@@ -921,7 +921,7 @@ def dingding_send_message(latest_report, title, mobile, ding_type):
logging.info(f"钉钉机器人Webhook URL: {final_webhook_url}")
# 调用测试结果获取函数
browser_init("标准版预定系统")
browser_init("兰州中石化项目测试环境")
wd = GSTORE['wd']
# print(latest_report)
test_result = get_test_result(latest_report, wd)
......
import sys
import os
from hytest import *
# 获取 Base 目录的绝对路径,并加入 sys.path
# 获取当前脚本的绝对路径
current_dir = os.path.dirname(os.path.abspath(__file__))
base_dir = os.path.abspath(os.path.join(current_dir, '..', '..', '..', '..', 'Base'))
if base_dir not in sys.path:
print(f"Adding Base directory to sys.path: {base_dir}")
sys.path.insert(0, base_dir)
try:
from base import *
except ModuleNotFoundError as e:
print(f"ModuleNotFoundError: {e}")
# 构建预定系统的绝对路径
预定系统_path = os.path.abspath(os.path.join(current_dir, '..','..'))
# 添加路径
sys.path.append(预定系统_path)
# 导入模块
from 预定系统.Base.base import *
def suite_setup():
STEP(1, "初始化浏览器")
# 初始化浏览器与系统地址
browser_init("工商银行项目生产环境")
user_login("admin", "Admin@88")
sleep(2)
wd = GSTORE['wd']
# 点击【历史记录】按钮进入模块界面
safe_click((By.XPATH, "//span[contains(text(),'历史记录')]"), wd)
sleep(1)
user_login("admin","Admin@88")
def suite_teardown():
wd = GSTORE['wd']
......
import sys
import os
from hytest import *
# 获取 Base 目录的绝对路径,并加入 sys.path
current_dir = os.path.dirname(os.path.abspath(__file__))
base_dir = os.path.abspath(os.path.join(current_dir, '..', '..', '..', '..', 'Base'))
if base_dir not in sys.path:
print(f"Adding Base directory to sys.path: {base_dir}")
sys.path.insert(0, base_dir)
try:
from base import *
except ModuleNotFoundError as e:
print(f"ModuleNotFoundError: {e}")
def suite_setup():
STEP(1, "初始化浏览器")
# 初始化浏览器与系统地址
browser_init("工商银行项目生产环境")
user_login("admin", "Admin@88")
sleep(2)
wd = GSTORE['wd']
# 选择会议室进入创建会议界面
safe_click((By.XPATH, "//li[1]//div[1]//div[2]//span[1]"), wd)
sleep(1)
safe_click((By.XPATH, "//div[normalize-space()='23:55']"), wd)
sleep(1)
# 点击【下一步】按钮
safe_click((By.XPATH, "//div[contains(text(),'下一步')]"), wd)
sleep(1)
def suite_teardown():
wd = GSTORE['wd']
wd.quit()
\ No newline at end of file
import sys
import os
# 兼容 PyInstaller 打包后的路径
if hasattr(sys, '_MEIPASS'):
base_path = sys._MEIPASS
else:
base_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..', '..', '..'))
base_path = os.path.abspath(base_path)
base_base_path = os.path.join(base_path, 'Base')
if base_base_path not in sys.path:
sys.path.insert(0, base_base_path)
from base import *
# 构建XLSX文件的绝对路径
# 获取当前脚本所在的目录
current_dir = os.path.dirname(os.path.abspath(__file__))
xlsx_file_path = os.path.join(current_dir, '..', '..', '..', '..', '测试数据', '会议预定测试用例.xlsx')
# xlsx_file_path = os.path.join(预定系统_path, '测试数据', '会议预定测试用例.xlsx')
class LicensePlateModification:
tags = ['工商银行项目会议修改车牌功能测试']
"""
执行指令是:
1.cd 预定系统
2.hytest --report_title 工商银行项目测试报告 --report_url_prefix http://nat.ubainsyun.com:31133 --tag 工商银行项目会议修改车牌功能测试
"""
ddt_cases = read_xlsx_data(xlsx_file_path, sheet_name='会议修改',case_type="工商银行项目-25-04-01")
# 测试开始前调用clear_columns_in_xlsx函数,将测试用例中的测试结果和日志截图置空
# clear_columns_in_xlsx(xlsx_file_path, sheet_name='会议创建', columns_to_clear=['测试结果', '测试频次', '日志截图'])
def teststeps(self):
"""
执行测试步骤函数,主要用于执行读取的测试用例并进行信息统计模块功能测试操作
"""
# 从全局存储中获取webdriver对象
wd = GSTORE['wd']
name = self.name
for step in self.para:
# 赋值页面类型page
page_type = step.get('page')
# 赋值元素定位类型,并将字符串转为Enum类型
locator_type = get_by_enum(step.get('locator_type'))
# 赋值元素值
locator_value = step.get('locator_value')
# 赋值元素类型,例如:click点击、input输入框等
element_type = step.get('element_type')
# 赋值元素值,例如输入框的输入值
element_value = step.get('element_value')
# 赋值预期结果
expented_result = step.get('expented_result')
INFO(f"页面: {page_type}、元素定位类型: {locator_type}、元素定位值: {locator_value}、元素类型: {element_type}、元素值: {element_value}、预期结果: {expented_result}")
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}")
sleep(2)
CHECK_POINT(f"获取到的提示信息为:{notify_text}", expented_result in notify_text)
SELENIUM_LOG_SCREEN(wd, "50")
elif element_type == "getText":
text = elment_get_text((locator_type, locator_value), wd)
INFO(f"获取到的文本信息为:{text}")
CHECK_POINT(f"获取到的文本信息为:{text}", expented_result in text)
SELENIUM_LOG_SCREEN(wd, "50")
\ No newline at end of file
import sys
import os
from hytest import *
# 获取 Base 目录的绝对路径,并加入 sys.path
current_dir = os.path.dirname(os.path.abspath(__file__))
base_dir = os.path.abspath(os.path.join(current_dir, '..', '..', '..', '..', 'Base'))
if base_dir not in sys.path:
print(f"Adding Base directory to sys.path: {base_dir}")
sys.path.insert(0, base_dir)
try:
from base import *
except ModuleNotFoundError as e:
print(f"ModuleNotFoundError: {e}")
def suite_setup():
STEP(1, "初始化浏览器")
# 初始化浏览器与系统地址
browser_init("工商银行项目生产环境")
user_login("admin", "Admin@88")
sleep(2)
wd = GSTORE['wd']
# 选择会议室进入创建会议界面
safe_click((By.XPATH, "//li[1]//div[1]//div[2]//span[1]"), wd)
sleep(1)
safe_click((By.XPATH, "//div[normalize-space()='23:55']"), wd)
sleep(1)
# 点击【下一步】按钮
safe_click((By.XPATH, "//div[contains(text(),'下一步')]"), wd)
sleep(1)
def suite_teardown():
wd = GSTORE['wd']
wd.quit()
\ No newline at end of file
import sys
import os
from hytest import *
# 获取 Base 目录的绝对路径,并加入 sys.path
current_dir = os.path.dirname(os.path.abspath(__file__))
base_dir = os.path.abspath(os.path.join(current_dir, '..', '..', '..', '..', 'Base'))
if base_dir not in sys.path:
print(f"Adding Base directory to sys.path: {base_dir}")
sys.path.insert(0, base_dir)
try:
from base import *
except ModuleNotFoundError as e:
print(f"ModuleNotFoundError: {e}")
def suite_setup():
STEP(1, "初始化浏览器")
# 初始化浏览器与系统地址
browser_init("工商银行项目生产环境")
user_login("admin", "Admin@88")
sleep(2)
wd = GSTORE['wd']
# 点击后台管理
safe_click((By.XPATH, "//img[@title='后台系统']"), wd)
sleep(1)
# 展开会议室管理
safe_click((By.XPATH, "//span[contains(text(),'会议室管理')]"), wd)
sleep(1)
# 点击【会议室管理】进入
safe_click((By.XPATH, "//li[contains(text(),'会议室管理')]"), wd)
sleep(1)
def suite_teardown():
wd = GSTORE['wd']
wd.quit()
\ No newline at end of file
import sys
import os
# 兼容 PyInstaller 打包后的路径
if hasattr(sys, '_MEIPASS'):
base_path = sys._MEIPASS
else:
base_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..', '..', '..'))
base_path = os.path.abspath(base_path)
base_base_path = os.path.join(base_path, 'Base')
if base_base_path not in sys.path:
sys.path.insert(0, base_base_path)
from base import *
# 构建XLSX文件的绝对路径
# 获取当前脚本所在的目录
current_dir = os.path.dirname(os.path.abspath(__file__))
xlsx_file_path = os.path.join(current_dir, '..', '..', '..', '..', '测试数据', '会议预定测试用例.xlsx')
# xlsx_file_path = os.path.join(预定系统_path, '测试数据', '会议预定测试用例.xlsx')
class MeetingRoomSynchronization:
tags = ['工商银行项目会议室同步功能测试']
"""
执行指令是:
1.cd 预定系统
2.hytest --report_title 工商银行项目测试报告 --report_url_prefix http://nat.ubainsyun.com:31133 --tag 工商银行项目会议室同步功能测试
"""
ddt_cases = read_xlsx_data(xlsx_file_path, sheet_name='会议室管理',case_type="工商银行项目-25-04-01")
# 测试开始前调用clear_columns_in_xlsx函数,将测试用例中的测试结果和日志截图置空
# clear_columns_in_xlsx(xlsx_file_path, sheet_name='会议创建', columns_to_clear=['测试结果', '测试频次', '日志截图'])
def teststeps(self):
"""
执行测试步骤函数,主要用于执行读取的测试用例并进行信息统计模块功能测试操作
"""
# 从全局存储中获取webdriver对象
wd = GSTORE['wd']
name = self.name
for step in self.para:
# 赋值页面类型page
page_type = step.get('page')
# 赋值元素定位类型,并将字符串转为Enum类型
locator_type = get_by_enum(step.get('locator_type'))
# 赋值元素值
locator_value = step.get('locator_value')
# 赋值元素类型,例如:click点击、input输入框等
element_type = step.get('element_type')
# 赋值元素值,例如输入框的输入值
element_value = step.get('element_value')
# 赋值预期结果
expented_result = step.get('expented_result')
INFO(f"页面: {page_type}、元素定位类型: {locator_type}、元素定位值: {locator_value}、元素类型: {element_type}、元素值: {element_value}、预期结果: {expented_result}")
if element_type == "click":
if "同步" in locator_value:
safe_click((locator_type, locator_value), wd)
sleep(90)
else:
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}")
sleep(2)
CHECK_POINT(f"获取到的提示信息为:{notify_text}", expented_result in notify_text)
SELENIUM_LOG_SCREEN(wd, "50")
elif element_type == "getText":
text = elment_get_text((locator_type, locator_value), wd)
INFO(f"获取到的文本信息为:{text}")
CHECK_POINT(f"获取到的文本信息为:{text}", expented_result in text)
SELENIUM_LOG_SCREEN(wd, "50")
\ No newline at end of file
import sys
import os
# 兼容 PyInstaller 打包后的路径
if hasattr(sys, '_MEIPASS'):
base_path = sys._MEIPASS
else:
base_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..', '..', '..'))
base_path = os.path.abspath(base_path)
base_base_path = os.path.join(base_path, 'Base')
if base_base_path not in sys.path:
sys.path.insert(0, base_base_path)
from base import *
# 构建XLSX文件的绝对路径
# 获取当前脚本所在的目录
# 获取当前脚本的绝对路径
current_dir = os.path.dirname(os.path.abspath(__file__))
xlsx_file_path = os.path.join(current_dir, '..', '..', '..', '..', '测试数据', '会议预定测试用例.xlsx')
# xlsx_file_path = os.path.join(预定系统_path, '测试数据', '会议预定测试用例.xlsx')
# 构建预定系统的绝对路径 (修改路径构建方式)
预定系统_path = os.path.abspath(os.path.join(current_dir, '..', '..', '..'))
# 添加路径
sys.path.append(预定系统_path)
# 导入模块
from 预定系统.Base.base import *
# 构建XLSX文件的绝对路径 (修正路径)
xlsx_file_path = os.path.join(预定系统_path, '测试数据', '会议预定测试用例.xlsx')
class LicensePlateFilling:
tags = ['工商银行项目会议预定车牌功能测试']
tags = ['工商银行项目测试']
"""
执行指令是:
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='会议创建',case_type="工商银行项目-25-04-01")
ddt_cases = read_xlsx_data(xlsx_file_path, case_type="工商银行项目-25-04-01")
# 测试开始前调用clear_columns_in_xlsx函数,将测试用例中的测试结果和日志截图置空
# clear_columns_in_xlsx(xlsx_file_path, sheet_name='会议创建', columns_to_clear=['测试结果', '测试频次', '日志截图'])
......@@ -39,6 +32,10 @@ class LicensePlateFilling:
wd = GSTORE['wd']
name = self.name
# 刷新页面
wd.refresh()
sleep(3)
for step in self.para:
# 赋值页面类型page
page_type = step.get('page')
......@@ -56,10 +53,27 @@ class LicensePlateFilling:
if element_type == "click":
safe_click((locator_type, locator_value), wd)
sleep(2)
SELENIUM_LOG_SCREEN(wd, "75")
if locator_value == "//div[@class='handle']//button[1]":
wd.refresh()
sleep(5)
else:
sleep(2)
elif element_type == "input":
safe_send_keys((locator_type, locator_value), element_value, wd)
sleep(1)
send_keyboard((locator_type, locator_value), wd)
SELENIUM_LOG_SCREEN(wd, "75")
sleep(5)
elif element_type == "login":
sleep(2)
INFO(f"开始登录,账号为:{element_value[0]},密码为:{element_value[1]}")
user_login(element_value[0], element_value[1])
SELENIUM_LOG_SCREEN(wd, "75")
sleep(2)
elif element_type == "getTips":
notify_text = get_notify_text(wd, (locator_type, locator_value))
INFO(f"获取到的提示信息为:{notify_text}")
......
import sys
import os
# 兼容 PyInstaller 打包后的路径
if hasattr(sys, '_MEIPASS'):
base_path = sys._MEIPASS
else:
base_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..', '..', '..'))
base_path = os.path.abspath(base_path)
base_base_path = os.path.join(base_path, 'Base')
if base_base_path not in sys.path:
sys.path.insert(0, base_base_path)
from base import *
# 构建XLSX文件的绝对路径
# 获取当前脚本所在的目录
current_dir = os.path.dirname(os.path.abspath(__file__))
xlsx_file_path = os.path.join(current_dir, '..', '..', '..', '..', '测试数据', '会议预定测试用例.xlsx')
# xlsx_file_path = os.path.join(预定系统_path, '测试数据', '会议预定测试用例.xlsx')
class AccountManagement:
tags = ['工商银行OA组织架构同步']
"""
执行指令是:
1.cd 预定系统
2.hytest --report_title 工商银行项目测试报告 --report_url_prefix http://nat.ubainsyun.com:31133 --tag 工商银行OA组织架构同步
"""
ddt_cases = read_xlsx_data(xlsx_file_path, sheet_name='账号管理',case_type="工商银行项目-25-04-01")
# 测试开始前调用clear_columns_in_xlsx函数,将测试用例中的测试结果和日志截图置空
# clear_columns_in_xlsx(xlsx_file_path, sheet_name='账号管理', columns_to_clear=['测试结果', '测试频次', '日志截图'])
def teststeps(self):
"""
执行测试步骤函数,主要用于执行读取的测试用例并进行信息统计模块功能测试操作
"""
# 从全局存储中获取webdriver对象
wd = GSTORE['wd']
name = self.name
for step in self.para:
# 赋值页面类型page
page_type = step.get('page')
# 赋值元素定位类型,并将字符串转为Enum类型
locator_type = get_by_enum(step.get('locator_type'))
# 赋值元素值
locator_value = step.get('locator_value')
# 赋值元素类型,例如:click点击、input输入框等
element_type = step.get('element_type')
# 赋值元素值,例如输入框的输入值
element_value = step.get('element_value')
# 赋值预期结果
expented_result = step.get('expented_result')
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)
SELENIUM_LOG_SCREEN(wd, "50")
elif element_type == "getText":
text = elment_get_text((locator_type, locator_value), wd)
INFO(f"获取到的文本信息为:{text}")
CHECK_POINT(f"获取到的文本信息为:{text}", expented_result in text)
SELENIUM_LOG_SCREEN(wd, "50")
\ No newline at end of file
import sys
import os
from hytest import *
# 获取 Base 目录的绝对路径,并加入 sys.path
current_dir = os.path.dirname(os.path.abspath(__file__))
base_dir = os.path.abspath(os.path.join(current_dir, '..', '..', '..', '..', 'Base'))
if base_dir not in sys.path:
print(f"Adding Base directory to sys.path: {base_dir}")
sys.path.insert(0, base_dir)
try:
from base import *
except ModuleNotFoundError as e:
print(f"ModuleNotFoundError: {e}")
def suite_setup():
STEP(1, "初始化浏览器")
# 初始化浏览器与系统地址
browser_init("工商银行项目生产环境")
user_login("admin", "Admin@686868")
sleep(2)
wd = GSTORE['wd']
# 进入后台管理界面
safe_click((By.XPATH, "//img[@title='后台系统']"), wd)
sleep(2)
# 展开账号管理模块
safe_click((By.XPATH, "//span[contains(text(),'账号管理')]"), wd)
def suite_teardown():
wd = GSTORE['wd']
wd.quit()
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论