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