ShiErFeng/shierfeng-fastapi-test/system/test_config_management.py
2026-07-24 09:43:10 +08:00

166 lines
6.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import time
import pytest
from playwright.async_api import async_playwright
from common.base_page_test import BasePageTest
from common.config import Config
class ConfigManagementTest(BasePageTest):
"""参数设置测试类"""
def generate_config_data(self) -> dict:
"""生成测试数据"""
timestamp = int(time.time())
return {
'config_name': f'test_config_{timestamp}',
'config_key': f'test_config_key_{timestamp}',
'config_value': f'test_config_value_{timestamp}',
}
async def create_config(self, config_name: str, config_key: str, config_value: str) -> None:
"""创建参数配置"""
# 点击新增按钮
await self.page.get_by_role('button', name='新增').first.click()
# 等待对话框
dialog = self.page.get_by_role('dialog')
await dialog.wait_for()
# 填写参数信息
await dialog.get_by_role('textbox', name='参数名称').fill(config_name)
await dialog.get_by_role('textbox', name='参数键名').fill(config_key)
await dialog.get_by_role('textbox', name='参数键值').fill(config_value)
# 等待一段时间确保输入完成
await self.page.wait_for_timeout(500)
# 选择参数状态 - 选择系统内置选项为N避免后端限制删除
# 在对话框中找到系统内置的单选按钮并选择
await self.wait_for_selector('input[type="radio"]', timeout=5000)
# 点击系统内置'否'选项
# 根据codegen脚本使用更精确的定位器
await self.page.locator('label:nth-child(2) > .el-radio__input > .el-radio__inner').click()
# 等待一段时间确保选择完成
await self.page.wait_for_timeout(500)
# 点击确认按钮
confirm_button = self.page.get_by_role('button', name='确 定').first
await confirm_button.click()
# 等待一段时间确保请求发送
await self.page.wait_for_timeout(1000)
# 等待新增成功提示
await self.wait_for_selector('div:has-text("新增成功")', timeout=10000)
async def search_config(self, config_name: str, config_key: str = '') -> None:
"""搜索参数配置"""
# 在查询表单中输入参数信息进行查询
await self.page.get_by_role('textbox', name='参数名称').fill(config_name)
if config_key:
await self.page.get_by_role('textbox', name='参数键名').fill(config_key)
# 点击搜索按钮
await self.page.get_by_role('button', name='搜索').first.click()
# 等待搜索结果加载
await self.page.wait_for_timeout(1000)
async def edit_config(self, updated_value: str) -> None:
"""编辑参数配置"""
# 点击编辑按钮
await self.page.locator('tbody').get_by_role('button', name='修改').nth(0).click()
# 等待对话框
dialog = self.page.get_by_role('dialog')
await dialog.wait_for()
# 修改参数键值
await dialog.get_by_role('textbox', name='参数键值').fill(updated_value)
# 确认
await self.page.get_by_role('button', name='确 定').first.click()
# 等待编辑成功提示
await self.wait_for_selector('div:has-text("修改成功")', timeout=10000)
async def delete_config(self) -> None:
"""删除参数配置"""
# 点击删除按钮
await self.page.locator('tbody').get_by_role('button', name='删除').nth(0).click()
# 确认删除
await self.page.get_by_role('button', name='确定').first.click()
# 等待删除成功提示
await self.wait_for_selector('div:has-text("删除成功")', timeout=10000)
# 重置查询表单,确保能看到所有参数
reset_button = self.page.get_by_role('button', name='重置')
await reset_button.click()
# 等待列表刷新
await self.page.wait_for_timeout(1000)
async def test_config_crud_operations(self) -> None:
"""测试参数设置的增删查改功能"""
# 访问参数设置页面
await self.goto_page(Config.frontend_url + '/system/config')
# 等待页面加载完成
await self.wait_for_page_title('参数设置', timeout=10000)
await self.page.wait_for_timeout(1000) # 等待列表刷新
# 记录初始参数数量
initial_config_count = await self.get_table_total_rows()
# 生成测试数据
data = self.generate_config_data()
# 1.新增
await self.create_config(data['config_name'], data['config_key'], data['config_value'])
# 验证新增
await self.page.wait_for_timeout(1000) # 等待列表刷新
new_config_count = await self.get_table_total_rows()
assert new_config_count > initial_config_count, '新增参数后数量应该增加'
# 2.搜索
await self.search_config(data['config_name'], data['config_key'])
# 验证搜索
search_result_count = await self.get_table_total_rows()
assert search_result_count >= 1, '搜索结果应该至少包含一个参数'
# 3.编辑
await self.edit_config(f'updated_config_value_{time.time()}')
# 验证编辑
await self.page.wait_for_timeout(1000) # 等待列表刷新
# 重新搜索以验证修改结果
await self.search_config(data['config_name'])
# 4.删除
await self.delete_config()
# 验证删除
await self.page.wait_for_timeout(1000) # 等待列表刷新
final_config_count = await self.get_table_total_rows()
assert final_config_count == initial_config_count, '删除参数后数量应该恢复到初始值'
@pytest.mark.asyncio
async def test_config_management_page() -> None:
"""测试参数设置页面功能"""
async with async_playwright() as p:
test_instance = ConfigManagementTest()
await test_instance.setup(p)
try:
await test_instance.test_config_crud_operations()
finally:
await test_instance.teardown()