10分钟掌握dde_autotest_euler:面向新手的测试用例编写实战
【免费下载链接】dde_autotest_eulerdde autotest case for openEuler项目地址: https://gitcode.com/openeuler/dde_autotest_euler
前往项目官网免费下载:https://ar.openeuler.org/ar/
dde_autotest_euler是openEuler社区为深度桌面环境(DDE)打造的自动化测试框架,帮助开发者快速构建可靠的GUI测试用例。本文将通过实战案例,带你在10分钟内掌握测试用例的基本结构与编写技巧,即使是没有编程经验的新手也能轻松上手。
准备工作:环境搭建与项目结构
在开始编写测试用例前,需要先完成基础环境配置:
克隆项目仓库
git clone https://gitcode.com/openeuler/dde_autotest_euler核心目录解析
项目采用模块化设计,主要测试用例集中在youqu/case/目录,每个文件对应不同功能模块的测试场景。例如:- 文件管理器测试:
youqu/case/test_dde_1271277.py - 桌面环境测试:
youqu/case/test_dde_1271093.py - 系统设置测试:
youqu/case/test_dde_1915293.py
- 文件管理器测试:
依赖工具安装
项目提供了自动化脚本简化环境配置:cd dde_autotest_euler/youqu/tools/ bash install_scrot.sh # 截图工具 bash install_xdotool.sh # 窗口控制工具
图1:dde_autotest_euler项目目录结构,红框标注为测试用例核心目录
测试用例基本结构:5分钟入门模板
所有测试用例都继承自BaseCase类,遵循"前置-执行-断言-清理"的标准流程。以下是一个简化的模板:
import pytest from youqu.case.base_case import BaseCase from youqu.method.dde_method import DdeMethod class TestDdeExampleCase(BaseCase): # 前置/后置处理(每个测试函数执行前后运行) @pytest.fixture(scope="function", autouse=True) def setup_teardown(self): self.euler = DdeMethod() # 初始化DDE操作工具 self.euler.dde_launcher.open() # 打开启动器 yield # 测试执行位置 self.euler.dde_launcher.close() # 关闭启动器 def test_dde_example_1(self): """示例测试:打开计算器并验证标题""" self.euler.dde_launcher.search("计算器") # 搜索应用 self.euler.dde_launcher.click("计算器") # 点击打开 self.assert_ocr_exist("计算器") # 断言窗口标题存在核心要素解析:
- 测试类:命名格式为
TestDdeXXXCase,继承BaseCase获取基础能力 - 前置/后置:通过
@pytest.fixture实现环境准备与清理 - 测试方法:命名以
test_dde_开头,包含具体操作步骤 - 断言机制:使用
assert_ocr_exist()或assert_image_exist_in_dde()验证结果
实战案例:文件管理器测试用例深度解析
以youqu/case/test_dde_1271277.py为例,该用例测试文件管理器的文件选择功能,包含5个场景:
1. 基础用例结构
class TestDdeFileManagerCase(BaseCase): @pytest.fixture(scope="function", autouse=True) def setup_teardown_1271277(self): # 前置:打开看图应用并导航到图片目录 self.euler = DdeMethod() self.euler.dde_dock.click_launcher_btn_by_attr() self.euler.dde_launcher.search("kantu") self.euler.dde_launcher.click("看图") self.euler.click(*self.euler.ocr("打开图片")) yield # 后置:清理测试文件 Cmd.run_cmd("rm -rf ~/Pictures/test.txt")2. 关键操作API
| 功能 | 示例代码 | 说明 |
|---|---|---|
| 文本输入 | Src.input("kantu") | 模拟键盘输入 |
| 鼠标点击 | self.euler.click(x, y) | 基于坐标点击 |
| OCR识别 | self.euler.ocr("打开图片") | 文字定位坐标 |
| 图片断言 | self.assert_image_exist_in_dde("test_dde_1271277_1.png") | 对比截图验证 |
3. 参数化测试
通过@pytest.mark.parametrize实现多场景覆盖:
@pytest.mark.parametrize("operate", ["cancle", "esc"]) def test_dde_1271277_3(self, operate): """测试取消对话框的两种方式""" if operate == "cancle": self.euler.click(*self.euler.ocr("取消")) elif operate == "esc": Src.esc() # 模拟ESC键 self.assert_ocr_not_exist("所有图片") # 验证对话框关闭测试用例编写黄金法则
1. 单一职责原则
每个测试方法只验证一个功能点,例如test_dde_1271277_1仅测试文件选择功能,避免用例过长难以维护。
2. 依赖隔离
通过setup_teardown确保每个用例独立运行,例如:
Cmd.run_cmd("rm -rf ~/Pictures/test.txt") # 清理残留文件 Src.kill_process("deepin-image-viewer") # 关闭残留进程3. 断言明确
优先使用图片断言(assert_image_exist_in_dde)验证GUI状态,辅以OCR文本检查(assert_ocr_exist)。
4. 复用公共方法
常用操作封装在youqu/method/目录,例如:
dde_dock_method.py:任务栏操作dde_file_manager_method.py:文件管理操作
快速上手:3个实用测试场景
场景1:启动器搜索功能
def test_launcher_search(self): self.euler.dde_launcher.click_search_box_by_attr() Src.input("终端") self.assert_ocr_exist("deepin-terminal")场景2:窗口大小调整
def test_window_resize(self): x, y = self.euler.get_x_y_by_img("window_resize_btn.png") Src.drag(x, y, x+100, y+100) # 拖动调整窗口 self.assert_window_size(800, 600)场景3:多文件选择
def test_multi_file_select(self): self.euler.dde_desktop.click_center_in_dialog_by_attr() Src.ctrl_a() # 全选文件 self.assert_selected_count(5) # 验证选中数量常见问题与解决方法
Q:如何处理测试环境差异?
A:使用相对路径引用资源,如self.euler.dde_file_manager.cp_static_res("uos.PNG", "~/Pictures/"),确保测试文件一致。
Q:OCR识别不稳定怎么办?
A:优先使用图片断言,关键文字区域截图保存在youqu/case/assert_res/目录。
Q:如何调试失败用例?
A:在关键步骤添加sleep(3)和Src.screenshot("debug.png"),生成中间截图辅助定位问题。
总结与进阶路径
通过本文你已掌握dde_autotest_euler的基本用法,建议后续深入:
- 学习
youqu/module/目录下的DBus接口封装 - 研究
conftest.py中的全局夹具设计 - 参与社区贡献,提交新场景测试用例
项目文档可参考youqu/API_DOCUMENTATION_ch.md,更多实战案例可在youqu/case/目录中探索。现在就动手编写你的第一个测试用例吧! 🚀
【免费下载链接】dde_autotest_eulerdde autotest case for openEuler项目地址: https://gitcode.com/openeuler/dde_autotest_euler
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考