在 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 条用例。
- 测试文件(测试模块):必须以
test_开头或_test结尾。- ✅ 正确:
test_login.py、test_order.py - ❌ 错误:
login_test.py(针对pytest默认规则)、check_login.py
- ✅ 正确:
- 测试类:必须以
Test开头,且类里面不能有__init__方法。- ✅ 正确:
TestLogin、TestOrderFlow - ❌ 错误:
LoginTest、CheckOrder
- ✅ 正确:
- 测试方法(用例):必须以
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_api | AutoTest、IotTest | 文件夹项目目录名:小写+下划线也可以;不要中文 |
| 包 package(文件夹带__init__.py) | 全小写,尽量短,优先不加下划线 | api、common、page | ApiCommon、PageObject | 多层子包:common.utils |
| 模块 module(.py文件) | 全小写,蛇形命名 snake_case | request_utils.py、login_page.py | RequestUtils.py、LoginPage.py | 自动化PO页面对应py文件用这个; ⚠️ pytest测试文件特殊:test_*.py |
| 类 Class | 大驼峰 CapWords(PascalCase) | LoginApi、CoursePage、BaseCase | login_api、course_page | PO模式、封装Api、基类都用; ⚠️ pytest测试类特殊:Test开头,并且不能有__init__ |
| 函数 / 普通方法 | 蛇形 snake_case | send_post、get_course_list | sendPost、GetCourseList | 普通工具方法; ⚠️ pytest测试函数:必须 test_ 开头 |
| 变量 / 实例属性 | 蛇形 snake_case | course_id、session_cookie | courseId、SessionCookie | |
| 常量 | 全大写,下划线分隔 | BASE_URL、DEFAULT_TIMEOUT | baseUrl、BaseUrl | 配置、域名、超时时间、请求头常量,自动化高频 |
| 保护成员(约定内部使用) | 单下划线开头 | _parse_response、_token | 约定:外部不要调用,只是约定,不是语法私有 | |
| 名称改写(名字修饰,少用) | 双下划线开头 | __encrypt_data | python名字重整,子类无法直接覆盖;自动化框架极少用,不要滥用 | |
| 魔法方法 | 前后双下划线 | __init__、__repr__ | 系统内置,自己不要随便造 __xxx__ |
✨ 自动化框架【pytest专属特殊规则】(重中之重,pytest靠名字自动收集用例)
- 测试文件:
test_xxx.py(主流)或者xxx_test.py- ✅
test_course_api.py - ❌
course_test.py(不推荐)、CourseTest.py
- ✅
- 测试类:
Test开头,大驼峰,不能写 init 构造函数!pytest会报错- ✅
TestCourseAdd - ❌
CourseAddTest、test_course_add
- ✅
- 测试方法/测试函数:
test_开头,蛇形- ✅
test_add_course_success - ❌
add_course_test、TestAddCourse
- ✅
- 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
❌ 高频踩坑点(自动化写代码最容易错)
- 很多人Java习惯:类小驼峰、变量大驼峰,Python自动化里不要这么写
- 测试类写了
__init__→ pytest直接识别失败 - 测试文件命名
CourseTest.py,pytest找不到用例 - 包名写大驼峰
CommonUtils,导入别扭、很多linter告警 - 不要用
l/O/I这种单字母变量,容易和数字1、0混淆
📌 补充两个软约定(团队规范,PEP8没有强制,但自动化团队基本统一)
- 页面PO类:
xxxPage,例TrainClassPage - API封装类:
xxxApi,例CourseApi
如果你想要,我可以给你一份可以直接发给团队的【自动化代码规范文档(含命名+注释+断言+分层)】。
本文系统梳理Python自动化测试框架(尤其pytest)中的命名规范,涵盖项目名、包名、模块名、类名、函数/方法名、变量名、常量名等层级,并重点强调pytest专属铁律:测试文件需以test_开头或_test.py结尾,测试类需以Test开头且无__init__,测试方法需以test_开头。所有规范均基于PEP 8并适配自动化工程实践,规避导入冲突、用例识别失败等高频问题。
4750

被折叠的 条评论
为什么被折叠?



