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

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

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

列表推导式

列表推导式(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': 'user_1@example.com'}
Sending request with payload: {'username': 'user_2', 'email': 'user_2@example.com'}
Sending request with payload: {'username': 'user_3', 'email': 'user_3@example.com'}

场景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'}
责任编辑:华轩 来源: 测试开发学习交流
相关推荐

2024-02-28 16:04:04

深拷贝Python

2024-04-03 15:27:31

Python接口自动化开发

2023-10-06 22:12:40

Python开发工业系统

2018-05-11 08:29:10

Python自动化测试数据驱动

2018-05-11 13:39:05

PythonCSV接口测试

2022-08-05 22:15:26

Python自动化测试

2022-12-26 12:30:28

接口测试

2023-09-13 11:40:12

2024-02-26 09:00:00

生成式AI主机自动化

2022-08-14 16:11:23

Python自动化测试数据

2017-12-17 21:58:18

2024-01-08 13:31:00

Rust自动化测试

2024-01-11 10:16:46

Python开发

2022-06-26 09:55:00

接口自动化项目

2011-05-31 18:17:07

分布式测试

2011-05-30 17:50:23

分布式测试

2022-10-09 11:07:40

物联网如自动化

2022-02-18 13:12:49

人工智能自动化技术

2022-02-17 17:37:17

超级自动化人工智能AI

2010-12-06 09:59:58

点赞
收藏

51CTO技术栈公众号