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

实现定时执行任务并调用钉钉群消息发送函数,但调试过程中存在一些没有调用的问题,待排查。钉钉群消息提醒的param参数改为link链接形式,通过链接打开测试报告进行查看。

上级 69b51a0d
import csv
import re
import time
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service as ChromeService
import psutil
......@@ -11,6 +12,15 @@ from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import urllib
import requests
import json
import hmac
import hashlib
import base64
from urllib.parse import urlencode
# 配置日志
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
def browser_init():
"""
......@@ -406,4 +416,68 @@ def browser_quit():
# 从全局存储中获取浏览器驱动实例
wd = GSTORE['wd']
# 调用浏览器驱动实例的quit方法,关闭浏览器并释放资源
wd.quit()
\ No newline at end of file
wd.quit()
def dingding_send_message(test_report_Url, title, text, mobile):
"""
发送钉钉机器人消息
:param text_report_Url: 测试报告链接
:param title: 消息标题
:param text: 消息内容
:param mobile: 需要@的手机号列表
"""
# 钉钉机器人的 Webhook URL 和密钥 (正式环境)
# webhook_url = 'https://oapi.dingtalk.com/robot/send?access_token=b0eea0bbf097ce3badb4c832d2cd0267a50486f395ec8beca6e2042102bb295b'
# secret = 'SEC928b11659c5fd6476cfa2042edbf56da876abf759289f7e4d3c671fb9a81bf43'
# 钉钉机器人的 Webhook URL 和密钥 (测试环境)
webhook_url = 'https://oapi.dingtalk.com/robot/send?access_token=7fbf40798cad98b1b5db55ff844ba376b1816e80c5777e6f47ae1d9165dacbb4'
secret = 'SEC610498ed6261ae2df1d071d0880aaa70abf5e67efe47f75a809c1f2314e0dbd6'
# 生成时间戳
timestamp = str(round(time.time() * 1000))
# 生成签名
secret_enc = secret.encode('utf-8')
string_to_sign = f'{timestamp}\n{secret}'
string_to_sign_enc = string_to_sign.encode('utf-8')
hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()
sign = urllib.parse.quote_plus(base64.b64encode(hmac_code))
# 构建最终的 Webhook URL
params = {
'access_token': webhook_url.split('=')[1],
'timestamp': timestamp,
'sign': sign
}
encoded_params = urlencode(params)
final_webhook_url = f'https://oapi.dingtalk.com/robot/send?{encoded_params}'
logging.info(f"钉钉机器人Webhook URL: {final_webhook_url}")
# 构建消息体
headers = {'Content-Type': 'application/json'}
message = {
'msgtype': 'link',
'link': {
'title': title,
'messageUrl': test_report_Url,
'text': text
},
"at": {
"atMobiles": [mobile], # 将手机号列表化
"isAtAll": False
}
}
try:
# 发送 POST 请求
response = requests.post(final_webhook_url, data=json.dumps(message), headers=headers)
if response.status_code == 200:
logging.info('消息发送成功!')
logging.info(f'响应内容: {response.text}')
else:
logging.error(f'消息发送失败,状态码: {response.status_code}')
logging.error(f'响应内容: {response.text}')
except requests.exceptions.RequestException as e:
logging.error(f'请求异常: {e}')
\ No newline at end of file
......@@ -64,4 +64,7 @@
- 优化会议预约的脚本,增加预约类型、消息提醒、通知方式以及是否创建模板的代码判断,根据对应需求创建对应类型的会议。
- 输出会议修改代码,增加预约类型的判断,处理对于周期会议的修改特殊处理。会议议题还需要补充完善。
18. 2024-11-21
- 实现钉钉群消息提醒接口调用,后续切换到其他测试公司进行定时推送验证。
\ No newline at end of file
- 实现钉钉群消息提醒接口调用,后续切换到其他测试公司进行定时推送验证。
19. 2024-11-25
- 实现定时执行任务并调用钉钉群消息发送函数,但调试过程中存在一些没有调用的问题,待排查。
- 钉钉群消息提醒的param参数改为link链接形式,通过链接打开测试报告进行查看。
\ No newline at end of file
......@@ -109,11 +109,11 @@ class Message_Book_000x:
safe_send_keys((By.XPATH, "//textarea[@placeholder='请输入会议内容']"),message_content,wd)
sleep(2)
# 输入议题名称
safe_send_keys((By.XPATH, "//input[@placeholder='请输入会议议题']"),issue_name,wd)
# 选择议题文件进行上传
safe_click((By.XPATH, "//div[@class='topicsHandleButton uploadFile']"),wd)
sleep(1)
# # 输入议题名称
# safe_send_keys((By.XPATH, "//input[@placeholder='请输入会议议题']"),issue_name,wd)
# # 选择议题文件进行上传
# safe_click((By.XPATH, "//div[@class='topicsHandleButton uploadFile']"),wd)
# sleep(1)
# 将字符串转换为时间对象
start_time = datetime.strptime(book_start_time, time_format)
......
......@@ -29,7 +29,7 @@ class Login_00x:
"""
执行指令是:
1.cd 预定系统
2.hytest --report_title 账号密码登录测试报告 --test 登录_0**
2.hytest --report_title 账号密码登录测试报告 --report_url_prefix http://192.168.1.166 --test 登录_0**
"""
ddt_cases = read_csv_data(csv_file_path)
......
......@@ -16,6 +16,7 @@ phone = '17319004611'
email = '2919407801@qq.com'
class Main_User_Manage_0001:
tags = ['用户管理功能']
"""
执行指令:
1.cd 预定系统
......
......@@ -21,6 +21,7 @@ current_dir = os.path.dirname(os.path.abspath(__file__))
csv_file_path = os.path.join(current_dir, '../../../测试数据/账号管理/用户管理模块/用户修改密码.csv')
class User_Chanage_Pwd_000x:
tags = ['用户管理功能']
"""
执行指令:
1.cd 预定系统
......
......@@ -17,6 +17,7 @@ current_dir = os.path.dirname(os.path.abspath(__file__))
csv_file_path = os.path.join(current_dir, '../../../测试数据/账号管理/用户管理模块/用户删除.csv')
class Delete_User_000x:
tags = ['用户管理功能']
"""
执行指令:
1.cd 预定系统
......
......@@ -21,6 +21,7 @@ current_dir = os.path.dirname(os.path.abspath(__file__))
csv_file_path = os.path.join(current_dir, '../../../测试数据/账号管理/用户管理模块/用户新增.csv')
class Add_User_000x:
tags = ['用户管理功能']
"""
执行指令:
1.cd 预定系统
......
......@@ -18,6 +18,7 @@ current_dir = os.path.dirname(os.path.abspath(__file__))
csv_file_path = os.path.join(current_dir, '../../../测试数据/账号管理/用户管理模块/用户查询.csv')
class Query_User_000x:
tags = ['用户管理功能']
"""
执行指令:
1.cd 预定系统
......
......@@ -21,6 +21,7 @@ current_dir = os.path.dirname(os.path.abspath(__file__))
csv_file_path = os.path.join(current_dir, '../../../测试数据/账号管理/用户管理模块/用户状态设置.csv')
class User_Status_000x:
tags = ['用户管理功能']
"""
执行指令:
1.cd 预定系统
......
......@@ -21,6 +21,7 @@ current_dir = os.path.dirname(os.path.abspath(__file__))
csv_file_path = os.path.join(current_dir, '../../../测试数据/账号管理/用户管理模块/用户编辑.csv')
class User_Edit_000x:
tags = ['用户管理功能']
"""
执行指令:
1.cd 预定系统
......
import logging
import time
import urllib
import requests
import json
import hmac
import hashlib
import base64
from urllib.parse import urlencode
# 配置日志
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
def send_message(title, text, mobile):
"""
发送钉钉机器人消息
:param title: 消息标题
:param text: 消息内容
:param mobile: 需要@的手机号列表
"""
# 钉钉机器人的 Webhook URL 和密钥
webhook_url = 'https://oapi.dingtalk.com/robot/send?access_token=b0eea0bbf097ce3badb4c832d2cd0267a50486f395ec8beca6e2042102bb295b'
secret = 'SEC928b11659c5fd6476cfa2042edbf56da876abf759289f7e4d3c671fb9a81bf43'
# 生成时间戳
timestamp = str(round(time.time() * 1000))
# 生成签名
secret_enc = secret.encode('utf-8')
string_to_sign = f'{timestamp}\n{secret}'
string_to_sign_enc = string_to_sign.encode('utf-8')
hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()
sign = urllib.parse.quote_plus(base64.b64encode(hmac_code))
# 构建最终的 Webhook URL
params = {
'access_token': webhook_url.split('=')[1],
'timestamp': timestamp,
'sign': sign
}
encoded_params = urlencode(params)
final_webhook_url = f'https://oapi.dingtalk.com/robot/send?{encoded_params}'
logging.info(f"钉钉机器人Webhook URL: {final_webhook_url}")
# 构建消息体
headers = {'Content-Type': 'application/json'}
message = {
'msgtype': 'markdown',
'markdown': {
'title': title,
'text': text
},
"at": {
"atMobiles": [mobile], # 将手机号列表化
"isAtAll": False
}
}
try:
# 发送 POST 请求
response = requests.post(final_webhook_url, data=json.dumps(message), headers=headers)
if response.status_code == 200:
logging.info('消息发送成功!')
logging.info(f'响应内容: {response.text}')
else:
logging.error(f'消息发送失败,状态码: {response.status_code}')
logging.error(f'响应内容: {response.text}')
except requests.exceptions.RequestException as e:
logging.error(f'请求异常: {e}')
if __name__ == "__main__":
send_message('测试标题', '这是测试内容', '13724387318')
\ No newline at end of file
......@@ -13,6 +13,8 @@
CSV文件已读取
** no cases in this file , skip it.
== cases\会议主流程\会议预约.py
CSV文件已读取
......@@ -94,17 +96,10 @@ CSV文件已读取
** no cases in this file , skip it.
== cases\测试\test.py
** no cases in this file, skip it.
== cases\登录模块\账号密码登录测试.py
CSV文件已读取
** no cases in this file , skip it.
== cases\系统管理\__st__.py
......@@ -203,11 +198,11 @@ CSV文件已读取
=== [ 执行测试用例 ] ===
预备执行用例数量 : 1
预备执行用例数量 : 9
========= 测试开始 : 20241120_154247 =========
========= 测试开始 : 20241125_173400 =========
......@@ -226,149 +221,223 @@ CSV文件已读取
'----------' SSL证书警告处理完成 '----------'
>>> cases\会议主流程\
>>> cases\登录模块\账号密码登录测试.py
* 登录_001 - 2024-11-25 17:34:05
[ case execution steps ]
-- 第 1 步 -- 输入账号: , 密码: Ubains@4321, 验证码: csba
-- 第 2 步 -- 点击登录按钮
picture imgs/Login/Login_Pwd/登录_001_检查登录失败提示信息20241125173407851573.png
Alert text: 请输入账号!
-- 第 3 步 -- 校验提示信息: 请输入账号!
** 检查点 ** 弹出提示 ----> 通过
-- 第 4 步 -- 刷新页面
PASS
* 登录_002 - 2024-11-25 17:34:08
[ case execution steps ]
-- 第 1 步 -- 输入账号: admin@czj, 密码: , 验证码: csba
-- 第 2 步 -- 点击登录按钮
picture imgs/Login/Login_Pwd/登录_002_检查登录失败提示信息20241125173410832954.png
Alert text: 请输入密码!
-- 第 3 步 -- 校验提示信息: 请输入密码!
** 检查点 ** 弹出提示 ----> 通过
-- 第 4 步 -- 刷新页面
PASS
* 登录_003 - 2024-11-25 17:34:11
[ case execution steps ]
-- 第 1 步 -- 输入账号: admin@czj, 密码: Ubains@4321, 验证码:
-- 第 2 步 -- 点击登录按钮
picture imgs/Login/Login_Pwd/登录_003_检查登录失败提示信息20241125173413837085.png
Alert text: 请输入验证码!
-- 第 3 步 -- 校验提示信息: 请输入验证码!
** 检查点 ** 弹出提示 ----> 通过
-- 第 4 步 -- 刷新页面
PASS
* 登录_004 - 2024-11-25 17:34:14
[ case execution steps ]
-- 第 1 步 -- 输入账号: admin@czj112, 密码: Ubains@4321, 验证码: csba
-- 第 2 步 -- 点击登录按钮
picture imgs/Login/Login_Pwd/登录_004_检查登录失败提示信息20241125173416736793.png
Alert text: 账号或密码错误
[ suite setup ] cases\会议主流程\
输入用户名:admin@ZDH
输入密码:Ubains@4321
输入验证码:csba
点击登录按钮
-- 第 3 步 -- 校验提示信息: 账号或密码错误
>>> cases\会议主流程\会议修改.py
** 检查点 ** 弹出提示 ----> 通过
* 会议修改_001 - 2024-11-20 15:42:52
-- 第 4 步 -- 刷新页面
PASS
* 登录_005 - 2024-11-25 17:34:17
[ case execution steps ]
-- 第 1 步 -- 切换至已预定列表界面
-- 第 1 步 -- 输入账号: adM 12in@czj, 密码: Ubains@4321, 验证码: csba
-- 第 2 步 -- 点击登录按钮
picture imgs/Login/Login_Pwd/登录_005_检查登录失败提示信息20241125173419681083.png
Alert text: 账号或密码错误
-- 第 3 步 -- 校验提示信息: 账号或密码错误
** 检查点 ** 弹出提示 ----> 通过
-- 第 1 步 -- 在已预定列表界面搜索会议:这是周期会议测试1
-- 第 4 步 -- 刷新页面
搜索会议:这是周期会议测试1
搜索结果为:这是周期会议测试1
PASS
** 检查点 ** 搜索结果是否正确 ----> 通过
* 登录_006 - 2024-11-25 17:34:20
[ case execution steps ]
-- 第 1 步 -- 输入账号: admin@czj, 密码: 12345, 验证码: csba
-- 第 2 步 -- 点击【修改会议】按钮
修改会议界面标题为:修改会议
-- 第 2 步 -- 点击登录按钮
** 检查点 ** 修改会议界面标题是否正确 ----> 通过
picture imgs/Login/Login_Pwd/登录_006_检查登录失败提示信息20241125173422949136.png
Alert text: 账号或密码错误
-- 第 3 步 -- 校验提示信息: 账号或密码错误
-- 第 3 步 -- 修改会议第一步修改信息
输入会议名称:这是周期会议测试1,选择预约类型:周期会议,输入主持人:陈泽键,输入会议内容:这是会议内容哈哈,选择会议开始时间:19:00,选择会议结束时间:20:15
预约类型为:周期会议
picture imgs/Message_Manage/Message_Book/会议修改_001_时间重新选择提示20241120154301331157.png
时间重新选择提示为:重新选择
** 检查点 ** 弹出提示 ----> 通过
** 检查点 ** 时间重新选择提示是否正确 ----> 通过
时间差为:time_diff_minutes
开始时间与结束时间不相等,选择时间块:19:00,20:15
时间差大于最大预约时长1小时,选择【超出预约时长】
picture imgs/Message_Manage/Message_Book/会议修改_001_超出预约时长20241120154305677787.png
提示信息为:最大预定时间 1 小时
-- 第 4 步 -- 刷新页面
** 检查点 ** 超出预约时长提示是否正确 ----> 通过
PASS
不选时间点击【下一步】查看提示信息
picture imgs/Message_Manage/Message_Update/会议修改_001请选择会议时间提示信息20241120154309082619.png
提示信息为:请选择会议时间
* 登录_007 - 2024-11-25 17:34:23
** 检查点 ** 未选时间提示是否正确 ----> 通过
[ case execution steps ]
重新选择结束时间为:19:45
-- 第 1 步 -- 输入账号: admin@czj, 密码: U bains1s@432, 验证码: csba
-- 第 4 步 -- 修改会议第二步数据填写
清空人员弹窗提示信息为:是否清空当前会议室参会人员
-- 第 2 步 -- 点击登录按钮
** 检查点 ** 弹窗提示信息是否正确 ----> 通过
picture imgs/Login/Login_Pwd/登录_007_检查登录失败提示信息20241125173425849982.png
Alert text: 账号或密码错误
picture imgs/Message_Manage/Message_Update/会议修改_001_清空人员提示信息20241120154318631075.png
清空人员提示信息为:已清空当前会议室人员
-- 第 3 步 -- 校验提示信息: 账号或密码错误
** 检查点 ** 提示信息是否正确 ----> 通过
选择内部参会人:admin@CZJ
已选择参会人:admin@CZJ
** 检查点 ** 弹出提示 ----> 通过
** 检查点 ** 内部参会人选择是否正确 ----> 通过
输入外部参会人名称:陈泽坚,外部参会人号码:17319004674
检查弹窗标题是否正确
弹窗标题为:添加外部参会人员
-- 第 4 步 -- 刷新页面
** 检查点 ** 弹窗标题是否正确 ----> 通过
PASS
picture imgs/Message_Manage/Message_Book/会议修改_001_添加外部参会人提示信息20241120154323332666.png
提示信息为:添加成功
* 登录_008 - 2024-11-25 17:34:26
[ case execution steps ]
** 检查点 ** 提示信息是否正确 ----> 通过
-- 第 1 步 -- 输入账号: admin@czj, 密码: Ubains@4321, 验证码: 123
-- 第 5 步 -- 会议第三步数据填写
-- 第 2 步 -- 点击登录按钮
检查页面标题是否正确
页面标题为:消息提醒
picture imgs/Login/Login_Pwd/登录_008_检查登录失败提示信息20241125173428775088.png
Alert text: 验证码错误
** 检查点 ** 页面标题是否正确 ----> 通过
-- 第 3 步 -- 校验提示信息: 验证码错误
是否需要存入模板:否
选择消息提醒时间:开会前一天提醒
选择通知方式:短信
-- 第 6 步 -- 点击【确定】按钮
** 检查点 ** 弹出提示 ----> 通过
-- 第 7 步 -- 检查提示会议信息是否正确
-- 第 4 步 -- 刷新页面
PASS
* 登录_009 - 2024-11-25 17:34:29
[ case execution steps ]
检查会议名称:这是周期会议测试1,输入会议内容:这是会议内容哈哈
-- 第 1 步 -- 输入账号: admin@czj, 密码: Ubains@4321, 验证码: cs 12
** 检查点 ** 提示信息是否正确 ----> 通过
-- 第 2 步 -- 点击登录按钮
-- 第 8 步 -- 点击【确定】按钮
picture imgs/Login/Login_Pwd/登录_009_检查登录失败提示信息20241125173431696269.png
Alert text: 验证码错误
-- 第 3 步 -- 校验提示信息: 验证码错误
** 检查点 ** 是否显示加载中 ----> 通过
picture imgs/Message_Manage/Message_Book/会议修改_001_修改成功提示信息20241120154340274269.png
修改成功提示信息为:
** 检查点 ** 弹出提示 ----> 通过
** 检查点 ** 修改成功提示是否正确 ----> !! 不通过!!
FAIL
Traceback:
File "D:\GithubData\自动化脚本-4\ubains-module-test\预定系统\cases\会议主流程\会议修改.py", line 338, in teststeps
CHECK_POINT("修改成功提示是否正确", notify_text == check_text)
File "C:\Users\29194\AppData\Local\Programs\Python\Python310\lib\site-packages\hytest\common.py", line 76, in CHECK_POINT
raise AssertionError()
AssertionError
-- 第 4 步 -- 刷新页面
PASS
[ suite teardown ] cases\
清除浏览器
========= 测试结束 : 20241120_154342 =========
========= 测试结束 : 20241125_173434 =========
耗时 : 55.514
耗时 : 33.666
预备执行用例数量 : 1
预备执行用例数量 : 9
实际执行用例数量 : 1
实际执行用例数量 : 9
通过 : 0
通过 : 9
失败 : 1
失败 : 0
异常 : 0
......
此差异已折叠。
......@@ -13,6 +13,8 @@
CSV文件已读取
** no cases in this file , skip it.
== cases\会议主流程\会议预约.py
CSV文件已读取
......@@ -94,17 +96,10 @@ CSV文件已读取
** no cases in this file , skip it.
== cases\测试\test.py
** no cases in this file, skip it.
== cases\登录模块\账号密码登录测试.py
CSV文件已读取
** no cases in this file , skip it.
== cases\系统管理\__st__.py
......@@ -203,11 +198,11 @@ CSV文件已读取
=== [ 执行测试用例 ] ===
预备执行用例数量 : 1
预备执行用例数量 : 9
========= 测试开始 : 20241120_153754 =========
========= 测试开始 : 20241125_171101 =========
......@@ -226,141 +221,233 @@ CSV文件已读取
'----------' SSL证书警告处理完成 '----------'
>>> cases\会议主流程\
>>> cases\登录模块\账号密码登录测试.py
[ suite setup ] cases\会议主流程\
输入用户名:admin@ZDH
输入密码:Ubains@4321
输入验证码:csba
点击登录按钮
* 登录_001 - 2024-11-25 17:11:23
[ case execution steps ]
-- 第 1 步 -- 输入账号: , 密码: Ubains@4321, 验证码: csba
>>> cases\会议主流程\会议修改.py
* 会议修改_001 - 2024-11-20 15:38:17
-- 第 2 步 -- 点击登录按钮
picture imgs/Login/Login_Pwd/登录_001_检查登录失败提示信息20241125171126112028.png
Alert text: 请输入账号!
-- 第 3 步 -- 校验提示信息: 请输入账号!
** 检查点 ** 弹出提示 ----> 通过
-- 第 4 步 -- 刷新页面
PASS
* 登录_002 - 2024-11-25 17:11:26
[ case execution steps ]
-- 第 1 步 -- 切换至已预定列表界面
-- 第 1 步 -- 输入账号: admin@czj, 密码: , 验证码: csba
-- 第 2 步 -- 点击登录按钮
-- 第 1 步 -- 在已预定列表界面搜索会议:这是周期会议测试1
picture imgs/Login/Login_Pwd/登录_002_检查登录失败提示信息20241125171129080193.png
Alert text: 请输入密码!
搜索会议:这是周期会议测试1
搜索结果为:这是周期会议测试1
-- 第 3 步 -- 校验提示信息: 请输入密码!
** 检查点 ** 搜索结果是否正确 ----> 通过
** 检查点 ** 弹出提示 ----> 通过
-- 第 2 步 -- 点击【修改会议】按钮
修改会议界面标题为:修改会议
-- 第 4 步 -- 刷新页面
** 检查点 ** 修改会议界面标题是否正确 ----> 通过
PASS
* 登录_003 - 2024-11-25 17:11:29
-- 第 3 步 -- 修改会议第一步修改信息
[ case execution steps ]
输入会议名称:这是周期会议测试1,选择预约类型:周期会议,输入主持人:陈泽键,输入会议内容:这是会议内容哈哈,选择会议开始时间:19:00,选择会议结束时间:20:15
预约类型为:周期会议
picture imgs/Message_Manage/Message_Book/会议修改_001_时间重新选择提示20241120153826530103.png
时间重新选择提示为:重新选择
-- 第 1 步 -- 输入账号: admin@czj, 密码: Ubains@4321, 验证码:
** 检查点 ** 时间重新选择提示是否正确 ----> 通过
时间差为:time_diff_minutes
开始时间与结束时间不相等,选择时间块:19:00,20:15
时间差大于最大预约时长1小时,选择【超出预约时长】
picture imgs/Message_Manage/Message_Book/会议修改_001_超出预约时长20241120153830818933.png
提示信息为:最大预定时间 1 小时
-- 第 2 步 -- 点击登录按钮
** 检查点 ** 超出预约时长提示是否正确 ----> 通过
picture imgs/Login/Login_Pwd/登录_003_检查登录失败提示信息20241125171132174157.png
Alert text: 请输入验证码!
不选时间点击【下一步】查看提示信息
picture imgs/Message_Manage/Message_Update/会议修改_001请选择会议时间提示信息20241120153834011462.png
提示信息为:请选择会议时间
-- 第 3 步 -- 校验提示信息: 请输入验证码!
** 检查点 ** 未选时间提示是否正确 ----> 通过
重新选择结束时间为:19:45
** 检查点 ** 弹出提示 ----> 通过
-- 第 4 步 -- 修改会议第二步数据填写
清空人员弹窗提示信息为:是否清空当前会议室参会人员
-- 第 4 步 -- 刷新页面
** 检查点 ** 弹窗提示信息是否正确 ----> 通过
PASS
picture imgs/Message_Manage/Message_Update/会议修改_001_清空人员提示信息20241120153843563504.png
清空人员提示信息为:已清空当前会议室人员
* 登录_004 - 2024-11-25 17:11:32
** 检查点 ** 提示信息是否正确 ----> 通过
[ case execution steps ]
选择内部参会人:admin@CZJ
已选择参会人:admin@CZJ
-- 第 1 步 -- 输入账号: admin@czj112, 密码: Ubains@4321, 验证码: csba
** 检查点 ** 内部参会人选择是否正确 ----> 通过
输入外部参会人名称:陈泽坚,外部参会人号码:17319004674
检查弹窗标题是否正确
弹窗标题为:添加外部参会人员
-- 第 2 步 -- 点击登录按钮
** 检查点 ** 弹窗标题是否正确 ----> 通过
picture imgs/Login/Login_Pwd/登录_004_检查登录失败提示信息20241125171135108097.png
Alert text: 超过限制登录次数,请10分钟以后再登录!
picture imgs/Message_Manage/Message_Book/会议修改_001_添加外部参会人提示信息20241120153848318588.png
提示信息为:添加成功
-- 第 3 步 -- 校验提示信息: 账号或密码错误
** 检查点 ** 提示信息是否正确 ----> 通过
** 检查点 ** 弹出提示 ----> !! 不通过!!
-- 第 5 步 -- 会议第三步数据填写
FAIL
Traceback:
File "D:\GithubData\自动化脚本-4\ubains-module-test\预定系统\cases\登录模块\账号密码登录测试.py", line 84, in teststeps
CHECK_POINT('弹出提示', notify_text == check_text)
File "C:\Users\29194\AppData\Local\Programs\Python\Python310\lib\site-packages\hytest\common.py", line 76, in CHECK_POINT
raise AssertionError()
AssertionError
检查页面标题是否正确
页面标题为:消息提醒
** 检查点 ** 页面标题是否正确 ----> 通过
* 登录_005 - 2024-11-25 17:11:35
是否需要存入模板:否
选择消息提醒时间:开会前一天提醒
选择通知方式:短信
[ case execution steps ]
-- 第 6 步 -- 点击【确定】按钮
-- 第 1 步 -- 输入账号: adM 12in@czj, 密码: Ubains@4321, 验证码: csba
-- 第 7 步 -- 检查提示会议信息是否正确
-- 第 2 步 -- 点击登录按钮
检查会议名称:这是周期会议测试1,输入会议内容:这是会议内容哈哈
picture imgs/Login/Login_Pwd/登录_005_检查登录失败提示信息20241125171137961500.png
Alert text: 超过限制登录次数,请10分钟以后再登录!
** 检查点 ** 提示信息是否正确 ----> 通过
-- 第 3 步 -- 校验提示信息: 账号或密码错误
-- 第 8 步 -- 点击【确定】按钮
** 检查点 ** 弹出提示 ----> !! 不通过!!
ABORT argument of type 'NoneType' is not iterable
FAIL
Traceback:
File "D:\GithubData\自动化脚本-4\ubains-module-test\预定系统\cases\会议主流程\会议修改.py", line 329, in teststeps
CHECK_POINT("是否显示加载中", "提交数据中" in notify_text)
TypeError: argument of type 'NoneType' is not iterable
File "D:\GithubData\自动化脚本-4\ubains-module-test\预定系统\cases\登录模块\账号密码登录测试.py", line 84, in teststeps
CHECK_POINT('弹出提示', notify_text == check_text)
File "C:\Users\29194\AppData\Local\Programs\Python\Python310\lib\site-packages\hytest\common.py", line 76, in CHECK_POINT
raise AssertionError()
AssertionError
* 登录_006 - 2024-11-25 17:11:38
[ case execution steps ]
-- 第 1 步 -- 输入账号: admin@czj, 密码: 12345, 验证码: csba
-- 第 2 步 -- 点击登录按钮
picture imgs/Login/Login_Pwd/登录_006_检查登录失败提示信息20241125171140710074.png
Alert text: 账号或密码错误
-- 第 3 步 -- 校验提示信息: 账号或密码错误
** 检查点 ** 弹出提示 ----> 通过
-- 第 4 步 -- 刷新页面
PASS
* 登录_007 - 2024-11-25 17:11:41
[ case execution steps ]
-- 第 1 步 -- 输入账号: admin@czj, 密码: U bains1s@432, 验证码: csba
-- 第 2 步 -- 点击登录按钮
picture imgs/Login/Login_Pwd/登录_007_检查登录失败提示信息20241125171143613127.png
Alert text: 账号或密码错误
-- 第 3 步 -- 校验提示信息: 账号或密码错误
** 检查点 ** 弹出提示 ----> 通过
-- 第 4 步 -- 刷新页面
PASS
* 登录_008 - 2024-11-25 17:11:44
[ case execution steps ]
-- 第 1 步 -- 输入账号: admin@czj, 密码: Ubains@4321, 验证码: 123
-- 第 2 步 -- 点击登录按钮
picture imgs/Login/Login_Pwd/登录_008_检查登录失败提示信息20241125171146571054.png
Alert text: 验证码错误
-- 第 3 步 -- 校验提示信息: 验证码错误
** 检查点 ** 弹出提示 ----> 通过
-- 第 4 步 -- 刷新页面
PASS
* 登录_009 - 2024-11-25 17:11:47
[ case execution steps ]
-- 第 1 步 -- 输入账号: admin@czj, 密码: Ubains@4321, 验证码: cs 12
-- 第 2 步 -- 点击登录按钮
picture imgs/Login/Login_Pwd/登录_009_检查登录失败提示信息20241125171149572699.png
Alert text: 验证码错误
-- 第 3 步 -- 校验提示信息: 验证码错误
** 检查点 ** 弹出提示 ----> 通过
-- 第 4 步 -- 刷新页面
PASS
[ suite teardown ] cases\
清除浏览器
========= 测试结束 : 20241120_153921 =========
========= 测试结束 : 20241125_171152 =========
耗时 : 87.275
耗时 : 51.446
预备执行用例数量 : 1
预备执行用例数量 : 9
实际执行用例数量 : 1
实际执行用例数量 : 9
通过 : 0
通过 : 7
失败 : 0
失败 : 2
异常 : 1
异常 : 0
套件初始化失败 : 0
......
import os
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"Test report link: {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"Failed to call 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 点执行任务
schedule.every().day.at("17:34").do(run_automation_test)
while True:
schedule.run_pending()
time.sleep(1)
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论