python自动化框架中的类,函数,库,模块,文件,包,项目名等等有没有命名规范

本文系统梳理Python自动化测试框架(尤其pytest)中的命名规范,涵盖项目名、包名、模块名、类名、函数/方法名、变量名、常量名等层级,并重点强调pytest专属铁律:测试文件需以test_开头或_test.py结尾,测试类需以Test开头且无__init__,测试方法需以test_开头。所有规范均基于PEP 8并适配自动化工程实践,规避导入冲突、用例识别失败等高频问题。

在 Python 自动化测试框架中,命名规范非常重要。如果命名杂乱无章,不仅代码极难维护,甚至连测试框架(如 pytest)都无法正确识别和运行你的测试用例。

Python 官方有一套全球公认的代码风格指南,叫做 PEP 8。自动化测试框架在此基础上,结合了 pytest 等工具的默认发现规则,形成了一套行业通用的规范。

我们按从大到小的层级为你梳理:


1. 项目名 (Project Name)

  • 规范:全小写字母,可以使用下划线 _ 或连字符 -(但在 Python 中推荐用下划线)。
  • 示例:port_auto、web_ui_test、iot_platform_api。
  • 避坑:不要用中文,不要包含空格。

2. 包名 (Package - 也就是带 __init__.py 的文件夹)

  • 规范:全小写字母。强烈建议不要使用下划线,尽量用简单的短单词。
  • 示例:api、testcases、utils、common、pages。
  • 反例:Api_Auto(大写不行)、test-cases(不要用连字符)。
  • 原因:包名要简短,下划线有时候会导致导包时的路径冲突(尤其是和标准库冲突时)。

3. 模块名 / 文件名 (Module - 也就是 .py 文件)

  • 规范:全小写字母,多个单词用下划线连接(Snake Case,蛇形命名法)。
  • 示例:login_api.py、encrypt_md5.py、handle_data.py。
  • 避坑:
    • 绝对不要用中文或特殊字符。
    • 千万不要和 Python 内置标准库同名(比如你写个 requests.py 或者 random.py,会导致系统导包混乱)。

4. 类名 (Class)

  • 规范:大驼峰命名法(CamelCase)。每个单词首字母大写,单词之间不加下划线。
  • 示例(接口自动化):LoginApi、OrderService。
  • 示例(UI自动化-PO模式):LoginPage、BasePage、HomePage。
  • 反例:login_page(这是文件/变量名)、loginPage(小驼峰,Java常用,Python不推荐)。

5. 函数名 / 方法名 (Function / Method)

  • 规范:全小写字母,多个单词用下划线连接(Snake Case),尽量用“动词+名词”结构。
  • 示例:get_user_info()、encrypt_md5()、send_request()、login()。
  • 反例:GetUserInfo()(大写开头会被误认为是类)、getuserinfo()(没有可读性)。

6. 变量名 (Variable)

  • 规范:全小写字母,多个单词用下划线连接(Snake Case)。
  • 示例:user_name、response_data、token、header。
  • 反例:a、b、data1(可读性差)、UserName(大驼峰一般是类或常量)。

7. 常量名 (Constant)

  • 规范:全大写字母,多个单词用下划线连接。
  • 示例(通常放在配置文件中):BASE_URL、DB_PASSWORD、TIMEOUT、MAX_RETRY。

🚨 自动化测试专属的“铁律”命名(极其重要!)

如果你用的是 pytest 框架,它默认按照特定的前缀来查找测试用例。如果你不按这个规范命名,pytest 会直接忽略你的代码,导致运行结果为 0 条用例。

  1. 测试文件(测试模块):必须以 test_ 开头或 _test 结尾。
    • ✅ 正确:test_login.py、test_order.py
    • ❌ 错误:login_test.py(针对pytest默认规则)、check_login.py
  2. 测试类:必须以 Test 开头,且类里面不能有 __init__ 方法。
    • ✅ 正确:TestLogin、TestOrderFlow
    • ❌ 错误:LoginTest、CheckOrder
  3. 测试方法(用例):必须以 test_ 开头。
    • ✅ 正确:def test_login_success():、def test_add_course():
    • ❌ 错误:def login_success():

💡 结合你的项目(最佳实践排版)

按照你的 port_auto 项目,一套教科书级别的命名应该是这样的:

port_auto/                   # 项目名 (全小写)
├── api/                     # 包名 (全小写)
│   ├── __init__.py
│   ├── login_api.py         # 模块名 (全小写+下划线)
│   └── course_api.py
├── testcases/               # 测试包
│   ├── __init__.py
│   ├── test_login.py        # 测试文件 (test_开头)
│   └── test_course.py
├── utils/                   # 工具包
│   ├── __init__.py
│   └── encrypt_md5.py       # 模块名
├── config.py                # 配置文件
└── main.py

在 test_login.py 里面的代码:

import pytest
from api.login_api import LoginApi       # 类名:大驼峰
from utils.encrypt_md5 import encrypt_md5 # 函数名:全小写

# 测试类 (必须Test开头)
class TestLogin:
    
    # 测试方法 (必须test_开头)
    def test_login_success(self):
        username = "admin"     # 变量名:全小写
        password = "123456"
        
        # 调用工具函数
        md5_pwd = encrypt_md5(password) 
        
        # 实例化接口类
        login_api = LoginApi() 
        res = login_api.login(username, md5_pwd)
        
        assert res.status_code == 200

    def test_login_fail_with_wrong_pwd(self):
        # ...
        pass

💎 总结

记住三个最常用的:

  • 类名:大驼峰(LoginPage)
  • 文件、函数、变量:全小写+下划线(login_api.py, get_token(), user_name)
  • 测试:test_ 走天下(test_xxx.py, class TestXxx, def test_xxx)

总纲

基础标准:PEP8,自动化框架(pytest接口/UI自动化)在PEP8之上,还有pytest专属发现规则,面试、写框架都按这套来

禁止:中文、空格、横杠 -、拼音、无意义 a/b/c;尽量见名知意

对象规范风格✅ 正确示例❌ 错误示例补充说明(自动化重点)
项目名小写,短,尽量不用下划线,kebab-case(打包上传pypi推荐)iot_test、auto_apiAutoTest、IotTest文件夹项目目录名:小写+下划线也可以;不要中文
包 package(文件夹带__init__.py)全小写,尽量短,优先不加下划线api、common、pageApiCommon、PageObject多层子包:common.utils
模块 module(.py文件)全小写,蛇形命名 snake_caserequest_utils.py、login_page.pyRequestUtils.py、LoginPage.py自动化PO页面对应py文件用这个; ⚠️ pytest测试文件特殊:test_*.py
类 Class大驼峰 CapWords(PascalCase)LoginApi、CoursePage、BaseCaselogin_api、course_pagePO模式、封装Api、基类都用; ⚠️ pytest测试类特殊:Test开头,并且不能有__init__
函数 / 普通方法蛇形 snake_casesend_post、get_course_listsendPost、GetCourseList普通工具方法; ⚠️ pytest测试函数:必须 test_ 开头
变量 / 实例属性蛇形 snake_casecourse_id、session_cookiecourseId、SessionCookie
常量全大写,下划线分隔BASE_URL、DEFAULT_TIMEOUTbaseUrl、BaseUrl配置、域名、超时时间、请求头常量,自动化高频
保护成员(约定内部使用)单下划线开头_parse_response、_token约定:外部不要调用,只是约定,不是语法私有
名称改写(名字修饰,少用)双下划线开头__encrypt_datapython名字重整,子类无法直接覆盖;自动化框架极少用,不要滥用
魔法方法前后双下划线__init__、__repr__系统内置,自己不要随便造 __xxx__

✨ 自动化框架【pytest专属特殊规则】(重中之重,pytest靠名字自动收集用例)

  1. 测试文件:test_xxx.py(主流)或者 xxx_test.py
    • ✅ test_course_api.py
    • ❌ course_test.py(不推荐)、CourseTest.py
  2. 测试类:Test开头,大驼峰,不能写 init 构造函数!pytest会报错
    • ✅ TestCourseAdd
    • ❌ CourseAddTest、test_course_add
  3. 测试方法/测试函数:test_开头,蛇形
    • ✅ test_add_course_success
    • ❌ add_course_test、TestAddCourse
  4. fixture:普通蛇形命名即可,不需要前缀
    • ✅ login_token、session

pytest发现规则一句话:pytest自动扫描 test_*.py,里面 Test* 的类、test_* 的方法,自动收集成用例

📂 给你一套标准自动化目录示范(全部遵守这套命名)

auto_iot/                     # 项目名:小写蛇形
├── common/                   # 包:全小写
│   ├── __init__.py
│   ├── request_utils.py      # 模块:小写蛇形
│   └── assert_tools.py
├── page/                     # PO页面对象包
│   ├── login_page.py
│   └── train_class_page.py
├── config/
│   ├── __init__.py
│   └── settings.py
├── tests/                    # 测试用例包
│   ├── test_course.py        # 测试文件 test_开头
│   └── test_login.py
├── conftest.py               # pytest固定名字,不能改!共享fixture
└── run.py
# 示例代码对照
BASE_URL = "http://xxx"  # 常量:全大写

class LoginApi:          # 普通类:大驼峰
    def send_login(self, username, pwd): # 方法:蛇形
        resp = self._send_request(username, pwd) # 单下划线:内部方法
        return resp
    
    def _send_request(self, username, pwd):
        pass

class TestLogin:         # pytest测试类:Test开头
    def test_login_ok(self): # 测试方法 test_开头
        pass

❌ 高频踩坑点(自动化写代码最容易错)

  1. 很多人Java习惯:类小驼峰、变量大驼峰,Python自动化里不要这么写
  2. 测试类写了 __init__ → pytest直接识别失败
  3. 测试文件命名 CourseTest.py,pytest找不到用例
  4. 包名写大驼峰 CommonUtils,导入别扭、很多linter告警
  5. 不要用 l / O / I 这种单字母变量,容易和数字1、0混淆

📌 补充两个软约定(团队规范,PEP8没有强制,但自动化团队基本统一)

  • 页面PO类:xxxPage,例 TrainClassPage
  • API封装类:xxxApi,例 CourseApi

如果你想要,我可以给你一份可以直接发给团队的【自动化代码规范文档(含命名+注释+断言+分层)】。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值