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

调试定时任务执行后钉钉消息没有发送的问题。将定时任务与测试报告文件获取封装成函数进行调用,方便后续维护管理。目前调试发现定时任务执行别的脚本时会出现异常问题,需要进一步排查。

上级 9cdef635
此差异已折叠。
import csv import csv
import glob
import re import re
import time from trio import current_time
from webdriver_manager.chrome import ChromeDriverManager from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service as ChromeService from selenium.webdriver.chrome.service import Service as ChromeService
import psutil import psutil
import logging
from hytest import * from hytest import *
from selenium import webdriver from selenium import webdriver
from selenium.common import TimeoutException, NoSuchElementException, ElementNotInteractableException from selenium.common import TimeoutException, NoSuchElementException, ElementNotInteractableException
...@@ -19,6 +19,33 @@ import hmac ...@@ -19,6 +19,33 @@ import hmac
import hashlib import hashlib
import base64 import base64
from urllib.parse import urlencode from urllib.parse import urlencode
from datetime import datetime
import os
import sys
import schedule
import time
import subprocess
import logging
# 获取当前脚本的绝对路径
current_dir = os.path.dirname(os.path.abspath(__file__))
# 获取当前脚本的父目录
parent_dir = os.path.dirname(current_dir)
logging.info(parent_dir)
# 添加路径
sys.path.append(current_dir)
# 配置日志记录器
log_file = os.path.join(current_dir, 'automation_test.log')
logging.basicConfig(
level=logging.DEBUG,
format='%(asctime)s - %(levelname)s - %(message)s',
handlers=[
logging.FileHandler(log_file),
logging.StreamHandler()
]
)
# 配置日志 # 配置日志
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
...@@ -418,6 +445,68 @@ def browser_quit(): ...@@ -418,6 +445,68 @@ def browser_quit():
# 调用浏览器驱动实例的quit方法,关闭浏览器并释放资源 # 调用浏览器驱动实例的quit方法,关闭浏览器并释放资源
wd.quit() wd.quit()
def get_latest_report_file(report_dir, base_url):
"""
获取指定目录下最新的HTML报告文件,并返回带有基础URL的完整路径。
:param report_dir: 报告文件所在的目录
:param base_url: 基础URL
:return: 最新的HTML报告文件的完整URL,如果没有找到则返回None
"""
report_files = glob.glob(os.path.join(report_dir, '*.html'))
if not report_files:
logging.warning("No report files found in the directory.")
return None
latest_file = max(report_files, key=os.path.getmtime)
last_modified_time = datetime.fromtimestamp(os.path.getmtime(latest_file)).strftime('%Y-%m-%d %H:%M:%S')
logging.info(f"Latest report file: {latest_file}, Last modified: {last_modified_time}")
# 将文件路径转换为相对于基础URL的完整URL
relative_path = os.path.relpath(latest_file, report_dir)
full_url = f"{base_url}/{relative_path}".replace("\\", "/") # 确保路径分隔符一致
return full_url
def run_automation_test(report_title, report_url_prefix, test_case):
logging.info("Starting automation test...")
command = [
'hytest',
'--report_title', report_title,
'--report_url_prefix', report_url_prefix,
'--test', test_case
]
logging.info(f"Running command: {' '.join(command)}")
try:
result = subprocess.run(command, capture_output=True, text=True, check=True)
logging.debug(f"Command stdout: {result.stdout}")
logging.debug(f"Command stderr: {result.stderr}")
# 获取最新的报告文件
report_dir = os.path.join(parent_dir, 'reports')
base_url = report_url_prefix
latest_report = get_latest_report_file(report_dir, base_url)
if latest_report:
logging.info(f"Latest report file URL: {latest_report}")
# 调用钉钉发送消息接口进行推送测试报告链接
try:
logging.info("开始调用dingding消息通知函数")
dingding_send_message(latest_report, report_title, f"{report_title}定时任务执行完成", "13724387318")
logging.info("dingding_send_message function called successfully")
except Exception as e:
logging.error(f"dingding_send_message调用失败: {e}")
else:
logging.warning("No report files found to send.")
except subprocess.CalledProcessError as e:
logging.error(f"Command failed with return code {e.returncode}: {e.output}")
except OSError as e:
logging.error(f"OS error occurred: {e}")
finally:
logging.info("Automation test completed.")
def dingding_send_message(test_report_Url, title, text, mobile): def dingding_send_message(test_report_Url, title, text, mobile):
""" """
发送钉钉机器人消息 发送钉钉机器人消息
......
...@@ -70,4 +70,5 @@ ...@@ -70,4 +70,5 @@
- 钉钉群消息提醒的param参数改为link链接形式,通过链接打开测试报告进行查看。 - 钉钉群消息提醒的param参数改为link链接形式,通过链接打开测试报告进行查看。
20. 2024-11-26 20. 2024-11-26
- 调试定时任务的问题,还需再进一步调试。 - 调试定时任务的问题,还需再进一步调试。
- 补充运维集控的MQTT底层方法与消息体构建。 - 补充运维集控的MQTT底层方法与消息体构建。
\ No newline at end of file - 调试定时任务执行后钉钉消息没有发送的问题。将定时任务与测试报告文件获取封装成函数进行调用,方便后续维护管理。目前调试发现定时任务执行别的脚本时会出现异常问题,需要进一步排查。
\ No newline at end of file
...@@ -65,8 +65,9 @@ class Login_00x: ...@@ -65,8 +65,9 @@ class Login_00x:
# 等待1秒以允许页面响应 # 等待1秒以允许页面响应
sleep(2) sleep(2)
# 根据预期的检查文本类型,获取并记录提示信息 # 根据预期的检查文本类型,获取并记录提示信息
if check_text == "欢迎 预定标准版测试": if check_text == "admin@ZDH":
notify_text = elment_get_text((By.XPATH, '//*[@id="app"]/div/div[1]/div/span[1]'),wd) sleep(2)
notify_text = elment_get_text((By.XPATH, f"//span[normalize-space()='{username}']"),wd)
SELENIUM_LOG_SCREEN(wd, '50%', 'Login', 'Login_Pwd', f"{name}_检查登录成功提示信息") SELENIUM_LOG_SCREEN(wd, '50%', 'Login', 'Login_Pwd', f"{name}_检查登录成功提示信息")
INFO(f"Alert text: {notify_text}") INFO(f"Alert text: {notify_text}")
else: else:
...@@ -81,7 +82,7 @@ class Login_00x: ...@@ -81,7 +82,7 @@ class Login_00x:
# 设置隐式等待时间 # 设置隐式等待时间
wd.implicitly_wait(DEFAULT_WAIT_TIME) wd.implicitly_wait(DEFAULT_WAIT_TIME)
# 检查点:验证提示信息是否与预期相符 # 检查点:验证提示信息是否与预期相符
CHECK_POINT('弹出提示', notify_text == check_text) CHECK_POINT('弹出提示', check_text in notify_text)
# 执行步骤 4:刷新页面,以确保下一个测试从一个干净的状态开始 # 执行步骤 4:刷新页面,以确保下一个测试从一个干净的状态开始
STEP(4, "刷新页面") STEP(4, "刷新页面")
......
此差异已折叠。
此差异已折叠。
=== [ 收集测试用例 ] ===
== cases\__st__.py
== cases\会议主流程\__st__.py
== cases\会议主流程\会议修改.py
CSV文件已读取
** no cases in this file , skip it.
== cases\会议主流程\会议预约.py
CSV文件已读取
** no cases in this file , skip it.
== cases\会议室管理\会议室管理\__st__.py
== cases\会议室管理\会议室管理\会议室删除.py
CSV文件已读取
** no cases in this file , skip it.
== cases\会议室管理\会议室管理\会议室新增.py
CSV文件已读取
** no cases in this file , skip it.
== cases\会议室管理\会议室管理\会议室查询.py
CSV文件已读取
** no cases in this file , skip it.
== cases\会议室管理\会议室管理\会议室编辑.py
CSV文件已读取
** no cases in this file , skip it.
== cases\会议室管理\功能管理\__st__.py
== cases\会议室管理\功能管理\功能删除.py
CSV文件已读取
** no cases in this file , skip it.
== cases\会议室管理\功能管理\功能新增.py
CSV文件已读取
** no cases in this file , skip it.
== cases\会议室管理\功能管理\功能查询.py
CSV文件已读取
** no cases in this file , skip it.
== cases\会议室管理\功能管理\功能编辑.py
CSV文件已读取
** no cases in this file , skip it.
== cases\会议室管理\区域管理\__st__.py
== cases\会议室管理\区域管理\区域删除.py
CSV文件已读取
** no cases in this file , skip it.
== cases\会议室管理\区域管理\区域新增.py
CSV文件已读取
** no cases in this file , skip it.
== cases\会议室管理\区域管理\区域编辑.py
CSV文件已读取
** no cases in this file , skip it.
== cases\登录模块\账号密码登录测试.py
CSV文件已读取
== cases\系统管理\__st__.py
== cases\系统管理\系统设置.py
** no cases in this file , skip it.
== cases\设备管理\安卓信息.py
** no cases in this file, skip it.
== cases\设备管理\毫米波雷达.py
** no cases in this file, skip it.
== cases\账号管理\用户管理\__st__.py
== cases\账号管理\用户管理\主流程.py
** no cases in this file , skip it.
== cases\账号管理\用户管理\用户修改密码.py
CSV文件已读取
** no cases in this file , skip it.
== cases\账号管理\用户管理\用户删除.py
CSV文件已读取
** no cases in this file , skip it.
== cases\账号管理\用户管理\用户新增.py
CSV文件已读取
** no cases in this file , skip it.
== cases\账号管理\用户管理\用户查询.py
CSV文件已读取
** no cases in this file , skip it.
== cases\账号管理\用户管理\用户状态设置.py
CSV文件已读取
** no cases in this file , skip it.
== cases\账号管理\用户管理\用户编辑.py
CSV文件已读取
** no cases in this file , skip it.
== cases\账号管理\部门管理\__st__.py
== cases\账号管理\部门管理\主流程.py
CSV文件已读取
** no cases in this file , skip it.
== cases\账号管理\部门管理\部门删除.py
CSV文件已读取
** no cases in this file , skip it.
== cases\账号管理\部门管理\部门新增.py
CSV文件已读取
** no cases in this file , skip it.
== cases\账号管理\部门管理\部门查询.py
CSV文件已读取
** no cases in this file , skip it.
== cases\账号管理\部门管理\部门编辑.py
CSV文件已读取
** no cases in this file , skip it.
=== [ 执行测试用例 ] ===
预备执行用例数量 : 10
========= 测试开始 : 20241125_175001 =========
>>> cases\
[ suite setup ] cases\
-- 第 1 步 -- 初始化浏览器
'----------' 正在初始化浏览器 '----------'
'----------' 浏览器初始化完成 '----------'
-- 第 2 步 -- 处理SSL认证
'----------' 正在处理SSL证书警告 '----------'
'----------' SSL证书警告处理完成 '----------'
>>> cases\登录模块\账号密码登录测试.py
* 登录_001 - 2024-11-25 17:50:16
[ case execution steps ]
-- 第 1 步 -- 输入账号: , 密码: Ubains@4321, 验证码: csba
-- 第 2 步 -- 点击登录按钮
picture imgs/Login/Login_Pwd/登录_001_检查登录失败提示信息20241125175018799640.png
Alert text: 请输入账号!
-- 第 3 步 -- 校验提示信息: 请输入账号!
** 检查点 ** 弹出提示 ----> 通过
-- 第 4 步 -- 刷新页面
PASS
* 登录_002 - 2024-11-25 17:50:19
[ case execution steps ]
-- 第 1 步 -- 输入账号: admin@czj1, 密码: , 验证码: csba
-- 第 2 步 -- 点击登录按钮
picture imgs/Login/Login_Pwd/登录_002_检查登录失败提示信息20241125175021814253.png
Alert text: 请输入密码!
-- 第 3 步 -- 校验提示信息: 请输入密码!
** 检查点 ** 弹出提示 ----> 通过
-- 第 4 步 -- 刷新页面
PASS
* 登录_003 - 2024-11-25 17:50:22
[ case execution steps ]
-- 第 1 步 -- 输入账号: admin@czj2, 密码: Ubains@4321, 验证码:
-- 第 2 步 -- 点击登录按钮
picture imgs/Login/Login_Pwd/登录_003_检查登录失败提示信息20241125175024843078.png
Alert text: 请输入验证码!
-- 第 3 步 -- 校验提示信息: 请输入验证码!
** 检查点 ** 弹出提示 ----> 通过
-- 第 4 步 -- 刷新页面
PASS
* 登录_004 - 2024-11-25 17:50:25
[ case execution steps ]
-- 第 1 步 -- 输入账号: admin@czj112, 密码: Ubains@4321, 验证码: csba
-- 第 2 步 -- 点击登录按钮
picture imgs/Login/Login_Pwd/登录_004_检查登录失败提示信息20241125175027757649.png
Alert text: 账号或密码错误
-- 第 3 步 -- 校验提示信息: 账号或密码错误
** 检查点 ** 弹出提示 ----> 通过
-- 第 4 步 -- 刷新页面
PASS
* 登录_005 - 2024-11-25 17:50:28
[ case execution steps ]
-- 第 1 步 -- 输入账号: adM 12in@czj, 密码: Ubains@4321, 验证码: csba
-- 第 2 步 -- 点击登录按钮
picture imgs/Login/Login_Pwd/登录_005_检查登录失败提示信息20241125175030707855.png
Alert text: 账号或密码错误
-- 第 3 步 -- 校验提示信息: 账号或密码错误
** 检查点 ** 弹出提示 ----> 通过
-- 第 4 步 -- 刷新页面
PASS
* 登录_006 - 2024-11-25 17:50:31
[ case execution steps ]
-- 第 1 步 -- 输入账号: admin@czj3, 密码: 12345, 验证码: csba
-- 第 2 步 -- 点击登录按钮
picture imgs/Login/Login_Pwd/登录_006_检查登录失败提示信息20241125175033655666.png
Alert text: 账号或密码错误
-- 第 3 步 -- 校验提示信息: 账号或密码错误
** 检查点 ** 弹出提示 ----> 通过
-- 第 4 步 -- 刷新页面
PASS
* 登录_007 - 2024-11-25 17:50:34
[ case execution steps ]
-- 第 1 步 -- 输入账号: admin@czj4, 密码: U bains1s@432, 验证码: csba
-- 第 2 步 -- 点击登录按钮
picture imgs/Login/Login_Pwd/登录_007_检查登录失败提示信息20241125175036568256.png
Alert text: 账号或密码错误
-- 第 3 步 -- 校验提示信息: 账号或密码错误
** 检查点 ** 弹出提示 ----> 通过
-- 第 4 步 -- 刷新页面
PASS
* 登录_008 - 2024-11-25 17:50:37
[ case execution steps ]
-- 第 1 步 -- 输入账号: admin@czj5, 密码: Ubains@4321, 验证码: 123
-- 第 2 步 -- 点击登录按钮
picture imgs/Login/Login_Pwd/登录_008_检查登录失败提示信息20241125175039445768.png
Alert text: 验证码错误
-- 第 3 步 -- 校验提示信息: 验证码错误
** 检查点 ** 弹出提示 ----> 通过
-- 第 4 步 -- 刷新页面
PASS
* 登录_009 - 2024-11-25 17:50:39
[ case execution steps ]
-- 第 1 步 -- 输入账号: admin@czj6, 密码: Ubains@4321, 验证码: cs 12
-- 第 2 步 -- 点击登录按钮
picture imgs/Login/Login_Pwd/登录_009_检查登录失败提示信息20241125175042356574.png
Alert text: 验证码错误
-- 第 3 步 -- 校验提示信息: 验证码错误
** 检查点 ** 弹出提示 ----> 通过
-- 第 4 步 -- 刷新页面
PASS
* 登录_010 - 2024-11-25 17:50:42
[ case execution steps ]
-- 第 1 步 -- 输入账号: admin@ZDH, 密码: Ubains@4321, 验证码: csba
-- 第 2 步 -- 点击登录按钮
picture imgs/Login/Login_Pwd/登录_010_检查登录成功提示信息20241125175045377467.png
=== [ 收集测试用例 ] ===
== cases\__st__.py
== cases\会议主流程\__st__.py
== cases\会议主流程\会议修改.py
CSV文件已读取
** no cases in this file , skip it.
== cases\会议主流程\会议预约.py
CSV文件已读取
** no cases in this file , skip it.
== cases\会议室管理\会议室管理\__st__.py
== cases\会议室管理\会议室管理\会议室删除.py
CSV文件已读取
** no cases in this file , skip it.
== cases\会议室管理\会议室管理\会议室新增.py
CSV文件已读取
** no cases in this file , skip it.
== cases\会议室管理\会议室管理\会议室查询.py
CSV文件已读取
** no cases in this file , skip it.
== cases\会议室管理\会议室管理\会议室编辑.py
CSV文件已读取
** no cases in this file , skip it.
== cases\会议室管理\功能管理\__st__.py
== cases\会议室管理\功能管理\功能删除.py
CSV文件已读取
** no cases in this file , skip it.
== cases\会议室管理\功能管理\功能新增.py
CSV文件已读取
** no cases in this file , skip it.
== cases\会议室管理\功能管理\功能查询.py
CSV文件已读取
** no cases in this file , skip it.
== cases\会议室管理\功能管理\功能编辑.py
CSV文件已读取
** no cases in this file , skip it.
== cases\会议室管理\区域管理\__st__.py
== cases\会议室管理\区域管理\区域删除.py
CSV文件已读取
** no cases in this file , skip it.
== cases\会议室管理\区域管理\区域新增.py
CSV文件已读取
** no cases in this file , skip it.
== cases\会议室管理\区域管理\区域编辑.py
CSV文件已读取
** no cases in this file , skip it.
== cases\登录模块\账号密码登录测试.py
CSV文件已读取
== cases\系统管理\__st__.py
== cases\系统管理\系统设置.py
** no cases in this file , skip it.
== cases\设备管理\安卓信息.py
** no cases in this file, skip it.
== cases\设备管理\毫米波雷达.py
** no cases in this file, skip it.
== cases\账号管理\用户管理\__st__.py
== cases\账号管理\用户管理\主流程.py
** no cases in this file , skip it.
== cases\账号管理\用户管理\用户修改密码.py
CSV文件已读取
** no cases in this file , skip it.
== cases\账号管理\用户管理\用户删除.py
CSV文件已读取
** no cases in this file , skip it.
== cases\账号管理\用户管理\用户新增.py
CSV文件已读取
** no cases in this file , skip it.
== cases\账号管理\用户管理\用户查询.py
CSV文件已读取
** no cases in this file , skip it.
== cases\账号管理\用户管理\用户状态设置.py
CSV文件已读取
** no cases in this file , skip it.
== cases\账号管理\用户管理\用户编辑.py
CSV文件已读取
** no cases in this file , skip it.
== cases\账号管理\部门管理\__st__.py
== cases\账号管理\部门管理\主流程.py
CSV文件已读取
** no cases in this file , skip it.
== cases\账号管理\部门管理\部门删除.py
CSV文件已读取
** no cases in this file , skip it.
== cases\账号管理\部门管理\部门新增.py
CSV文件已读取
** no cases in this file , skip it.
== cases\账号管理\部门管理\部门查询.py
CSV文件已读取
** no cases in this file , skip it.
== cases\账号管理\部门管理\部门编辑.py
CSV文件已读取
** no cases in this file , skip it.
=== [ 执行测试用例 ] ===
预备执行用例数量 : 10
========= 测试开始 : 20241125_174401 =========
>>> cases\
[ suite setup ] cases\
-- 第 1 步 -- 初始化浏览器
'----------' 正在初始化浏览器 '----------'
'----------' 浏览器初始化完成 '----------'
-- 第 2 步 -- 处理SSL认证
'----------' 正在处理SSL证书警告 '----------'
'----------' SSL证书警告处理完成 '----------'
>>> cases\登录模块\账号密码登录测试.py
* 登录_001 - 2024-11-25 17:44:04
[ case execution steps ]
-- 第 1 步 -- 输入账号: , 密码: Ubains@4321, 验证码: csba
-- 第 2 步 -- 点击登录按钮
picture imgs/Login/Login_Pwd/登录_001_检查登录失败提示信息20241125174407080171.png
Alert text: 请输入账号!
-- 第 3 步 -- 校验提示信息: 请输入账号!
** 检查点 ** 弹出提示 ----> 通过
-- 第 4 步 -- 刷新页面
PASS
* 登录_002 - 2024-11-25 17:44:07
[ case execution steps ]
-- 第 1 步 -- 输入账号: admin@czj1, 密码: , 验证码: csba
-- 第 2 步 -- 点击登录按钮
picture imgs/Login/Login_Pwd/登录_002_检查登录失败提示信息20241125174410069134.png
Alert text: 请输入密码!
-- 第 3 步 -- 校验提示信息: 请输入密码!
** 检查点 ** 弹出提示 ----> 通过
-- 第 4 步 -- 刷新页面
PASS
* 登录_003 - 2024-11-25 17:44:10
[ case execution steps ]
-- 第 1 步 -- 输入账号: admin@czj2, 密码: Ubains@4321, 验证码:
-- 第 2 步 -- 点击登录按钮
picture imgs/Login/Login_Pwd/登录_003_检查登录失败提示信息20241125174413028657.png
Alert text: 请输入验证码!
-- 第 3 步 -- 校验提示信息: 请输入验证码!
** 检查点 ** 弹出提示 ----> 通过
-- 第 4 步 -- 刷新页面
PASS
* 登录_004 - 2024-11-25 17:44:13
[ case execution steps ]
-- 第 1 步 -- 输入账号: admin@czj112, 密码: Ubains@4321, 验证码: csba
-- 第 2 步 -- 点击登录按钮
picture imgs/Login/Login_Pwd/登录_004_检查登录失败提示信息20241125174415937254.png
Alert text: 账号或密码错误
-- 第 3 步 -- 校验提示信息: 账号或密码错误
** 检查点 ** 弹出提示 ----> 通过
-- 第 4 步 -- 刷新页面
PASS
* 登录_005 - 2024-11-25 17:44:16
[ case execution steps ]
-- 第 1 步 -- 输入账号: adM 12in@czj, 密码: Ubains@4321, 验证码: csba
-- 第 2 步 -- 点击登录按钮
picture imgs/Login/Login_Pwd/登录_005_检查登录失败提示信息20241125174418832049.png
Alert text: 账号或密码错误
-- 第 3 步 -- 校验提示信息: 账号或密码错误
** 检查点 ** 弹出提示 ----> 通过
-- 第 4 步 -- 刷新页面
PASS
* 登录_006 - 2024-11-25 17:44:19
[ case execution steps ]
-- 第 1 步 -- 输入账号: admin@czj3, 密码: 12345, 验证码: csba
-- 第 2 步 -- 点击登录按钮
picture imgs/Login/Login_Pwd/登录_006_检查登录失败提示信息20241125174421880105.png
Alert text: 账号或密码错误
-- 第 3 步 -- 校验提示信息: 账号或密码错误
** 检查点 ** 弹出提示 ----> 通过
-- 第 4 步 -- 刷新页面
PASS
* 登录_007 - 2024-11-25 17:44:22
[ case execution steps ]
-- 第 1 步 -- 输入账号: admin@czj4, 密码: U bains1s@432, 验证码: csba
-- 第 2 步 -- 点击登录按钮
picture imgs/Login/Login_Pwd/登录_007_检查登录失败提示信息20241125174424902427.png
Alert text: 账号或密码错误
-- 第 3 步 -- 校验提示信息: 账号或密码错误
** 检查点 ** 弹出提示 ----> 通过
-- 第 4 步 -- 刷新页面
PASS
* 登录_008 - 2024-11-25 17:44:25
[ case execution steps ]
-- 第 1 步 -- 输入账号: admin@czj5, 密码: Ubains@4321, 验证码: 123
-- 第 2 步 -- 点击登录按钮
picture imgs/Login/Login_Pwd/登录_008_检查登录失败提示信息20241125174427870609.png
Alert text: 验证码错误
-- 第 3 步 -- 校验提示信息: 验证码错误
** 检查点 ** 弹出提示 ----> 通过
-- 第 4 步 -- 刷新页面
PASS
* 登录_009 - 2024-11-25 17:44:28
[ case execution steps ]
-- 第 1 步 -- 输入账号: admin@czj6, 密码: Ubains@4321, 验证码: cs 12
-- 第 2 步 -- 点击登录按钮
picture imgs/Login/Login_Pwd/登录_009_检查登录失败提示信息20241125174430794150.png
Alert text: 验证码错误
-- 第 3 步 -- 校验提示信息: 验证码错误
** 检查点 ** 弹出提示 ----> 通过
-- 第 4 步 -- 刷新页面
PASS
* 登录_010 - 2024-11-25 17:44:31
[ case execution steps ]
-- 第 1 步 -- 输入账号: admin@ZDH, 密码: Ubains@4321, 验证码: csba
-- 第 2 步 -- 点击登录按钮
picture imgs/Login/Login_Pwd/登录_010_检查登录成功提示信息20241125174433837258.png
import os from Base.base import *
import sys
import schedule
import time
import subprocess
import logging
import re
# 获取当前脚本的绝对路径
current_dir = os.path.dirname(os.path.abspath(__file__))
# 添加路径
sys.path.append(current_dir)
from Base.base import dingding_send_message
# 配置日志记录器
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')
def run_automation_test():
command = [
'hytest',
'--report_title', '账号密码登录测试报告',
'--report_url_prefix', 'http://192.168.1.166',
'--test', '登录_0**'
]
print(command)
logging.info(command)
try:
logging.debug(f"Running command: {' '.join(command)}")
result = subprocess.run(command, capture_output=True, text=True, check=True)
print(command)
# 记录命令的完整输出
logging.debug(f"Command stdout: {result.stdout}")
logging.debug(f"Command stderr: {result.stderr}")
# 确保 result.stdout 和 result.stderr 是字符串类型
stdout = result.stdout
stderr = result.stderr
# 假设链接的格式是 http://192.168.1.166/report_*.html
link_pattern = re.compile(r'http://192.168.1.166/report_\d{8}_\d{6}\.html')
# 从标准输出中提取链接
report_link = link_pattern.search(stdout)
if report_link:
report_link = report_link.group(0)
logging.info(f"测试报告链接: {report_link}")
# 调用钉钉发送消息接口进行推送测试报告链接
try:
logging.info("开始调用dingding消息通知函数")
dingding_send_message(report_link, "预定系统账号密码测试", "定时任务执行完成", "13724387318")
logging.info("dingding_send_message function called successfully")
except Exception as e:
logging.error(f"dingding_send_message调用失败: {e}")
else:
logging.warning("No test report link found in stdout")
# 从标准错误中提取链接
error_report_link = link_pattern.search(stderr)
if error_report_link:
error_report_link = error_report_link.group(0)
logging.warning(f"Test report link in stderr: {error_report_link}")
else:
logging.warning("No test report link found in stderr")
if result.stdout:
logging.info(f"Command output: {result.stdout}")
if result.stderr:
logging.warning(f"Command error: {result.stderr}")
except subprocess.CalledProcessError as e:
logging.error(f"Command failed with return code {e.returncode}: {e.output}")
except OSError as e:
logging.error(f"OS error occurred: {e}")
# 每天凌晨 0 点执行任务 # 每天凌晨 0 点执行任务
schedule.every().day.at("16:18").do(run_automation_test) schedule.every().day.at("21:18").do(run_automation_test, report_title="账号密码登录模块_测试报告", report_url_prefix="http://192.168.1.166", test_case="登录_0**")
# schedule.every().day.at("21:14").do(run_automation_test, report_title="用户管理模块_主流程_测试报告", report_url_prefix="http://192.168.1.166", test_case="Main_User_Manage_0001")
while True:
schedule.run_pending() try:
time.sleep(1) while True:
\ No newline at end of file schedule.run_pending()
time.sleep(5)
except KeyboardInterrupt:
logging.info("Scheduler interrupted by user.")
except Exception as e:
logging.error(f"Unexpected error: {e}")
\ No newline at end of file
name,account,expected name,account,expected
登录_001,,Ubains@4321,csba,请输入账号! 登录_001,,Ubains@4321,csba,请输入账号!
登录_002,admin@czj1,,csba,请输入密码! 登录_002,admin@czj,,csba,请输入密码!
登录_003,admin@czj2,Ubains@4321,,请输入验证码! 登录_003,admin@czj,Ubains@4321,,请输入验证码!
登录_004,admin@czj112,Ubains@4321,csba,账号或密码错误 登录_004,admin@czj003,Ubains@4321,csba,账号或密码错误
登录_005,adM 12in@czj,Ubains@4321,csba,账号或密码错误 登录_005,adM 1221n@czj,Ubains@4321,csba,账号或密码错误
登录_006,admin@czj3,12345,csba,账号或密码错误 登录_006,admin@czj34,12345,csba,账号或密码错误
登录_007,admin@czj4,U bains1s@432,csba,账号或密码错误 登录_007,admin@czj412,U bains1s@432,csba,账号或密码错误
登录_008,admin@czj5,Ubains@4321,123,验证码错误 登录_008,admin@czj012,Ubains@4321,123,验证码错误
登录_009,admin@czj6,Ubains@4321,cs 12,验证码错误 登录_009,admin@czj1213,Ubains@4321,cs 12,验证码错误
登录_010,admin@ZDH,Ubains@4321,csba,欢迎 预定标准版测试 登录_010,admin@ZDH,Ubains@4321,csba,admin@ZDH
\ No newline at end of file \ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论