用例开发
用例模块路径
shell
my_autotest
├─ case <--用例模块
│ ├─ assert_res
│ │ └─ README.md
│ ├─ base_case.py
│ ├─ test_mycase_001.py
│ └─ test_mycase_002.py
├─ method
│ ├─ image_res
│ │ └─ README.md
│ ├─ static_res
│ │ └─ README.md
│ ├─ assert_method.py
│ ├─ base_method.py
│ ├─ my_autotest_method.py
│ └─ ui.ini
├─ .gitignore
├─ README.md
├─ config.py
├─ conftest.py
├─ mycase.csv
├─ pytest.ini
├─ requirements.txt
└─ ruff.toml
以 dde-file-manager 用例举例
case/base_case.py
python
from method.assert_method import AssertMethod
class BaseCase(AssertMethod):
...
test_dfm_001.py
python
from youqu3 import sleep
from case.base_case import BaseCase
from method.dde_dock_method import DdeDockMethod
class TestDfm(BaseCase):
def test_dfm_1159151(self):
"""任务栏右键启动文件管理器"""
# 右键点击任务栏上的文件管理器
DdeDockMethod.right_click_dde_file_manager_on_dock_by_attr()
# 点击右键菜单中的“打开”
DdeDockMethod.click_open_in_right_menu_by_mk()
sleep(2)
# 断言
self.assert_process_exist("dde-file-manager")
def teardown_method(self):
"""teardown"""
DdeDockMethod.kill_process("dde-file-manager")
Fixture 编写
在 conftest.py 中写 Fixture
shell
my_autotest
├─ case
│ ├─ assert_res
│ │ └─ README.md
│ ├─ base_case.py
│ ├─ test_mycase_001.py
│ └─ test_mycase_002.py
├─ method
│ ├─ image_res
│ │ └─ README.md
│ ├─ static_res
│ │ └─ README.md
│ ├─ assert_method.py
│ ├─ base_method.py
│ ├─ my_autotest_method.py
│ └─ ui.ini
├─ .gitignore
├─ README.md
├─ config.py
├─ conftest.py
├─ mycase.csv
├─ pytest.ini
├─ requirements.txt
└─ ruff.toml
conftest.py
python
import pytest
@pytest.fixture(scope="function", autouse=True)
def do_something():
print("我是用例前置", datetime.now())
sleep(1)
yield
print("我是用例后置", datetime.now())
在用例中写 Fixture
test_dfm_001.py
python
import pytest
from youqu3 import sleep
from case.base_case import BaseCase
from method.dde_dock_method import DdeDockMethod
class TestDfm(BaseCase):
@pytest.fixture(scope="function")
def do_something(self):
print("我是用例前置", datetime.now())
sleep(1)
yield
print("我是用例后置", datetime.now())
def test_dfm_1159151(self, do_something):
"""任务栏右键启动文件管理器"""
# 右键点击任务栏上的文件管理器
DdeDockMethod.right_click_dde_file_manager_on_dock_by_attr()
# 点击右键菜单中的“打开”
DdeDockMethod.click_open_in_right_menu_by_mk()
sleep(2)
# 断言
self.assert_process_exist("dde-file-manager")
实践规范
用例文件名称
bash
test_{case_name}_{case_id}.py
- 小驼峰命名。
test_
开头。case_id
结尾。
类名称
- 大驼峰命名。
- 以
Test
开头。 - 以
用例名称
结尾,所有用例可以使用相同的类名。 - 继承
BaseCase
。
用例函数
python
def test_{case_name}_{case_id}():
...
用例注释
python
def test_{case_name}_{case_id}():
"""用例标题""" <--用例注释
用例注释建议只写用例标题或者测试点,也会自动在日志中输出,用例步骤不宜写在里面,否则输出的日志太长了。
CSV文件(标签化管理)
shell
my_autotest
├─ case
│ ├─ assert_res
│ │ └─ README.md
│ ├─ base_case.py
│ ├─ test_mycase_001.py
│ └─ test_mycase_002.py
├─ method
│ ├─ image_res
│ │ └─ README.md
│ ├─ static_res
│ │ └─ README.md
│ ├─ assert_method.py
│ ├─ base_method.py
│ ├─ my_autotest_method.py
│ └─ ui.ini
├─ .gitignore
├─ README.md
├─ config.py
├─ conftest.py
├─ mycase.csv <--标签管理文件
├─ pytest.ini
├─ requirements.txt
└─ ruff.toml
- CSV文件名称对应用例文件名称的
case_name
:{case_name}.csv
。 - 第一列写
case_id
。 - ...了解更多
图像识别断言的图片资源
用例中涉及使用图像识别断言
的图片资源,统一存放在 case/assert_res
目录:
shell
my_autotest
├─ case <--用例模块
│ ├─ assert_res
│ │ ├─ xxx.png
│ │ └─ README.md
│ ├─ base_case.py
│ ├─ test_mycase_001.py
│ └─ test_mycase_002.py
├─ method
│ ├─ image_res
│ │ └─ README.md
│ ├─ static_res
│ │ └─ README.md
│ ├─ assert_method.py
│ ├─ base_method.py
│ ├─ my_autotest_method.py
│ └─ ui.ini
├─ .gitignore
├─ README.md
├─ config.py
├─ conftest.py
├─ mycase.csv
├─ pytest.ini
├─ requirements.txt
└─ ruff.toml