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

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

补充部门管理模块脚本,目前输出了部门新增、部门删除、部门编辑、部门查询。部门编辑还存在问题,待解决。测试调用钉钉机器人发送消息接口,调用失败,根据接口文档排查是由于webhook地址缺少拼接的密钥和时间戳导致,后续进一步验证。优化登录模块的脚本,使用hytest框架形式。
上级 8a297b8c
No preview for this file type
import csv
import psutil
import logging
from hytest import *
from selenium import webdriver
......@@ -32,6 +33,7 @@ def browser_init():
# 定义目标登录页面的URL
login_url = 'https://192.168.5.218/#/login/logindf'
login_ngrok_url = "https://nat.ubainsyun.com:11046"
# 请求WebDriver打开登录页面
wd.get(login_url)
# 最大化浏览器窗口
......@@ -147,7 +149,6 @@ def safe_send_keys(element_locator, value, wd):
# 如果元素不可交互,打印相应异常信息
print(f"ElementNotInteractableException: Element {element_locator} is not interactable.")
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
INFO(f"ElementNotInteractableException: Element {element_locator} is not interactable.")
def input_clear(element_locator, wd):
"""
清空输入框中的文本。
......@@ -234,7 +234,7 @@ def send_keyboard(element_locator, wd):
# 如果元素不可交互,打印不可交互错误消息。
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):
EC.presence_of_element_located((By.XPATH, "//p[@class='el-message__content']"))
).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
except Exception as e:
# 记录异常信息
......@@ -318,9 +318,29 @@ def read_csv_data(csv_file_path):
# 返回包含所有测试用例数据的列表
return ddt_cases
import os
def get_cpu_usage(interval=1):
"""
获取当前进程的 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):
# 指定要删除的图片文件扩展名
......
......@@ -39,3 +39,7 @@
- 补充脚本执行的命令注释。
11. 2024-11-08
- 优化封装好的SELENIUM_LOG_SCREEN函数,增加三个参数用来指定截屏文件存放路径以及截屏文件名称。
12. 2024-11-11
- 补充部门管理模块脚本,目前输出了部门新增、部门删除、部门编辑、部门查询。部门编辑还存在问题,待解决。
- 测试调用钉钉机器人发送消息接口,调用失败,根据接口文档排查是由于webhook地址缺少拼接的密钥和时间戳导致,后续进一步验证。
- 优化登录模块的脚本,使用hytest框架形式。
\ No newline at end of file
File added
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
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
from hytest import *
import sys
import os
# 获取当前脚本的绝对路径
......
......@@ -52,13 +52,13 @@ class Main_User_Manage_0001:
sleep(2)
# 屏幕截图
SELENIUM_LOG_SCREEN(wd)
SELENIUM_LOG_SCREEN(wd,"50%","User_Manage","User_Main","用户管理主流程-用户信息填入")
STEP(3, "点击【确定】按钮")
# 点击确定按钮
safe_click((By.XPATH, "//div[@aria-label='添加用户']//span[contains(text(),'确定')]"), wd)
sleep(2)
notify_text = get_notify_text(wd)
notify_text = get_notify_text(wd, 'User_Manage', 'User_Main', '用户管理主流程-用户新增')
# 检查点:验证提示信息是否与预期相符
CHECK_POINT('弹出提示', notify_text == "添加成功")
......@@ -75,7 +75,7 @@ class Main_User_Manage_0001:
safe_click((By.XPATH, "//input[@value='登 录']"),wd)
sleep(2)
notify_text = get_notify_text(wd)
notify_text = get_notify_text(wd, 'User_Manage', 'User_Main', '用户管理主流程-用户首次登录')
# 检查点:验证提示信息是否与预期相符
INFO(f"首次登录提示:{notify_text}")
CHECK_POINT('弹出提示', notify_text == "首次登录,请修改密码")
......@@ -89,7 +89,7 @@ class Main_User_Manage_0001:
safe_click((By.XPATH, "//span[contains(text(),'确定')]"),wd)
sleep(2)
notify_text = get_notify_text(wd)
notify_text = get_notify_text(wd, 'User_Manage', 'User_Main', '用户管理主流程-用户密码修改')
# 检查点:验证提示信息是否与预期相符
INFO(f"首次登录修改密码提示:{notify_text}")
CHECK_POINT('弹出提示', notify_text == "修改成功,请重新登录")
......@@ -107,4 +107,4 @@ class Main_User_Manage_0001:
# 检查点:验证提示信息是否与预期相符
INFO(f"登录系统提示:{notify_text}")
CHECK_POINT('登录成功校验', notify_text == "欢迎 自动化测试公司")
SELENIUM_LOG_SCREEN(wd)
\ No newline at end of file
SELENIUM_LOG_SCREEN(wd,"50%","User_Manage","User_Main","用户管理主流程-用户登录")
\ No newline at end of file
......@@ -80,7 +80,7 @@ class Add_User_00x:
safe_click((By.XPATH, "//div[@aria-label='添加用户']//span[contains(text(),'确定')]"), wd)
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}")
......
No preview for this file type
......@@ -16,98 +16,22 @@ except ModuleNotFoundError as e:
print("尝试使用绝对路径导入")
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
# 默认等待时间(秒),用于元素加载或操作之间的等待
# 获取当前脚本所在的目录
current_dir = os.path.dirname(os.path.abspath(__file__))
def clear_and_send_keys(wd, locator, value):
"""
清空输入框并发送指定值
该函数首先等待指定的元素变得可点击,然后清空该元素的内容,
最后向该元素发送指定的值。这个过程常用于表单填写自动化。
参数:
- wd: WebDriver实例,用于与浏览器交互。
- locator: 定位器,用于定位页面上的元素。
- value: 需要发送到元素的值,通常为字符串。
返回值:
"""
# 等待元素变得可点击,这是为了确保元素已经加载完成并且可以接收输入
element = WebDriverWait(wd, DEFAULT_WAIT_TIME).until(EC.element_to_be_clickable(locator))
# 清空元素的内容,通常用于输入框,以确保之前的内容不会影响新的输入
element.clear()
# 向元素发送指定的值,这是自动化表单填写的关键步骤
element.send_keys(value)
# 构建CSV文件的绝对路径
csv_file_path = os.path.join(current_dir, '../../测试数据/登录模块/账号密码登录.csv')
class Login_00x:
ddt_cases = [
{
'name': '登录 UI_001',
'para': [None,'Ubains@4321','csba','请输入账号!']
},
{
'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', '欢迎 预定标准版测试']
}
]
"""
执行指令是:
1.cd 预定系统
2.hytest --report_title 账号密码登录测试报告 --test 登录_0**
"""
ddt_cases = read_csv_data(csv_file_path)
def teststeps(self):
"""
......@@ -119,43 +43,35 @@ class Login_00x:
# 从全局存储中获取webdriver实例
wd = GSTORE['wd']
# 从self.para中解构出用户名、密码、验证码和检查文本
name = self.name
username, password, code, check_text = self.para
# 步骤1:输入账号、密码和验证码
STEP(1, f"输入账号: {username}, 密码: {password}, 验证码: {code}")
# 如果用户名不为空,则清空用户名输入框并输入用户名
if username is not None:
clear_and_send_keys(wd, (By.XPATH, XPATH_USERNAME_INPUT), username)
safe_send_keys((By.XPATH, '//*[@id="app"]/div/div[3]/div[1]/div[2]/div/form/div[1]/div/input'), username,wd)
# 如果密码不为空,则清空密码输入框并输入密码
if password is not None:
clear_and_send_keys(wd, (By.XPATH, XPATH_PASSWORD_INPUT), password)
safe_send_keys((By.XPATH, '//*[@id="app"]/div/div[3]/div[1]/div[2]/div/form/div[2]/div/input'), password,wd)
# 如果验证码不为空,则清空验证码输入框并输入验证码
if code is not None:
clear_and_send_keys(wd, (By.XPATH, XPATH_CODE_INPUT), code)
safe_send_keys((By.XPATH, '//*[@id="app"]/div/div[3]/div[1]/div[2]/div/form/div[3]/div[1]/div/input'), code,wd)
# 步骤2:点击登录按钮
STEP(2, "点击登录按钮")
# 等待登录按钮可点击,并点击它
login_button = WebDriverWait(wd, DEFAULT_WAIT_TIME).until(
EC.element_to_be_clickable((By.XPATH, XPATH_LOGIN_BUTTON)))
login_button.click()
safe_click((By.XPATH, '//*[@id="app"]/div/div[3]/div[1]/div[2]/div/form/div[4]/input'),wd)
# 等待1秒以允许页面响应
sleep(2)
SELENIUM_LOG_SCREEN(wd)
# 根据预期的检查文本类型,获取并记录提示信息
if check_text == "欢迎 预定标准版测试":
notify_text = WebDriverWait(wd, DEFAULT_WAIT_TIME).until(
EC.presence_of_element_located((By.XPATH, XPATH_WELCOME_TEXT))
).text
notify_text = elment_get_text((By.XPATH, '//*[@id="app"]/div/div[1]/div/span[1]'),wd)
SELENIUM_LOG_SCREEN(wd, '50%', 'Login', 'Login_Pwd', f"{name}_检查登录成功提示信息")
INFO(f"Alert text: {notify_text}")
else:
try:
notify_text = WebDriverWait(wd, DEFAULT_WAIT_TIME).until(
EC.presence_of_element_located((By.CLASS_NAME, CLASS_MESSAGE_CONTENT))
).text
notify_text = get_notify_text(wd, 'Login','Login_Pwd', f"{name}_检查登录失败提示信息")
INFO(f"Alert text: {notify_text}")
except Exception as e:
INFO(f"Exception occurred: {e}")
......@@ -167,16 +83,6 @@ class Login_00x:
# 检查点:验证提示信息是否与预期相符
CHECK_POINT('弹出提示', notify_text == check_text)
def teardown(self):
"""
测试 teardown 方法,用于测试结束后清理环境。
该方法从全局存储 GSTORE 中获取 WebDriver 实例,并在测试结束前刷新当前页面。
这是为了确保每个测试都是在干净的状态下执行,避免不同测试之间相互影响。
"""
# 从全局存储中获取 WebDriver 实例
wd = GSTORE['wd']
# 执行步骤 4:刷新页面,以确保下一个测试从一个干净的状态开始
STEP(4, "刷新页面")
wd.refresh()
\ No newline at end of file
File added
File added
File added
File added
File added
File added
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__":
rows.append(row)
# 写入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.writerow(fieldnames)
writer.writerows(rows)
......
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 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论