4. 函数参数和返回值怎么理解
函数是 Python 自动化测试脚本中最重要的基础能力之一。很多测试同学会写几行脚本,但代码大量重复:每个用例都写登录、请求、断言、读取数据。这样的脚本能跑,但不好维护。函数的价值就是把重复逻辑封装起来,让脚本更清晰、更稳定、更容易复用。
面试中问函数参数和返回值,测试岗位不要只背“参数是传入函数的数据,返回值是函数执行后的结果”。更好的回答是:我会用函数封装登录、发送请求、读取测试数据、数据库查询、断言和日志记录;参数用于传入不同测试数据,返回值用于给后续步骤继续使用,比如返回 Token、响应对象、数据库查询结果。
一、函数为什么重要
自动化测试中常见重复逻辑包括:
- 登录获取 Token;
- 发送 HTTP 请求;
- 拼接 URL;
- 读取 YAML/JSON/Excel 数据;
- 连接数据库;
- 断言响应;
- 写日志;
- 生成测试数据。
这些逻辑如果不封装,每个用例都写一遍,后期接口变更会非常难维护。
二、函数基本写法
def add(a, b):
return a + b
a 和 b 是参数,return 后面是返回值。
测试脚本中的例子:
def build_url(base_url, path):
return f"{base_url}{path}"
使用:
url = build_url("https://api.example.com", "/api/login")
三、参数怎么理解
参数是函数执行需要的输入。
例如登录函数:
def login(username, password):
payload = {"username": username, "password": password}
return payload
不同用户名密码可以复用同一个函数。
测试中常见参数:
- 请求方法;
- URL;
- Header;
- 请求参数;
- 预期结果;
- 用户名密码;
- 数据库 SQL;
- 文件路径。
四、默认参数
默认参数可以给参数设置默认值。
def send_request(method="GET", url="", headers=None, json=None):
pass
测试封装中常用于默认请求方法、默认超时时间、默认环境。
注意:可变类型不要直接作为默认参数,比如不要写 headers={},更推荐 headers=None 后在函数内处理。
五、关键字参数
调用函数时可以指定参数名,提升可读性。
send_request(method="POST", url="/api/login", json={"username": "tester"})
测试脚本里建议多用关键字参数,避免参数顺序写错。
六、返回值怎么理解
返回值是函数执行后的结果,供后续使用。
例如登录函数返回 Token:
def login():
token = "mock_token"
return token
token = login()
接口请求函数返回响应:
def send_request(url, payload):
response = {"code": 0, "data": {}}
return response
返回值可以是字符串、数字、字典、列表、对象,也可以返回多个值。
七、多个返回值
def get_user_info():
user_id = 1001
token = "abc"
return user_id, token
user_id, token = get_user_info()
Python 多个返回值本质上是返回元组。测试中可以用于同时返回状态码和响应体。
八、函数封装接口请求
自动化框架里最常见的是封装请求方法。
def send_api(method, url, headers=None, json=None):
print(f"发送请求: {method} {url}")
return {"code": 0, "message": "success"}
用例中只需要调用:
result = send_api("POST", "/api/login", json={"username": "tester"})
assert result["code"] == 0
这样接口请求逻辑统一维护。
九、函数封装断言
def assert_code(response, expected_code):
assert response["code"] == expected_code
好处是断言失败信息可以统一处理,减少重复代码。
十、函数封装测试数据读取
def read_json_file(file_path):
import json
with open(file_path, "r", encoding="utf-8") as f:
return json.load(f)
用例只关心数据,不关心读取细节。
十一、常见错误
1. 函数做太多事情
一个函数既登录、又请求、又断言、又写数据库,会很难维护。函数职责要清晰。
2. 没有返回值
函数内部打印了结果,但外部拿不到数据,后续无法断言。
3. 参数太多且顺序混乱
建议使用关键字参数或把参数封装成字典。
4. 可变默认参数
不要写 def func(data=[]) 这种形式,容易产生意外共享。
十二、面试回答模板
如果面试官问“函数参数和返回值怎么理解”,可以这样回答:
函数是为了封装重复逻辑,参数是传给函数的输入,返回值是函数执行后给外部继续使用的结果。在测试自动化中,我会把登录、请求封装、读取测试数据、数据库查询、断言和日志封装成函数。比如登录函数接收用户名和密码作为参数,返回 Token;请求函数接收 method、url、headers、json 等参数,返回响应对象;断言函数接收响应和预期 code,统一校验结果。这样可以减少重复代码,提高框架维护性。
十三、练习清单
- 写一个 URL 拼接函数;
- 写一个登录函数;
- 返回 Token;
- 写一个接口请求函数;
- 写一个断言函数;
- 写一个读取 JSON 文件函数;
- 练习默认参数;
- 练习关键字参数;
- 避免可变默认参数;
- 准备函数面试回答。
函数是自动化框架的组织方式。理解参数和返回值,才能把脚本从“能跑”提升到“可维护”。
配套刷题:

