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

补充部门管理模块脚本,目前输出了部门新增、部门删除、部门编辑、部门查询。部门编辑还存在问题,待解决。测试调用钉钉机器人发送消息接口,调用失败,根据接口文档排...

补充部门管理模块脚本,目前输出了部门新增、部门删除、部门编辑、部门查询。部门编辑还存在问题,待解决。测试调用钉钉机器人发送消息接口,调用失败,根据接口文档排查是由于webhook地址缺少拼接的密钥和时间戳导致,后续进一步验证。优化登录模块的脚本,使用hytest框架形式。
上级 8a297b8c
import csv import csv
import psutil
import logging import logging
from hytest import * from hytest import *
from selenium import webdriver from selenium import webdriver
...@@ -32,6 +33,7 @@ def browser_init(): ...@@ -32,6 +33,7 @@ def browser_init():
# 定义目标登录页面的URL # 定义目标登录页面的URL
login_url = 'https://192.168.5.218/#/login/logindf' login_url = 'https://192.168.5.218/#/login/logindf'
login_ngrok_url = "https://nat.ubainsyun.com:11046"
# 请求WebDriver打开登录页面 # 请求WebDriver打开登录页面
wd.get(login_url) wd.get(login_url)
# 最大化浏览器窗口 # 最大化浏览器窗口
...@@ -147,7 +149,6 @@ def safe_send_keys(element_locator, value, wd): ...@@ -147,7 +149,6 @@ def safe_send_keys(element_locator, value, wd):
# 如果元素不可交互,打印相应异常信息 # 如果元素不可交互,打印相应异常信息
print(f"ElementNotInteractableException: Element {element_locator} is not interactable.") print(f"ElementNotInteractableException: Element {element_locator} is not interactable.")
def safe_click(element_locator, wd): def safe_click(element_locator, wd):
""" """
对其定位器指定的元素执行安全单击。 对其定位器指定的元素执行安全单击。
...@@ -174,7 +175,6 @@ def safe_click(element_locator, wd): ...@@ -174,7 +175,6 @@ def safe_click(element_locator, wd):
# Log a message if the element is not interactable # Log a message if the element is not interactable
INFO(f"ElementNotInteractableException: Element {element_locator} is not interactable.") INFO(f"ElementNotInteractableException: Element {element_locator} is not interactable.")
def input_clear(element_locator, wd): def input_clear(element_locator, wd):
""" """
清空输入框中的文本。 清空输入框中的文本。
...@@ -234,7 +234,7 @@ def send_keyboard(element_locator, wd): ...@@ -234,7 +234,7 @@ def send_keyboard(element_locator, wd):
# 如果元素不可交互,打印不可交互错误消息。 # 如果元素不可交互,打印不可交互错误消息。
print(f"ElementNotInteractableException: Element {element_locator} is not interactable.") print(f"ElementNotInteractableException: Element {element_locator} is not interactable.")
def get_notify_text(wd,name): def get_notify_text(wd,module_name,function_name,name):
""" """
获取通知文本信息。 获取通知文本信息。
...@@ -253,7 +253,7 @@ def get_notify_text(wd,name): ...@@ -253,7 +253,7 @@ def get_notify_text(wd,name):
EC.presence_of_element_located((By.XPATH, "//p[@class='el-message__content']")) EC.presence_of_element_located((By.XPATH, "//p[@class='el-message__content']"))
).text ).text
# 屏幕截图 # 屏幕截图
SELENIUM_LOG_SCREEN(wd,"50%","User_Manage","User_Add",f"{name}_查看提示信息") SELENIUM_LOG_SCREEN(wd,"50%",module_name,function_name,name)
return notify_text return notify_text
except Exception as e: except Exception as e:
# 记录异常信息 # 记录异常信息
...@@ -318,9 +318,29 @@ def read_csv_data(csv_file_path): ...@@ -318,9 +318,29 @@ def read_csv_data(csv_file_path):
# 返回包含所有测试用例数据的列表 # 返回包含所有测试用例数据的列表
return ddt_cases return ddt_cases
def get_cpu_usage(interval=1):
import os """
获取当前进程的 CPU 占用率。
:param interval: 计算 CPU 使用率的时间间隔(秒)
:return: 当前进程的 CPU 占用率(百分比)
"""
try:
process = psutil.Process(os.getpid())
cpu_usage = process.cpu_percent(interval=interval)
if isinstance(cpu_usage, (int, float)):
return cpu_usage
else:
logging.error("CPU 使用率数据类型不正确")
return None
except psutil.NoSuchProcess:
logging.error("进程不存在")
return None
except psutil.AccessDenied:
logging.error("权限不足")
return None
except Exception as e:
logging.error(f"未知错误: {e}")
return None
def delete_images_in_directory(directory): def delete_images_in_directory(directory):
# 指定要删除的图片文件扩展名 # 指定要删除的图片文件扩展名
......
...@@ -38,4 +38,8 @@ ...@@ -38,4 +38,8 @@
- 补充MQTT模块的README文档。 - 补充MQTT模块的README文档。
- 补充脚本执行的命令注释。 - 补充脚本执行的命令注释。
11. 2024-11-08 11. 2024-11-08
- 优化封装好的SELENIUM_LOG_SCREEN函数,增加三个参数用来指定截屏文件存放路径以及截屏文件名称。 - 优化封装好的SELENIUM_LOG_SCREEN函数,增加三个参数用来指定截屏文件存放路径以及截屏文件名称。
\ No newline at end of file 12. 2024-11-11
- 补充部门管理模块脚本,目前输出了部门新增、部门删除、部门编辑、部门查询。部门编辑还存在问题,待解决。
- 测试调用钉钉机器人发送消息接口,调用失败,根据接口文档排查是由于webhook地址缺少拼接的密钥和时间戳导致,后续进一步验证。
- 优化登录模块的脚本,使用hytest框架形式。
\ No newline at end of file
import requests
import json
def send_message(title, text, mobile):
webhook_url = 'https://oapi.dingtalk.com/robot/send?access_token=b0eea0bbf097ce3badb4c832d2cd0267a50486f395ec8beca6e2042102bb295b' # 替换为实际的Webhook URL
headers = {'Content-Type': 'application/json'}
message = {
'msgtype': 'markdown',
'markdown': {
'title': title,
'text': text
},
"at": {
"atMobiles": mobile,
"isAtAll": False
}
}
try:
response = requests.post(webhook_url, data=json.dumps(message), headers=headers)
if response.status_code == 200:
print('消息发送成功!', message)
print('响应内容:', response.text)
else:
print('消息发送失败,状态码:', response.status_code)
print('响应内容:', response.text)
except requests.exceptions.RequestException as e:
print('请求异常:', e)
if __name__ == "__main__":
send_message('测试标题', '这是测试内容', '13724387318')
\ No newline at end of file
from hytest import *
import sys import sys
import os import os
# 获取当前脚本的绝对路径 # 获取当前脚本的绝对路径
......
...@@ -52,13 +52,13 @@ class Main_User_Manage_0001: ...@@ -52,13 +52,13 @@ class Main_User_Manage_0001:
sleep(2) sleep(2)
# 屏幕截图 # 屏幕截图
SELENIUM_LOG_SCREEN(wd) SELENIUM_LOG_SCREEN(wd,"50%","User_Manage","User_Main","用户管理主流程-用户信息填入")
STEP(3, "点击【确定】按钮") STEP(3, "点击【确定】按钮")
# 点击确定按钮 # 点击确定按钮
safe_click((By.XPATH, "//div[@aria-label='添加用户']//span[contains(text(),'确定')]"), wd) safe_click((By.XPATH, "//div[@aria-label='添加用户']//span[contains(text(),'确定')]"), wd)
sleep(2) sleep(2)
notify_text = get_notify_text(wd) notify_text = get_notify_text(wd, 'User_Manage', 'User_Main', '用户管理主流程-用户新增')
# 检查点:验证提示信息是否与预期相符 # 检查点:验证提示信息是否与预期相符
CHECK_POINT('弹出提示', notify_text == "添加成功") CHECK_POINT('弹出提示', notify_text == "添加成功")
...@@ -75,7 +75,7 @@ class Main_User_Manage_0001: ...@@ -75,7 +75,7 @@ class Main_User_Manage_0001:
safe_click((By.XPATH, "//input[@value='登 录']"),wd) safe_click((By.XPATH, "//input[@value='登 录']"),wd)
sleep(2) sleep(2)
notify_text = get_notify_text(wd) notify_text = get_notify_text(wd, 'User_Manage', 'User_Main', '用户管理主流程-用户首次登录')
# 检查点:验证提示信息是否与预期相符 # 检查点:验证提示信息是否与预期相符
INFO(f"首次登录提示:{notify_text}") INFO(f"首次登录提示:{notify_text}")
CHECK_POINT('弹出提示', notify_text == "首次登录,请修改密码") CHECK_POINT('弹出提示', notify_text == "首次登录,请修改密码")
...@@ -89,7 +89,7 @@ class Main_User_Manage_0001: ...@@ -89,7 +89,7 @@ class Main_User_Manage_0001:
safe_click((By.XPATH, "//span[contains(text(),'确定')]"),wd) safe_click((By.XPATH, "//span[contains(text(),'确定')]"),wd)
sleep(2) sleep(2)
notify_text = get_notify_text(wd) notify_text = get_notify_text(wd, 'User_Manage', 'User_Main', '用户管理主流程-用户密码修改')
# 检查点:验证提示信息是否与预期相符 # 检查点:验证提示信息是否与预期相符
INFO(f"首次登录修改密码提示:{notify_text}") INFO(f"首次登录修改密码提示:{notify_text}")
CHECK_POINT('弹出提示', notify_text == "修改成功,请重新登录") CHECK_POINT('弹出提示', notify_text == "修改成功,请重新登录")
...@@ -107,4 +107,4 @@ class Main_User_Manage_0001: ...@@ -107,4 +107,4 @@ class Main_User_Manage_0001:
# 检查点:验证提示信息是否与预期相符 # 检查点:验证提示信息是否与预期相符
INFO(f"登录系统提示:{notify_text}") INFO(f"登录系统提示:{notify_text}")
CHECK_POINT('登录成功校验', notify_text == "欢迎 自动化测试公司") CHECK_POINT('登录成功校验', notify_text == "欢迎 自动化测试公司")
SELENIUM_LOG_SCREEN(wd) SELENIUM_LOG_SCREEN(wd,"50%","User_Manage","User_Main","用户管理主流程-用户登录")
\ No newline at end of file \ No newline at end of file
...@@ -80,7 +80,7 @@ class Add_User_00x: ...@@ -80,7 +80,7 @@ class Add_User_00x:
safe_click((By.XPATH, "//div[@aria-label='添加用户']//span[contains(text(),'确定')]"), wd) safe_click((By.XPATH, "//div[@aria-label='添加用户']//span[contains(text(),'确定')]"), wd)
sleep(2) sleep(2)
notify_text = get_notify_text(wd,name) notify_text = get_notify_text(wd,"User_Manage","User_Add",f"{name}_检查提示信息")
#输出提示信息 #输出提示信息
INFO(f"Alert text: {notify_text}") INFO(f"Alert text: {notify_text}")
......
...@@ -16,98 +16,22 @@ except ModuleNotFoundError as e: ...@@ -16,98 +16,22 @@ except ModuleNotFoundError as e:
print("尝试使用绝对路径导入") print("尝试使用绝对路径导入")
from 预定系统.Base.base import * from 预定系统.Base.base import *
# 提取常量
XPATH_USERNAME_INPUT = '//*[@id="app"]/div/div[3]/div[1]/div[2]/div/form/div[1]/div/input'
# 用户名输入框的 XPath 路径
XPATH_PASSWORD_INPUT = '//*[@id="app"]/div/div[3]/div[1]/div[2]/div/form/div[2]/div/input'
# 密码输入框的 XPath 路径
XPATH_CODE_INPUT = '//*[@id="app"]/div/div[3]/div[1]/div[2]/div/form/div[3]/div[1]/div/input'
# 验证码输入框的 XPath 路径
XPATH_LOGIN_BUTTON = '//*[@id="app"]/div/div[3]/div[1]/div[2]/div/form/div[4]/input'
# 登录按钮的 XPath 路径
XPATH_WELCOME_TEXT = '//*[@id="app"]/div/div[1]/div/span[1]'
# 欢迎文本的 XPath 路径
CLASS_MESSAGE_CONTENT = 'el-message__content'
# 消息内容的 CSS 类名
DEFAULT_WAIT_TIME = 20 DEFAULT_WAIT_TIME = 20
# 默认等待时间(秒),用于元素加载或操作之间的等待 # 默认等待时间(秒),用于元素加载或操作之间的等待
# 获取当前脚本所在的目录
current_dir = os.path.dirname(os.path.abspath(__file__))
def clear_and_send_keys(wd, locator, value): # 构建CSV文件的绝对路径
""" csv_file_path = os.path.join(current_dir, '../../测试数据/登录模块/账号密码登录.csv')
清空输入框并发送指定值
该函数首先等待指定的元素变得可点击,然后清空该元素的内容,
最后向该元素发送指定的值。这个过程常用于表单填写自动化。
参数:
- wd: WebDriver实例,用于与浏览器交互。
- locator: 定位器,用于定位页面上的元素。
- value: 需要发送到元素的值,通常为字符串。
返回值:
"""
# 等待元素变得可点击,这是为了确保元素已经加载完成并且可以接收输入
element = WebDriverWait(wd, DEFAULT_WAIT_TIME).until(EC.element_to_be_clickable(locator))
# 清空元素的内容,通常用于输入框,以确保之前的内容不会影响新的输入
element.clear()
# 向元素发送指定的值,这是自动化表单填写的关键步骤
element.send_keys(value)
class Login_00x: class Login_00x:
"""
ddt_cases = [ 执行指令是:
{ 1.cd 预定系统
'name': '登录 UI_001', 2.hytest --report_title 账号密码登录测试报告 --test 登录_0**
'para': [None,'Ubains@4321','csba','请输入账号!'] """
}, ddt_cases = read_csv_data(csv_file_path)
{
'name': '登录 UI_002',
'para': ['admin@czj',None,'csba','请输入密码!']
},
{
'name': '登录 UI_003',
'para': ['admin@czj','Ubains@4321',None,'请输入验证码!']
},
{
'name': '登录 UI_004',
'para': ['admin@czj112','Ubains@4321','csba','账号或密码错误']
},
{
'name': '登录 UI_005',
'para': ['adM 12in@czj','Ubains@4321','csba','账号或密码错误']
},
{
'name': '登录 UI_006',
'para': ['admin@czj', '12345', 'csba', '账号或密码错误']
},
{
'name': '登录 UI_007',
'para': ['admin@czj', 'U bains1s@432', 'csba', '账号或密码错误']
},
{
'name': '登录 UI_008',
'para': ['admin@czj', 'Ubains@4321', '123', '验证码错误']
},
{
'name': '登录 UI_009',
'para': ['admin@czj', 'Ubains@4321', 'cs 12', '验证码错误']
},
{
'name': '登录 UI_010',
'para': ['admin@czj', 'Ubains@4321', 'csba', '欢迎 预定标准版测试']
}
]
def teststeps(self): def teststeps(self):
""" """
...@@ -119,43 +43,35 @@ class Login_00x: ...@@ -119,43 +43,35 @@ class Login_00x:
# 从全局存储中获取webdriver实例 # 从全局存储中获取webdriver实例
wd = GSTORE['wd'] wd = GSTORE['wd']
# 从self.para中解构出用户名、密码、验证码和检查文本 # 从self.para中解构出用户名、密码、验证码和检查文本
name = self.name
username, password, code, check_text = self.para username, password, code, check_text = self.para
# 步骤1:输入账号、密码和验证码 # 步骤1:输入账号、密码和验证码
STEP(1, f"输入账号: {username}, 密码: {password}, 验证码: {code}") STEP(1, f"输入账号: {username}, 密码: {password}, 验证码: {code}")
# 如果用户名不为空,则清空用户名输入框并输入用户名 # 如果用户名不为空,则清空用户名输入框并输入用户名
if username is not None: safe_send_keys((By.XPATH, '//*[@id="app"]/div/div[3]/div[1]/div[2]/div/form/div[1]/div/input'), username,wd)
clear_and_send_keys(wd, (By.XPATH, XPATH_USERNAME_INPUT), username)
# 如果密码不为空,则清空密码输入框并输入密码 # 如果密码不为空,则清空密码输入框并输入密码
if password is not None: safe_send_keys((By.XPATH, '//*[@id="app"]/div/div[3]/div[1]/div[2]/div/form/div[2]/div/input'), password,wd)
clear_and_send_keys(wd, (By.XPATH, XPATH_PASSWORD_INPUT), password)
# 如果验证码不为空,则清空验证码输入框并输入验证码 # 如果验证码不为空,则清空验证码输入框并输入验证码
if code is not None: safe_send_keys((By.XPATH, '//*[@id="app"]/div/div[3]/div[1]/div[2]/div/form/div[3]/div[1]/div/input'), code,wd)
clear_and_send_keys(wd, (By.XPATH, XPATH_CODE_INPUT), code)
# 步骤2:点击登录按钮 # 步骤2:点击登录按钮
STEP(2, "点击登录按钮") STEP(2, "点击登录按钮")
# 等待登录按钮可点击,并点击它 # 等待登录按钮可点击,并点击它
login_button = WebDriverWait(wd, DEFAULT_WAIT_TIME).until( safe_click((By.XPATH, '//*[@id="app"]/div/div[3]/div[1]/div[2]/div/form/div[4]/input'),wd)
EC.element_to_be_clickable((By.XPATH, XPATH_LOGIN_BUTTON)))
login_button.click()
# 等待1秒以允许页面响应 # 等待1秒以允许页面响应
sleep(2) sleep(2)
SELENIUM_LOG_SCREEN(wd)
# 根据预期的检查文本类型,获取并记录提示信息 # 根据预期的检查文本类型,获取并记录提示信息
if check_text == "欢迎 预定标准版测试": if check_text == "欢迎 预定标准版测试":
notify_text = WebDriverWait(wd, DEFAULT_WAIT_TIME).until( notify_text = elment_get_text((By.XPATH, '//*[@id="app"]/div/div[1]/div/span[1]'),wd)
EC.presence_of_element_located((By.XPATH, XPATH_WELCOME_TEXT)) SELENIUM_LOG_SCREEN(wd, '50%', 'Login', 'Login_Pwd', f"{name}_检查登录成功提示信息")
).text
INFO(f"Alert text: {notify_text}") INFO(f"Alert text: {notify_text}")
else: else:
try: try:
notify_text = WebDriverWait(wd, DEFAULT_WAIT_TIME).until( notify_text = get_notify_text(wd, 'Login','Login_Pwd', f"{name}_检查登录失败提示信息")
EC.presence_of_element_located((By.CLASS_NAME, CLASS_MESSAGE_CONTENT))
).text
INFO(f"Alert text: {notify_text}") INFO(f"Alert text: {notify_text}")
except Exception as e: except Exception as e:
INFO(f"Exception occurred: {e}") INFO(f"Exception occurred: {e}")
...@@ -167,16 +83,6 @@ class Login_00x: ...@@ -167,16 +83,6 @@ class Login_00x:
# 检查点:验证提示信息是否与预期相符 # 检查点:验证提示信息是否与预期相符
CHECK_POINT('弹出提示', notify_text == check_text) CHECK_POINT('弹出提示', notify_text == check_text)
def teardown(self):
"""
测试 teardown 方法,用于测试结束后清理环境。
该方法从全局存储 GSTORE 中获取 WebDriver 实例,并在测试结束前刷新当前页面。
这是为了确保每个测试都是在干净的状态下执行,避免不同测试之间相互影响。
"""
# 从全局存储中获取 WebDriver 实例
wd = GSTORE['wd']
# 执行步骤 4:刷新页面,以确保下一个测试从一个干净的状态开始 # 执行步骤 4:刷新页面,以确保下一个测试从一个干净的状态开始
STEP(4, "刷新页面") STEP(4, "刷新页面")
wd.refresh() wd.refresh()
\ No newline at end of file
import sys
import os
# 获取当前脚本的绝对路径
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():
wd = GSTORE['wd']
admin_login()
enter_the_backend()
INFO("打开账号管理下拉菜单")
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
from time import sleep
from hytest import *
# 获取当前脚本的绝对路径
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 *
# 获取当前脚本所在的目录
current_dir = os.path.dirname(os.path.abspath(__file__))
# 构建CSV文件的绝对路径
csv_file_path = os.path.join(current_dir, '../../测试数据/部门管理模块/部门主流程.csv')
class Main_Department_Manage_000x:
# 执行指令是:hytest --test 部门主流程_0**
ddt_cases = read_csv_data(csv_file_path)
def teststeps(self):
"""
执行测试步骤以部门管理主流程功能。
本函数根据参数输入部门名称,并检查新增后的提示信息是否与预期相符。
"""
# 初始化通知文本为空字符串
notify_text = ""
# 从全局存储中获取webdriver实例
wd = GSTORE['wd']
# 从self.para中解构出用户名、密码、验证码和检查文本
name = self.name
department_name, check_add_text, check_edit_text, check_del_text = self.para
# 步骤1: 点击部门新增按钮
STEP(1, "点击部门新增按钮")
# 安全点击操作,找到新增按钮并点击
safe_click((By.XPATH, "//button[@class='el-button el-button--primary el-button--medium']"), wd)
sleep(1)
# 获取新增后的通知文本
notify_text = get_notify_text(wd, "Department_Manage", "Department_Main", f"{name}部门新增")
# 检查新增提示文本是否与预期相符
INFO(f"部门新增提示文本:{notify_text}")
CHECK_POINT("部门新增提示文本", notify_text == check_add_text)
# 步骤2: 修改部门名称
STEP(2, "修改部门名称")
# 输入默认部门名称
safe_send_keys((By.XPATH, "//input[@placeholder='输入关键字']"), "默认部门名称", wd)
# 发送回车键
INFO("输入部门名称:默认部门名称 查询")
send_keyboard((By.XPATH, "//input[@placeholder='输入关键字']"), wd)
sleep(2)
INFO("点击编辑按钮")
# 安全点击编辑按钮
safe_click((By.XPATH,
"//div[@class='content']//div[2]//div[1]//span[2]//span[2]//button[2]"),wd)
INFO(f"输入部门名称:{department_name}")
# 输入新的部门名称
safe_send_keys((By.XPATH,
"//input[@placeholder='输入关键字搜索']"),
department_name, wd)
INFO("点击确定按钮")
# 点击确定按钮
safe_click((By.XPATH, "//div[@aria-label='编 辑']//span[contains(text(),'确定')]"), wd)
sleep(1)
# 获取编辑后的通知文本
notify_text = get_notify_text(wd, "Department_Manage", "Department_Main", f"{name}部门编辑")
INFO(f"部门编辑提示文本:{notify_text}")
# 检查编辑提示文本是否与预期相符
CHECK_POINT("部门编辑提示文本", notify_text == check_edit_text)
# 步骤3: 查询部门名称
STEP(3, "查询部门名称")
# 输入部门名称进行查询
INFO(f"输入部门名称:{department_name},进行查询")
safe_send_keys((By.XPATH, "//input[@placeholder='输入关键字']"), department_name, wd)
send_keyboard((By.XPATH, "//input[@placeholder='输入关键字']"), wd)
sleep(1)
# 获取查询结果的部门名称文本
department_name_text = elment_get_text((By.XPATH, f"//span[@title='{department_name}']"), wd)
INFO(f"部门名称查询结果:{department_name_text}")
sleep(1)
# 检查查询结果是否与输入的部门名称一致
CHECK_POINT("部门名称查询结果", department_name in department_name_text)
# 步骤4: 删除部门
STEP(4, "删除部门")
INFO(f"点击删除按钮")
# 安全点击删除按钮
safe_click((By.XPATH, "//div[@class='el-tree-node is-expanded is-focusable']//span[contains(text(),'删除')]"),
wd)
# 点击确认删除按钮
safe_click((By.XPATH,
"//button[contains(@class,'el-button el-button--default el-button--small el-button--primary')]//span[contains(text(),'确定')]"),
wd)
sleep(1)
# 获取删除后的通知文本
notify_text = get_notify_text(wd, "Department_Manage", "Department_Main", f"{name}部门删除")
INFO(f"部门删除提示文本:{notify_text}")
# 检查删除提示文本是否与预期相符
CHECK_POINT("部门删除提示文本", notify_text == check_del_text)
\ No newline at end of file
from time import sleep
from hytest import *
# 获取当前脚本的绝对路径
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 *
# 获取当前脚本所在的目录
current_dir = os.path.dirname(os.path.abspath(__file__))
# 构建CSV文件的绝对路径
csv_file_path = os.path.join(current_dir, '../../测试数据/部门管理模块/部门删除.csv')
class Department_Add_000x:
# 执行指令是:hytest --test 部门新增_0**
ddt_cases = read_csv_data(csv_file_path)
def teststeps(self):
"""
执行测试步骤以部门管理主流程功能。
本函数根据参数输入部门名称,并检查新增后的提示信息是否与预期相符。
"""
# 初始化通知文本为空字符串
notify_text = ""
# 从全局存储中获取webdriver实例
wd = GSTORE['wd']
# 从self.para中解构出用户名、密码、验证码和检查文本
name = self.name
department_delete_type, check_add_text, check_del_text = self.para
if department_delete_type == "单个删除":
sleep(2)
# 步骤1: 点击部门新增按钮
STEP(1, "点击部门新增按钮")
# 安全点击操作,找到新增按钮并点击
safe_click((By.XPATH, "//button[@class='el-button el-button--primary el-button--medium']"), wd)
sleep(1)
STEP(2, "检查父级部门新增提示文本信息")
# 获取新增后的通知文本
notify_text = get_notify_text(wd, "Department_Manage", "Department_Delete", f"{name}部门新增")
# 检查新增提示文本是否与预期相符
INFO(f"父级部门新增提示文本:{notify_text}")
CHECK_POINT("父级部门新增提示文本", notify_text == check_add_text)
sleep(2)
STEP(3, "点击部门删除按钮")
safe_click((By.XPATH, "(//span[contains(text(),'删除')])[4]"),wd)
safe_click((By.XPATH, "(//span[contains(text(),'确定')])[4]"),wd)
sleep(2)
notify_text = get_notify_text(wd, "Department_Manage", "Department_Delete", f"{name}部门单个删除")
INFO(f"单个部门删除提示文本:{notify_text}")
CHECK_POINT("单个部门删除提示文本", notify_text == check_del_text)
sleep(2)
elif department_delete_type == "批量删除":
sleep(2)
# 步骤1: 点击部门新增按钮
STEP(1, "点击部门新增按钮")
# 安全点击操作,找到新增按钮并点击
INFO("点击部门新增按钮,新增多个部门")
for i in range(3):
safe_click(
(By.XPATH, "(//span[contains(text(),'添 加')])[1]"),
wd)
sleep(2)
notify_text = get_notify_text(wd, "Department_Manage", "Department_Delete", f"{name}第{i+1}个部门新增")
CHECK_POINT(f"新增第{i+1}个部门提示文本", notify_text == check_add_text)
STEP(2, "检查勾选多个部门")
safe_click((By.XPATH, "(//span[@class='el-checkbox__inner'])[3]"),wd)
safe_click((By.XPATH, "(//span[@class='el-checkbox__inner'])[4]"),wd)
safe_click((By.XPATH, "(//span[@class='el-checkbox__inner'])[5]"),wd)
sleep(1)
STEP(3, "点击批量删除按钮")
safe_click((By.XPATH, "(//span[contains(text(),'批量删除')])[1]"),wd)
safe_click((By.XPATH, "(//span[contains(text(),'确定')])[4]"),wd)
sleep(2)
notify_text = get_notify_text(wd, "Department_Manage", "Department_Delete", f"{name}部门批量删除")
INFO(f"批量部门删除提示文本:{notify_text}")
CHECK_POINT("批量部门删除提示文本", notify_text == check_del_text)
elif department_delete_type == "不勾选部门进行批量删除":
sleep(2)
STEP(1, "点击批量删除按钮")
safe_click((By.XPATH, "//button[@type='button']//span[contains(text(),'批量删除')]"), wd)
sleep(2)
STEP(2, "检查提示信息")
notify_text = get_notify_text(wd, "Department_Manage", "Department_Delete", f"{name}部门不勾选批量删除")
CHECK_POINT("不勾选部门进行批量删除提示文本", notify_text == check_del_text)
\ No newline at end of file
from time import sleep
from hytest import *
# 获取当前脚本的绝对路径
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 *
# 获取当前脚本所在的目录
current_dir = os.path.dirname(os.path.abspath(__file__))
# 构建CSV文件的绝对路径
csv_file_path = os.path.join(current_dir, '../../测试数据/部门管理模块/部门新增.csv')
class Department_Add_000x:
# 执行指令是:hytest --test 部门新增_0**
ddt_cases = read_csv_data(csv_file_path)
def teststeps(self):
"""
执行测试步骤以部门管理主流程功能。
本函数根据参数输入部门名称,并检查新增后的提示信息是否与预期相符。
"""
# 初始化通知文本为空字符串
notify_text = ""
# 从全局存储中获取webdriver实例
wd = GSTORE['wd']
# 从self.para中解构出用户名、密码、验证码和检查文本
name = self.name
department_name, department_type, check_add_text = self.para
# 步骤1: 点击部门新增按钮
STEP(1, "点击部门新增按钮")
if department_type == "父级部门":
# 安全点击操作,找到新增按钮并点击
safe_click((By.XPATH, "//button[@class='el-button el-button--primary el-button--medium']"), wd)
safe_send_keys((By.XPATH, "//input[@placeholder='输入关键字']"), department_name, wd)
send_keyboard((By.XPATH, "//input[@placeholder='输入关键字']"), wd)
sleep(1)
STEP(2, "检查父级部门新增提示文本信息")
# 获取新增后的通知文本
notify_text = get_notify_text(wd, "Department_Manage", "Department_Add", f"{name}部门新增")
# 检查新增提示文本是否与预期相符
INFO(f"父级部门新增提示文本:{notify_text}")
CHECK_POINT("父级部门新增提示文本", notify_text == check_add_text)
elif department_type == "二级子部门":
# 安全点击操作,找到新增按钮并点击
safe_click((By.XPATH, "//div[@class='el-tree-node is-expanded is-focusable']//span[contains(text(),'添 加')]"), wd)
sleep(1)
STEP(2, "检查二级子部门新增提示文本信息")
# 获取新增后的通知文本
notify_text = get_notify_text(wd, "Department_Manage", "Department_Add", f"{name}部门新增")
# 检查新增提示文本是否与预期相符
INFO(f"二级子部门新增提示文本:{notify_text}")
CHECK_POINT("二级子部门新增提示文本", notify_text == check_add_text)
\ No newline at end of file
from time import sleep
from hytest import *
# 获取当前脚本的绝对路径
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 *
# 获取当前脚本所在的目录
current_dir = os.path.dirname(os.path.abspath(__file__))
# 构建CSV文件的绝对路径
csv_file_path = os.path.join(current_dir, '../../测试数据/部门管理模块/部门查询.csv')
class Department_Query_000x:
"""
执行指令是:
1.cd 预定系统
2.hytest --report_title 部门查询测试报告 --test 部门查询_0**
"""
ddt_cases = read_csv_data(csv_file_path)
def teststeps(self):
"""
执行测试步骤以部门管理主流程功能。
本函数根据参数输入部门名称,并检查新增后的提示信息是否与预期相符。
"""
# 初始化通知文本为空字符串
notify_text = ""
# 从全局存储中获取webdriver实例
wd = GSTORE['wd']
# 从self.para中解构出用户名、密码、验证码和检查文本
name = self.name
department_name, new_department_name, query_type, check_query_text = self.para
STEP(1, "增加测试数据")
# 点击添加按钮以开始新增部门流程
safe_click((By.XPATH, "(//span[contains(text(),'添 加')])[1]"), wd)
sleep(2)
# 获取新增后的通知文本并与预期比较
notify_text = get_notify_text(wd, "Department_Manage", "Department_Query", f"{name}部门新增")
INFO(f"部门新增提示:{notify_text}")
CHECK_POINT(f"新增部门提示文本", notify_text == "添加成功")
STEP(2, f"选择:{department_name},点击编辑按钮")
sleep(2)
# 点击编辑按钮以开始编辑部门流程
safe_click((By.XPATH, "(//span[contains(text(),'编 辑')])[3]"), wd)
notify_text = elment_get_text((By.XPATH, "//span[@class='el-dialog__title'][contains(text(),'编 辑')]"), wd)
CHECK_POINT("部门编辑页标题", notify_text == "编 辑")
STEP(3, f"输入部门名称:{new_department_name}")
# 输入新的部门名称
safe_send_keys((By.XPATH, "//input[@placeholder='输入关键字搜索']"), new_department_name, wd)
safe_click((By.XPATH, "//div[@aria-label='编 辑']//span[contains(text(),'确定')]"), wd)
sleep(1)
STEP(4, "检查部门编辑提示信息")
sleep(2)
# 获取编辑后的通知文本并与预期比较
notify_text = get_notify_text(wd, "Department_Manage", "Department_Query", f"{name}部门编辑")
INFO(f"部门编辑提示:{notify_text}")
CHECK_POINT("检查部门编辑提示", notify_text == "修改成功")
STEP(5, f"输入原部门名称:{department_name}进行查询")
# 输入原部门名称以进行查询
safe_send_keys((By.XPATH, "//input[@placeholder='输入关键字']"), department_name, wd)
send_keyboard((By.XPATH, "//input[@placeholder='输入关键字']"), wd)
sleep(1)
STEP(6, "检查部门查询结果")
notify_text = elment_get_text((By.XPATH, "//span[@class='el-tree__empty-text']"), wd)
INFO(f"部门查询结果:{notify_text}")
CHECK_POINT("部门查询提示", notify_text == "暂无数据")
if query_type == "精确查询":
STEP(7, f"输入新部门名称:{check_query_text},进行精确查询")
safe_send_keys((By.XPATH, "//input[@placeholder='输入关键字']"), check_query_text, wd)
send_keyboard((By.XPATH, "//input[@placeholder='输入关键字']"), wd)
SELENIUM_LOG_SCREEN(wd, "50%", "Department_Manage", "Department_Query", f"{name}_部门精确查询")
sleep(1)
elif query_type == "模糊查询":
STEP(7, f"输入新部门名称:{check_query_text},进行模糊查询")
safe_send_keys((By.XPATH, "//input[@placeholder='输入关键字']"), check_query_text, wd)
send_keyboard((By.XPATH, "//input[@placeholder='输入关键字']"), wd)
SELENIUM_LOG_SCREEN(wd, "50%", "Department_Manage", "Department_Query", f"{name}_部门模糊查询")
sleep(1)
STEP(8, "检查部门查询结果")
notify_text = elment_get_text((By.XPATH, f"//span[@title='{new_department_name}']"), wd)
INFO(f"部门查询结果:{notify_text}")
CHECK_POINT("部门查询结果", check_query_text in notify_text)
STEP(9, "删除部门数据")
# 点击删除按钮以开始删除部门流程
safe_click((By.XPATH, "(//span[contains(text(),'删除')])[4]"), wd)
safe_click((By.XPATH, "(//span[contains(text(),'确定')])[4]"), wd)
sleep(2)
# 获取删除后的通知文本并与预期比较
notify_text = get_notify_text(wd, "Department_Manage", "Department_Query", f"{name}删除部门数据")
CHECK_POINT("部门删除提示", notify_text == "删除成功")
INFO(f"检查CPU使用率:{get_cpu_usage()}")
\ No newline at end of file
from time import sleep
from hytest import *
# 获取当前脚本的绝对路径
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 *
# 获取当前脚本所在的目录
current_dir = os.path.dirname(os.path.abspath(__file__))
# 构建CSV文件的绝对路径
csv_file_path = os.path.join(current_dir, '../../测试数据/部门管理模块/部门编辑.csv')
class Department_Edit_000x:
"""
执行指令是:
1.cd 预定系统
2.hytest --report_title 部门编辑测试报告 --test 部门编辑_0**
"""
ddt_cases = read_csv_data(csv_file_path)
def teststeps(self):
"""
执行测试步骤以部门管理主流程功能。
本函数根据参数输入部门名称,并检查新增后的提示信息是否与预期相符。
"""
# 初始化通知文本为空字符串
notify_text = ""
# 从全局存储中获取webdriver实例
wd = GSTORE['wd']
# 从self.para中解构出用户名、密码、验证码和检查文本
name = self.name
department_name, new_department_name, department_user, check_text = self.para
# 步骤1:查询部门
STEP(1, "查询部门")
# 在搜索框中输入部门名称
safe_send_keys((By.XPATH, "//input[@placeholder='输入关键字']"), department_name, wd)
# 触发键盘事件以启动搜索
send_keyboard((By.XPATH, "//input[@placeholder='输入关键字']"), wd)
sleep(3)
# 获取查询结果的部门名称文本
department_name_text = elment_get_text((By.XPATH, f"//span[@title='{department_name}']"), wd)
INFO(f"部门名称查询结果:{department_name_text}")
# 检查查询结果是否与输入的部门名称一致
CHECK_POINT("部门名称查询结果", department_name in department_name_text)
# 步骤2:选择部门并点击编辑按钮
STEP(2, f"选择:{department_name},点击编辑按钮")
safe_click((By.XPATH, "(//span[contains(text(),'编 辑')])[2]"), wd)
# 检查编辑页面标题是否为“编辑”
notify_text = elment_get_text((By.XPATH, "//span[@class='el-dialog__title'][contains(text(),'编 辑')]"), wd)
CHECK_POINT("部门编辑页标题", notify_text == "编 辑")
# 步骤3:在部门编辑页查询部门负责人
STEP(3, f"进入部门编辑页,查询部门负责人:{department_user}")
safe_send_keys((By.XPATH, "//input[@placeholder='输入用户名称搜索']"), department_user, wd)
send_keyboard((By.XPATH, "//input[@placeholder='输入用户名称搜索']"), wd)
sleep(2)
department_user_text = elment_get_text((By.XPATH, f"//div[normalize-space()='{department_user}']"), wd)
CHECK_POINT("部门负责人查询结果", department_user in department_user_text)
# 步骤4:勾选部门负责人
STEP(4, f"勾选部门负责人:{department_user}")
department_user_text = elment_get_text((By.CSS_SELECTOR, "div[class='currentDep'] div"), wd)
INFO(f"部门负责人查询结果:{department_user_text}")
if department_user_text != department_user:
safe_click((By.XPATH, "//div[@class='department-item user']"), wd)
sleep(2)
department_user_text = elment_get_text((By.XPATH, "//div[@class='selectionsuser-name']"), wd)
CHECK_POINT("部门负责人选择结果", department_user in department_user_text)
# 步骤5:删除部门负责人
STEP(5, f"删除部门负责人:{department_user}")
safe_click((By.XPATH, "//i[@class='el-icon-delete']"), wd)
# 检查删除后的提示信息
notify_text = elment_get_text((By.XPATH, "//p[contains(text(),'暂未选择人员')]"), wd)
INFO(f"部门负责人删除提示:{notify_text}")
CHECK_POINT("部门负责人删除结果", notify_text == "暂未选择人员")
# 步骤6:再次勾选部门负责人
STEP(6, f"勾选部门负责人:{department_user}")
safe_click((By.XPATH, "//div[@class='department-item user']"), wd)
sleep(1)
department_user_text = elment_get_text((By.XPATH, "//div[@class='selectionsuser-name']"), wd)
CHECK_POINT("检查部门负责人选择结果", department_user in department_user_text)
# 步骤7:输入新的部门名称并点击确定
STEP(7, f"输入部门名称:{new_department_name},点击【确定】按钮")
safe_send_keys((By.XPATH, "//input[@placeholder='输入关键字搜索']"), new_department_name, wd)
safe_click((By.XPATH, "//div[@aria-label='编 辑']//span[contains(text(),'确定')]"), wd)
sleep(1)
# 获取并检查编辑部门后的提示信息
notify_text = get_notify_text(wd, "Department_Manage", "Department_Edit", name)
INFO(f"部门编辑提示:{notify_text}")
CHECK_POINT("检查部门编辑提示", notify_text == check_text)
# 步骤8:检查部门负责人
STEP(8, f"检查部门负责人:{department_user}")
safe_send_keys((By.XPATH, "//input[@placeholder='输入关键字']"), new_department_name, wd)
send_keyboard((By.XPATH, "//input[@placeholder='输入关键字']"), wd)
sleep(1)
safe_click((By.XPATH, "(//span[contains(text(),'编 辑')])[2]"), wd)
notify_text = elment_get_text(
(By.XPATH, f"//div[@class='currentDep']//div[contains(text(),'{department_user}')]"), wd)
CHECK_POINT("检查部门负责人查询结果", department_user in notify_text)
\ No newline at end of file
=== [ 收集测试用例 ] ===
== cases\__st__.py
== cases\测试\test.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文件已读取
== cases\设备管理\安卓信息上报.py
** no cases in this file, skip it.
== cases\设备管理\毫米波雷达上报.py
** 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
========= 测试开始 : 20241111_170015 =========
>>> cases\
[ suite setup ] cases\
-- 第 1 步 -- 初始化浏览器
'----------' 正在初始化浏览器 '----------'
-- 第 2 步 -- 处理SSL认证
'----------' 正在处理SSL证书警告 '----------'
'----------' SSL证书警告处理完成 '----------'
>>> cases\登录模块\账号密码登录测试.py
* 登录_001 - 2024-11-11 17:00:19
[ case execution steps ]
-- 第 1 步 -- 输入账号: , 密码: Ubains@4321, 验证码: csba
-- 第 2 步 -- 点击登录按钮
picture imgs/Login/Login_Pwd/登录_001_登录操作20241111170021344837.png
picture imgs/Login/Login_Pwd/登录_001_检查登录失败提示信息20241111170021949157.png
Alert text: 请输入账号!
-- 第 3 步 -- 校验提示信息: 请输入账号!
** 检查点 ** 弹出提示 ----> 通过
-- 第 4 步 -- 刷新页面
PASS
* 登录_002 - 2024-11-11 17:00:22
[ case execution steps ]
-- 第 1 步 -- 输入账号: admin@czj, 密码: , 验证码: csba
-- 第 2 步 -- 点击登录按钮
picture imgs/Login/Login_Pwd/登录_002_登录操作20241111170024907944.png
picture imgs/Login/Login_Pwd/登录_002_检查登录失败提示信息20241111170025469068.png
Alert text: 请输入密码!
-- 第 3 步 -- 校验提示信息: 请输入密码!
** 检查点 ** 弹出提示 ----> 通过
-- 第 4 步 -- 刷新页面
PASS
* 登录_003 - 2024-11-11 17:00:26
[ case execution steps ]
-- 第 1 步 -- 输入账号: admin@czj, 密码: Ubains@4321, 验证码:
-- 第 2 步 -- 点击登录按钮
picture imgs/Login/Login_Pwd/登录_003_登录操作20241111170028324330.png
picture imgs/Login/Login_Pwd/登录_003_检查登录失败提示信息20241111170028876516.png
Alert text: 请输入验证码!
-- 第 3 步 -- 校验提示信息: 请输入验证码!
** 检查点 ** 弹出提示 ----> 通过
-- 第 4 步 -- 刷新页面
PASS
* 登录_004 - 2024-11-11 17:00:29
[ case execution steps ]
-- 第 1 步 -- 输入账号: admin@czj112, 密码: Ubains@4321, 验证码: csba
-- 第 2 步 -- 点击登录按钮
picture imgs/Login/Login_Pwd/登录_004_登录操作20241111170031759724.png
picture imgs/Login/Login_Pwd/登录_004_检查登录失败提示信息20241111170032287914.png
Alert text: 账号或密码错误
-- 第 3 步 -- 校验提示信息: 账号或密码错误
** 检查点 ** 弹出提示 ----> 通过
-- 第 4 步 -- 刷新页面
PASS
* 登录_005 - 2024-11-11 17:00:32
[ case execution steps ]
-- 第 1 步 -- 输入账号: adM 12in@czj, 密码: Ubains@4321, 验证码: csba
-- 第 2 步 -- 点击登录按钮
picture imgs/Login/Login_Pwd/登录_005_登录操作20241111170035158291.png
picture imgs/Login/Login_Pwd/登录_005_检查登录失败提示信息20241111170035602430.png
Alert text: 账号或密码错误
-- 第 3 步 -- 校验提示信息: 账号或密码错误
** 检查点 ** 弹出提示 ----> 通过
-- 第 4 步 -- 刷新页面
PASS
* 登录_006 - 2024-11-11 17:00:36
[ case execution steps ]
-- 第 1 步 -- 输入账号: admin@czj, 密码: 12345, 验证码: csba
-- 第 2 步 -- 点击登录按钮
picture imgs/Login/Login_Pwd/登录_006_登录操作20241111170038386936.png
picture imgs/Login/Login_Pwd/登录_006_检查登录失败提示信息20241111170038896627.png
Alert text: 账号或密码错误
-- 第 3 步 -- 校验提示信息: 账号或密码错误
** 检查点 ** 弹出提示 ----> 通过
-- 第 4 步 -- 刷新页面
PASS
* 登录_007 - 2024-11-11 17:00:39
[ case execution steps ]
-- 第 1 步 -- 输入账号: admin@czj, 密码: U bains1s@432, 验证码: csba
-- 第 2 步 -- 点击登录按钮
picture imgs/Login/Login_Pwd/登录_007_登录操作20241111170041714157.png
picture imgs/Login/Login_Pwd/登录_007_检查登录失败提示信息20241111170042217997.png
Alert text: 账号或密码错误
-- 第 3 步 -- 校验提示信息: 账号或密码错误
** 检查点 ** 弹出提示 ----> 通过
-- 第 4 步 -- 刷新页面
PASS
* 登录_008 - 2024-11-11 17:00:42
[ case execution steps ]
-- 第 1 步 -- 输入账号: admin@czj, 密码: Ubains@4321, 验证码: 123
-- 第 2 步 -- 点击登录按钮
picture imgs/Login/Login_Pwd/登录_008_登录操作20241111170045067247.png
picture imgs/Login/Login_Pwd/登录_008_检查登录失败提示信息20241111170045515894.png
Alert text: 验证码错误
-- 第 3 步 -- 校验提示信息: 验证码错误
** 检查点 ** 弹出提示 ----> 通过
-- 第 4 步 -- 刷新页面
PASS
* 登录_009 - 2024-11-11 17:00:45
[ case execution steps ]
-- 第 1 步 -- 输入账号: admin@czj, 密码: Ubains@4321, 验证码: cs 12
-- 第 2 步 -- 点击登录按钮
picture imgs/Login/Login_Pwd/登录_009_登录操作20241111170048328133.png
picture imgs/Login/Login_Pwd/登录_009_检查登录失败提示信息20241111170048786438.png
Alert text: 验证码错误
-- 第 3 步 -- 校验提示信息: 验证码错误
** 检查点 ** 弹出提示 ----> 通过
-- 第 4 步 -- 刷新页面
PASS
* 登录_010 - 2024-11-11 17:00:49
[ case execution steps ]
-- 第 1 步 -- 输入账号: admin@czj, 密码: Ubains@4321, 验证码: csba
-- 第 2 步 -- 点击登录按钮
picture imgs/Login/Login_Pwd/登录_010_登录操作20241111170051562415.png
picture imgs/Login/Login_Pwd/登录_010_检查登录成功提示信息20241111170051681341.png
Alert text: 欢迎 预定标准版测试
-- 第 3 步 -- 校验提示信息: 欢迎 预定标准版测试
** 检查点 ** 弹出提示 ----> 通过
-- 第 4 步 -- 刷新页面
PASS
[ suite teardown ] cases\
清除浏览器
========= 测试结束 : 20241111_170053 =========
耗时 : 38.323 秒
预备执行用例数量 : 10
实际执行用例数量 : 10
通过 : 10
失败 : 0
异常 : 0
套件初始化失败 : 0
套件清除 失败 : 0
用例初始化失败 : 0
用例清除 失败 : 0
=== [ 收集测试用例 ] ===
== cases\__st__.py
== cases\测试\test.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文件已读取
== cases\设备管理\安卓信息上报.py
** no cases in this file, skip it.
== cases\设备管理\毫米波雷达上报.py
** 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
========= 测试开始 : 20241111_165904 =========
>>> cases\
[ suite setup ] cases\
-- 第 1 步 -- 初始化浏览器
'----------' 正在初始化浏览器 '----------'
-- 第 2 步 -- 处理SSL认证
'----------' 正在处理SSL证书警告 '----------'
'----------' SSL证书警告处理完成 '----------'
>>> cases\登录模块\账号密码登录测试.py
* 登录_001 - 2024-11-11 16:59:07
[ case execution steps ]
-- 第 1 步 -- 输入账号: , 密码: Ubains@4321, 验证码: csba
-- 第 2 步 -- 点击登录按钮
ABORT unsupported operand type(s) for +: 'NoneType' and 'str'
Traceback:
File "D:\GithubData\自动化脚本-4\ubains-module-test\预定系统\cases\登录模块\账号密码登录测试.py", line 67, in teststeps
SELENIUM_LOG_SCREEN(wd)
File "C:\Users\29194\AppData\Local\Programs\Python\Python310\lib\site-packages\hytest\common.py", line 105, in SELENIUM_LOG_SCREEN
filename = str(stepname+current_time)
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
* 登录_002 - 2024-11-11 16:59:10
[ case execution steps ]
-- 第 1 步 -- 输入账号: admin@czj, 密码: , 验证码: csba
-- 第 2 步 -- 点击登录按钮
ABORT unsupported operand type(s) for +: 'NoneType' and 'str'
Traceback:
File "D:\GithubData\自动化脚本-4\ubains-module-test\预定系统\cases\登录模块\账号密码登录测试.py", line 67, in teststeps
SELENIUM_LOG_SCREEN(wd)
File "C:\Users\29194\AppData\Local\Programs\Python\Python310\lib\site-packages\hytest\common.py", line 105, in SELENIUM_LOG_SCREEN
filename = str(stepname+current_time)
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
* 登录_003 - 2024-11-11 16:59:12
[ case execution steps ]
-- 第 1 步 -- 输入账号: admin@czj, 密码: Ubains@4321, 验证码:
-- 第 2 步 -- 点击登录按钮
ABORT unsupported operand type(s) for +: 'NoneType' and 'str'
Traceback:
File "D:\GithubData\自动化脚本-4\ubains-module-test\预定系统\cases\登录模块\账号密码登录测试.py", line 67, in teststeps
SELENIUM_LOG_SCREEN(wd)
File "C:\Users\29194\AppData\Local\Programs\Python\Python310\lib\site-packages\hytest\common.py", line 105, in SELENIUM_LOG_SCREEN
filename = str(stepname+current_time)
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
* 登录_004 - 2024-11-11 16:59:14
[ case execution steps ]
-- 第 1 步 -- 输入账号: admin@czj112, 密码: Ubains@4321, 验证码: csba
-- 第 2 步 -- 点击登录按钮
ABORT unsupported operand type(s) for +: 'NoneType' and 'str'
Traceback:
File "D:\GithubData\自动化脚本-4\ubains-module-test\预定系统\cases\登录模块\账号密码登录测试.py", line 67, in teststeps
SELENIUM_LOG_SCREEN(wd)
File "C:\Users\29194\AppData\Local\Programs\Python\Python310\lib\site-packages\hytest\common.py", line 105, in SELENIUM_LOG_SCREEN
filename = str(stepname+current_time)
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
* 登录_005 - 2024-11-11 16:59:16
[ case execution steps ]
-- 第 1 步 -- 输入账号: adM 12in@czj, 密码: Ubains@4321, 验证码: csba
-- 第 2 步 -- 点击登录按钮
ABORT unsupported operand type(s) for +: 'NoneType' and 'str'
Traceback:
File "D:\GithubData\自动化脚本-4\ubains-module-test\预定系统\cases\登录模块\账号密码登录测试.py", line 67, in teststeps
SELENIUM_LOG_SCREEN(wd)
File "C:\Users\29194\AppData\Local\Programs\Python\Python310\lib\site-packages\hytest\common.py", line 105, in SELENIUM_LOG_SCREEN
filename = str(stepname+current_time)
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
* 登录_006 - 2024-11-11 16:59:19
[ case execution steps ]
-- 第 1 步 -- 输入账号: admin@czj, 密码: 12345, 验证码: csba
-- 第 2 步 -- 点击登录按钮
ABORT unsupported operand type(s) for +: 'NoneType' and 'str'
Traceback:
File "D:\GithubData\自动化脚本-4\ubains-module-test\预定系统\cases\登录模块\账号密码登录测试.py", line 67, in teststeps
SELENIUM_LOG_SCREEN(wd)
File "C:\Users\29194\AppData\Local\Programs\Python\Python310\lib\site-packages\hytest\common.py", line 105, in SELENIUM_LOG_SCREEN
filename = str(stepname+current_time)
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
* 登录_007 - 2024-11-11 16:59:21
[ case execution steps ]
-- 第 1 步 -- 输入账号: admin@czj, 密码: U bains1s@432, 验证码: csba
-- 第 2 步 -- 点击登录按钮
ABORT unsupported operand type(s) for +: 'NoneType' and 'str'
Traceback:
File "D:\GithubData\自动化脚本-4\ubains-module-test\预定系统\cases\登录模块\账号密码登录测试.py", line 67, in teststeps
SELENIUM_LOG_SCREEN(wd)
File "C:\Users\29194\AppData\Local\Programs\Python\Python310\lib\site-packages\hytest\common.py", line 105, in SELENIUM_LOG_SCREEN
filename = str(stepname+current_time)
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
* 登录_008 - 2024-11-11 16:59:23
[ case execution steps ]
-- 第 1 步 -- 输入账号: admin@czj, 密码: Ubains@4321, 验证码: 123
-- 第 2 步 -- 点击登录按钮
ABORT unsupported operand type(s) for +: 'NoneType' and 'str'
Traceback:
File "D:\GithubData\自动化脚本-4\ubains-module-test\预定系统\cases\登录模块\账号密码登录测试.py", line 67, in teststeps
SELENIUM_LOG_SCREEN(wd)
File "C:\Users\29194\AppData\Local\Programs\Python\Python310\lib\site-packages\hytest\common.py", line 105, in SELENIUM_LOG_SCREEN
filename = str(stepname+current_time)
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
* 登录_009 - 2024-11-11 16:59:25
[ case execution steps ]
-- 第 1 步 -- 输入账号: admin@czj, 密码: Ubains@4321, 验证码: cs 12
-- 第 2 步 -- 点击登录按钮
ABORT unsupported operand type(s) for +: 'NoneType' and 'str'
Traceback:
File "D:\GithubData\自动化脚本-4\ubains-module-test\预定系统\cases\登录模块\账号密码登录测试.py", line 67, in teststeps
SELENIUM_LOG_SCREEN(wd)
File "C:\Users\29194\AppData\Local\Programs\Python\Python310\lib\site-packages\hytest\common.py", line 105, in SELENIUM_LOG_SCREEN
filename = str(stepname+current_time)
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
* 登录_010 - 2024-11-11 16:59:28
[ case execution steps ]
-- 第 1 步 -- 输入账号: admin@czj, 密码: Ubains@4321, 验证码: csba
-- 第 2 步 -- 点击登录按钮
ABORT unsupported operand type(s) for +: 'NoneType' and 'str'
Traceback:
File "D:\GithubData\自动化脚本-4\ubains-module-test\预定系统\cases\登录模块\账号密码登录测试.py", line 67, in teststeps
SELENIUM_LOG_SCREEN(wd)
File "C:\Users\29194\AppData\Local\Programs\Python\Python310\lib\site-packages\hytest\common.py", line 105, in SELENIUM_LOG_SCREEN
filename = str(stepname+current_time)
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
[ suite teardown ] cases\
清除浏览器
========= 测试结束 : 20241111_165932 =========
耗时 : 27.999 秒
预备执行用例数量 : 10
实际执行用例数量 : 10
通过 : 0
失败 : 0
异常 : 10
套件初始化失败 : 0
套件清除 失败 : 0
用例初始化失败 : 0
用例清除 失败 : 0
=== [ 收集测试用例 ] ===
== cases\__st__.py
== cases\测试\test.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文件已读取
== cases\设备管理\安卓信息上报.py
** no cases in this file, skip it.
== cases\设备管理\毫米波雷达上报.py
** 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
========= 测试开始 : 20241111_165529 =========
>>> cases\
[ suite setup ] cases\
-- 第 1 步 -- 初始化浏览器
'----------' 正在初始化浏览器 '----------'
-- 第 2 步 -- 处理SSL认证
'----------' 正在处理SSL证书警告 '----------'
'----------' SSL证书警告处理完成 '----------'
>>> cases\登录模块\账号密码登录测试.py
* 登录_001 - 2024-11-11 16:55:32
[ case execution steps ]
-- 第 1 步 -- 输入账号: , 密码: Ubains@4321, 验证码: csba
-- 第 2 步 -- 点击登录按钮
ABORT unsupported operand type(s) for +: 'NoneType' and 'str'
Traceback:
File "D:\GithubData\自动化脚本-4\ubains-module-test\预定系统\cases\登录模块\账号密码登录测试.py", line 86, in teststeps
SELENIUM_LOG_SCREEN(wd)
File "C:\Users\29194\AppData\Local\Programs\Python\Python310\lib\site-packages\hytest\common.py", line 105, in SELENIUM_LOG_SCREEN
filename = str(stepname+current_time)
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
* 登录_002 - 2024-11-11 16:55:35
[ case execution steps ]
-- 第 1 步 -- 输入账号: admin@czj, 密码: , 验证码: csba
-- 第 2 步 -- 点击登录按钮
ABORT unsupported operand type(s) for +: 'NoneType' and 'str'
Traceback:
File "D:\GithubData\自动化脚本-4\ubains-module-test\预定系统\cases\登录模块\账号密码登录测试.py", line 86, in teststeps
SELENIUM_LOG_SCREEN(wd)
File "C:\Users\29194\AppData\Local\Programs\Python\Python310\lib\site-packages\hytest\common.py", line 105, in SELENIUM_LOG_SCREEN
filename = str(stepname+current_time)
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
* 登录_003 - 2024-11-11 16:55:37
[ case execution steps ]
-- 第 1 步 -- 输入账号: admin@czj, 密码: Ubains@4321, 验证码:
-- 第 2 步 -- 点击登录按钮
ABORT unsupported operand type(s) for +: 'NoneType' and 'str'
Traceback:
File "D:\GithubData\自动化脚本-4\ubains-module-test\预定系统\cases\登录模块\账号密码登录测试.py", line 86, in teststeps
SELENIUM_LOG_SCREEN(wd)
File "C:\Users\29194\AppData\Local\Programs\Python\Python310\lib\site-packages\hytest\common.py", line 105, in SELENIUM_LOG_SCREEN
filename = str(stepname+current_time)
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
* 登录_004 - 2024-11-11 16:55:39
[ case execution steps ]
-- 第 1 步 -- 输入账号: admin@czj112, 密码: Ubains@4321, 验证码: csba
-- 第 2 步 -- 点击登录按钮
ABORT unsupported operand type(s) for +: 'NoneType' and 'str'
Traceback:
File "D:\GithubData\自动化脚本-4\ubains-module-test\预定系统\cases\登录模块\账号密码登录测试.py", line 86, in teststeps
SELENIUM_LOG_SCREEN(wd)
File "C:\Users\29194\AppData\Local\Programs\Python\Python310\lib\site-packages\hytest\common.py", line 105, in SELENIUM_LOG_SCREEN
filename = str(stepname+current_time)
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
* 登录_005 - 2024-11-11 16:55:41
[ case execution steps ]
-- 第 1 步 -- 输入账号: adM 12in@czj, 密码: Ubains@4321, 验证码: csba
-- 第 2 步 -- 点击登录按钮
ABORT unsupported operand type(s) for +: 'NoneType' and 'str'
Traceback:
File "D:\GithubData\自动化脚本-4\ubains-module-test\预定系统\cases\登录模块\账号密码登录测试.py", line 86, in teststeps
SELENIUM_LOG_SCREEN(wd)
File "C:\Users\29194\AppData\Local\Programs\Python\Python310\lib\site-packages\hytest\common.py", line 105, in SELENIUM_LOG_SCREEN
filename = str(stepname+current_time)
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
* 登录_006 - 2024-11-11 16:55:44
[ case execution steps ]
-- 第 1 步 -- 输入账号: admin@czj, 密码: 12345, 验证码: csba
-- 第 2 步 -- 点击登录按钮
ABORT unsupported operand type(s) for +: 'NoneType' and 'str'
Traceback:
File "D:\GithubData\自动化脚本-4\ubains-module-test\预定系统\cases\登录模块\账号密码登录测试.py", line 86, in teststeps
SELENIUM_LOG_SCREEN(wd)
File "C:\Users\29194\AppData\Local\Programs\Python\Python310\lib\site-packages\hytest\common.py", line 105, in SELENIUM_LOG_SCREEN
filename = str(stepname+current_time)
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
* 登录_007 - 2024-11-11 16:55:46
[ case execution steps ]
-- 第 1 步 -- 输入账号: admin@czj, 密码: U bains1s@432, 验证码: csba
-- 第 2 步 -- 点击登录按钮
ABORT unsupported operand type(s) for +: 'NoneType' and 'str'
Traceback:
File "D:\GithubData\自动化脚本-4\ubains-module-test\预定系统\cases\登录模块\账号密码登录测试.py", line 86, in teststeps
SELENIUM_LOG_SCREEN(wd)
File "C:\Users\29194\AppData\Local\Programs\Python\Python310\lib\site-packages\hytest\common.py", line 105, in SELENIUM_LOG_SCREEN
filename = str(stepname+current_time)
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
* 登录_008 - 2024-11-11 16:55:48
[ case execution steps ]
-- 第 1 步 -- 输入账号: admin@czj, 密码: Ubains@4321, 验证码: 123
-- 第 2 步 -- 点击登录按钮
ABORT unsupported operand type(s) for +: 'NoneType' and 'str'
Traceback:
File "D:\GithubData\自动化脚本-4\ubains-module-test\预定系统\cases\登录模块\账号密码登录测试.py", line 86, in teststeps
SELENIUM_LOG_SCREEN(wd)
File "C:\Users\29194\AppData\Local\Programs\Python\Python310\lib\site-packages\hytest\common.py", line 105, in SELENIUM_LOG_SCREEN
filename = str(stepname+current_time)
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
* 登录_009 - 2024-11-11 16:55:50
[ case execution steps ]
-- 第 1 步 -- 输入账号: admin@czj, 密码: Ubains@4321, 验证码: cs 12
-- 第 2 步 -- 点击登录按钮
ABORT unsupported operand type(s) for +: 'NoneType' and 'str'
Traceback:
File "D:\GithubData\自动化脚本-4\ubains-module-test\预定系统\cases\登录模块\账号密码登录测试.py", line 86, in teststeps
SELENIUM_LOG_SCREEN(wd)
File "C:\Users\29194\AppData\Local\Programs\Python\Python310\lib\site-packages\hytest\common.py", line 105, in SELENIUM_LOG_SCREEN
filename = str(stepname+current_time)
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
* 登录_010 - 2024-11-11 16:55:53
[ case execution steps ]
-- 第 1 步 -- 输入账号: admin@czj, 密码: Ubains@4321, 验证码: csba
-- 第 2 步 -- 点击登录按钮
ABORT unsupported operand type(s) for +: 'NoneType' and 'str'
Traceback:
File "D:\GithubData\自动化脚本-4\ubains-module-test\预定系统\cases\登录模块\账号密码登录测试.py", line 86, in teststeps
SELENIUM_LOG_SCREEN(wd)
File "C:\Users\29194\AppData\Local\Programs\Python\Python310\lib\site-packages\hytest\common.py", line 105, in SELENIUM_LOG_SCREEN
filename = str(stepname+current_time)
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
[ suite teardown ] cases\
清除浏览器
========= 测试结束 : 20241111_165557 =========
耗时 : 28.139 秒
预备执行用例数量 : 10
实际执行用例数量 : 10
通过 : 0
失败 : 0
异常 : 10
套件初始化失败 : 0
套件清除 失败 : 0
用例初始化失败 : 0
用例清除 失败 : 0
name,account,username,password,confirm_password,department,gender,phone,email,expected_result
用户新增_001,,admin,Ubains@54321,Ubains@54321,测试,男,13724387311,1064963501@qq.com,账号为空
用户新增_002,123,admin,Ubains@54321,Ubains@54321,测试,男,13724387312,1064963502@qq.com,账号为空
用户新增_003,a123,admin,Ubains@54321,Ubains@54321,测试,男,13724387313,1064963503@qq.com,账号为空
用户新增_004,a123##,admin,Ubains@54321,Ubains@54321,测试,男,13724387314,1064963504@qq.com,账号为空
用户新增_005,@@@@@,admin,Ubains@54321,Ubains@54321,测试,男,13724387315,1064963505@qq.com,账号为空
用户新增_006,_____,admin,Ubains@54321,Ubains@54321,测试,男,13724387316,1064963506@qq.com,账号为空
用户新增_007,admin@admin,admin@admin,Ubains@54321,Ubains@54321,测试,男,13724387317,1064963507@qq.com,添加成功
用户新增_008,admin@1,,Ubains@54321,Ubains@54321,测试,男,13724387318,1064963508@qq.com,用户名为空
用户新增_009,admin@12,张三,Ubains@54321,Ubains@54321,测试,男,13724387319,1064963509@qq.com,添加成功
用户新增_010,admin@13,张三,,Ubains@54321,测试,男,13724387320,1064963510@qq.com,密码为空
用户新增_011,admin@14,张三,123,Ubains@54321,测试,男,13724387321,1064963511@qq.com,密码为空
用户新增_012,admin@15,张三,qazwsxedcrf,Ubains@54321,测试,男,13724387322,1064963512@qq.com,密码为空
用户新增_013,admin@16,张三,qazwsxedcr1,Ubains@54321,测试,男,13724387323,1064963513@qq.com,密码为空
用户新增_014,admin@17,张三,12345678901,Ubains@54321,测试,男,13724387324,1064963514@qq.com,密码为空
用户新增_015,admin@18,张三,1qazwsxedcr,Ubains@54321,测试,男,13724387325,1064963515@qq.com,密码为空
用户新增_016,admin@19,张三,Ubains9876,Ubains@54321,测试,男,13724387326,1064963516@qq.com,密码为空
用户新增_017,admin@20,张三,Ubains12345,Ubains@54321,测试,男,13724387327,1064963517@qq.com,密码为空
用户新增_018,admin@21,张二,Ubains@54321,Ubains@54321,测试,男,13724387328,1064963518@qq.com,添加成功
用户新增_019,admin@22,张二,Ubains@54321,Ubains@543210,测试,男,13724387329,1064963519@qq.com,两次密码不一致
用户新增_020,admin@23,张三,Ubains@54321,,测试,男,13724387330,1064963520@qq.com,确认密码为空
用户新增_021,admin@24,张三,Ubains@54321,123,测试,男,13724387331,1064963521@qq.com,确认密码为空
用户新增_022,admin@25,张三,Ubains@54321,qazwsxedcrf,测试,男,13724387332,1064963522@qq.com,确认密码为空
用户新增_023,admin@26,张三,Ubains@54321,12345678901,测试,男,13724387333,1064963523@qq.com,确认密码为空
用户新增_024,admin@27,张三,Ubains@54321,qazwsxedcr1,测试,男,13724387334,1064963524@qq.com,确认密码为空
用户新增_025,admin@28,张三,Ubains@54321,12345678901,测试,男,13724387335,1064963525@qq.com,确认密码为空
用户新增_026,admin@29,张三,Ubains@54321,1qazwsxedcr,测试,男,13724387336,1064963526@qq.com,确认密码为空
用户新增_027,admin@30,张三,Ubains@54321,Ubains9876,测试,男,13724387337,1064963527@qq.com,确认密码为空
用户新增_028,admin@31,张三,Ubains@54321,Ubains12345,测试,男,13724387338,1064963528@qq.com,确认密码为空
用户新增_029,admin@32,张四,Ubains@54321,Ubains@54321,测试,男,13724387339,1064963529@qq.com,添加成功
用户新增_030,admin@33,张四,Ubains@543210,Ubains@54321,测试,男,13724387340,1064963530@qq.com,两次密码不一致
用户新增_031,admin@34,李四,Ubains@54321,Ubains@54321,,男,13724387341,1064963531@qq.com,添加成功
用户新增_032,admin@35,王五,Ubains@54321,Ubains@54321,测试,男,13724387342,1064963532@qq.com,添加成功
用户新增_033,admin@36,王六,Ubains@54321,Ubains@54321,测试,男,13724387343,1064963533@qq.com,添加成功
用户新增_034,admin@37,chen,Ubains@54321,Ubains@54321,测试,女,13724387344,1064963534@qq.com,添加成功
用户新增_035,admin@38,chen1,Ubains@54321,Ubains@54321,测试,保密,13724387345,1064963535@qq.com,添加成功
用户新增_036,admin@39,chen2,Ubains@54321,Ubains@54321,测试,男,23724387317,1064963536@qq.com,手机号码格式错误
用户新增_037,admin@40,chen2,Ubains@54321,Ubains@54321,测试,男,1372438731,1064963537@qq.com,手机号码格式错误
用户新增_038,admin@41,chen2,Ubains@54321,Ubains@54321,测试,男,1372438731@,1064963538@qq.com,手机号码格式错误
用户新增_039,admin@42,chen2,Ubains@54321,Ubains@54321,测试,男,137243873 1,1064963539@qq.com,手机号码格式错误
用户新增_040,admin@43,chen2,Ubains@54321,Ubains@54321,测试,男,137243873a1,1064963540@qq.com,手机号码格式错误
用户新增_041,admin@44,chen2,Ubains@54321,Ubains@54321,测试,男,13724387346,1064963541@qq.com,添加成功
用户新增_042,admin@45,chen3,Ubains@54321,Ubains@54321,测试,男,13724387347,###,邮箱格式错误
用户新增_043,admin@46,chen3,Ubains@54321,Ubains@54321,测试,男,13724387348,121221,邮箱格式错误
用户新增_044,admin@47,chen3,Ubains@54321,Ubains@54321,测试,男,13724387349,adasda,邮箱格式错误
用户新增_045,admin@48,chen4,Ubains@54321,Ubains@54321,测试,男,13724387350,1064963542@qq.com,添加成功
用户新增_046,admin@48,chen4,Ubains@54321,Ubains@54321,测试,男,13724387351,1064963543@qq.com,"添加用户失败,账号在系统中已存在!"
用户新增_047,admin@50,chen4,Ubains@54321,Ubains@54321,测试,男,13724387350,1064963544@qq.com,操作失败,该手机号已有账号
用户新增_048,admin@51,chen4,Ubains@54321,Ubains@54321,测试,男,13724387352,1064963542@qq.com,操作失败,该邮箱已有账号
...@@ -13,7 +13,7 @@ if __name__ == "__main__": ...@@ -13,7 +13,7 @@ if __name__ == "__main__":
rows.append(row) rows.append(row)
# 写入CSV文件 # 写入CSV文件
with open('用户管理模块/用户删除.csv', mode='w', newline='', encoding='utf-8') as file: with open('textname.csv', mode='w', newline='', encoding='utf-8') as file:
writer = csv.writer(file) writer = csv.writer(file)
writer.writerow(fieldnames) writer.writerow(fieldnames)
writer.writerows(rows) writer.writerows(rows)
......
...@@ -9,4 +9,4 @@ name,account,expected ...@@ -9,4 +9,4 @@ name,account,expected
用户删除_008,admin@37,删除成功 用户删除_008,admin@37,删除成功
用户删除_009,admin@38,删除成功 用户删除_009,admin@38,删除成功
用户删除_010,admin@44,删除成功 用户删除_010,admin@44,删除成功
用户删除_011,admin@51,删除成功 用户删除_011,admin@51,删除成功
\ No newline at end of file
name,account,expected
登录_001,,Ubains@4321,csba,请输入账号!
登录_002,admin@czj,,csba,请输入密码!
登录_003,admin@czj,Ubains@4321,,请输入验证码!
登录_004,admin@czj112,Ubains@4321,csba,账号或密码错误
登录_005,adM 12in@czj,Ubains@4321,csba,账号或密码错误
登录_006,admin@czj,12345,csba,账号或密码错误
登录_007,admin@czj,U bains1s@432,csba,账号或密码错误
登录_008,admin@czj,Ubains@4321,123,验证码错误
登录_009,admin@czj,Ubains@4321,cs 12,验证码错误
登录_010,admin@czj,Ubains@4321,csba,欢迎 预定标准版测试
\ No newline at end of file
name,depart_name,check_add_text,check_edit_text,check_del_text
部门主流程_001,开发部门,添加成功,修改成功,删除成功
部门主流程_002,测试部门,添加成功,修改成功,删除成功
部门主流程_003,产品部门,添加成功,修改成功,删除成功
部门主流程_004,运营部门,添加成功,修改成功,删除成功
部门主流程_005,人事部门,添加成功,修改成功,删除成功
\ No newline at end of file
name,department_delete_type,check_add_text,check_del_text
部门删除_001,单个删除,添加成功,删除成功
部门删除_002,批量删除,添加成功,删除成功
部门删除_003,单个删除,添加成功,删除成功
部门删除_004,不勾选部门进行批量删除,添加成功,请选择部门
\ No newline at end of file
name,depart_name,department_type,check_add_text
部门新增_001,默认部门名称,父级部门,添加成功
部门新增_002,默认部门名称,二级子部门,添加成功
\ No newline at end of file
name,department_name,new_department_name,query_type,check_query_text
部门查询_001,默认部门名称,开发部门,精确查询,开发部门
部门查询_002,默认部门名称,产品部门,模糊查询,产品
部门查询_003,默认部门名称,人事部门,精确查询,人事部门
部门查询_004,默认部门名称,产研中心,模糊查询,产研
部门查询_005,默认部门名称,营销中心,精确查询,营销中心
部门查询_006,默认部门名称,销售中心,模糊查询,销售
\ No newline at end of file
name,depart_name,new_department_name,depart_user,check_text
部门编辑_001,编辑部门测试,部门编辑部门编辑,admin@ZDH,修改成功
部门编辑_002,部门编辑部门编辑,部门编辑a部门编辑,admin@ZDH,修改成功
部门编辑_003,部门编辑a部门编辑,部门编辑@部门编辑,admin@ZDH,修改成功
部门编辑_004,部门编辑@部门编辑,部门编辑2部门编辑,admin@ZDH,修改成功
部门编辑_005,部门编辑2部门编辑,12345678,admin@ZDH,修改成功
部门编辑_006,12345678,abcdefg,admin@ZDH,修改成功
部门编辑_007,abcdefg,!@#$%^&*,admin@ZDH,修改成功
部门编辑_008,!@#$%^&*,编辑部门测试,admin@ZDH,修改成功
部门编辑_009,!@#$%^&*,,admin@ZDH,部门名称不能为空
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论