3

Python 推导式在接口自动化里的运用

 4 months ago
source link: https://www.51cto.com/article/787578.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Python 推导式在接口自动化里的运用

作者:华安9527 2024-04-30 15:05:36
Python推导式是一种紧凑且强大的构造,允许你用一行代码高效地生成新的数据结构(如列表、字典、集合或生成器)基于现有的可迭代对象。推导式结合了循环、条件判断等结构,提供了非常灵活的方式来处理数据。

Python推导式是一种紧凑且强大的构造,允许你用一行代码高效地生成新的数据结构(如列表、字典、集合或生成器)基于现有的可迭代对象。推导式结合了循环、条件判断等结构,提供了非常灵活的方式来处理数据。

3749660958968a7eeb2641a50d17f8db123f4a.jpg

列表推导式

列表推导式(List Comprehensions)

列表推导式是最常见的一种,用于从一个可迭代对象创建一个新列表,其基本语法如下:

[expression for item in iterable if condition]

expression 是针对每个item进行计算并最终放入新列表的表达式。

item 是从iterable中取出的单个元素。

iterable 是任何可迭代对象,如列表、元组、集合、字典或生成器。

condition(可选)是一个过滤条件,只有当该条件为真时,相应的项才会被包含在结果中。

字典推导式

字典推导式(Dictionary Comprehensions)

字典推导式用来快速创建字典,其语法结构如下:

{key_expression: value_expression for item in iterable if condition}

key_expression 和 value_expression 分别对应新字典中每个键值对的键和值。

其他部分与列表推导式相似。

集合推导式

集合推导式(Set Comprehensions)

集合推导式与列表推导式类似,但结果是一个集合(无序且元素唯一),语法为:

{expression for item in iterable if condition}

生成器推导式

生成器推导式(Generator Expressions)

生成器推导式与列表推导式非常相似,但是使用圆括号而不是方括号包围,生成一个生成器对象,它在迭代时按需产生值,节省内存:

(expression for item in iterable if condition)

场景1: 动态参数构造

# 假设我们需要测试用户注册接口,每个用户有不同的用户名和邮箱

params_list = [(f"user_{i}", f"user_{i}@example.com") for i in range(1, 4)]
for username, email in params_list:
    payload = {"username": username, "email": email}
    print(f"Sending request with payload: {payload}")
    # 实际使用时这里会是发送请求的代码,例如 `requests.post(url, jsnotallow=payload)`
输出示例:
Sending request with payload: {'username': 'user_1', 'email': '[email protected]'}
Sending request with payload: {'username': 'user_2', 'email': '[email protected]'}
Sending request with payload: {'username': 'user_3', 'email': '[email protected]'}

场景2: 响应数据分析

# 假设我们已经获取到了一个包含用户信息的API响应

import requests
response = requests.get("https://api.example.com/users")
response_json = response.json()
# 提取所有用户的ID
user_ids = [user['id'] for user in response_json['data']]
print(f"Extracted User IDs: {user_ids}")
输出示例:
Extracted User IDs: [1, 2, 3, 4, 5]

场景3: 断言优化

# 假设我们要验证返回的用户角色集合是否正确

expected_roles = {"admin", "editor"}
response = requests.get("https://api.example.com/roles")
actual_roles = {role['name'] for role in response.json()}
assert expected_roles == actual_roles, f"Expected roles {expected_roles} but got {actual_roles}"
print("Roles assertion passed.")
输出示例:
Roles assertion passed.

或者如果断言失败,则会输出错误信息。

场景4: 结果筛选与异常检测

# 模拟一组API响应

responses = [{"status_code": 200}, {"status_code": 404}, {"status_code": 200}]
failed_responses = [response for response in responses if response["status_code"] != 200]
if failed_responses:
    print(f"Failed responses detected: {failed_responses}")
else:
    print("All requests succeeded.")
输出示例:
Failed responses detected: [{'status_code': 404}]

场景5: 测试数据准备

# 生成用于测试的数据

test_data_gen = (
    {"id": idx, "name": f"Test_{idx}", "status": "active" if idx % 2 == 0 else "inactive"}
    for idx in range(1, 6)
)
for data in test_data_gen:
    print(f"Generated test data: {data}")
    # 在实际使用中,这里会是使用这些数据进行API请求的代码
输出示例:
Generated test data: {'id': 1, 'name': 'Test_1', 'status': 'inactive'}
Generated test data: {'id': 2, 'name': 'Test_2', 'status': 'active'}
Generated test data: {'id': 3, 'name': 'Test_3', 'status': 'inactive'}
Generated test data: {'id': 4, 'name': 'Test_4', 'status': 'active'}
Generated test data: {'id': 5, 'name': 'Test_5', 'status': 'inactive'}

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK