Skip to content
📔 阅读量:

用例开发 ​

用例模块路径 ​

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