在接口自动化测试中,Python生成器函数可以非常有效地帮助我们处理大量数据流或分批次执行测试用例,避免一次性加载所有数据导致的内存消耗问题。

分批发送请求

当需要对大量数据执行相同的API请求时,可以使用生成器分批发送请求,以减少内存占用。

def batch_request(data_list, batch_size=10):


    for i in range(0, len(data_list), batch_size):


        yield data_list[i:i+batch_size]


# 假设api_call是发送请求的函数


def api_call(batch_data):


    # 实现调用API逻辑


    pass


data = [1, 2, 3, ..., 100]  # 大量数据


for batch in batch_request(data, 10):


    api_call(batch)‍

无限数据流

生成器可以用来创建一个无限的数据序列,例如生成连续的ID用于测试。

def infinite_ids(start=1):


    id = start


    while True:


        yield id


        id += 1


id_generator = infinite_ids()


for _ in range(5):


    print(next(id_generator))‍

读取大文件分段处理

处理大文件时,使用生成器逐行读取,避免一次性加载整个文件到内存。

def read_large_file(file_path):


    with open(file_path, 'r') as file:


        for line in file:


            yield line.strip()


for line in read_large_file('data.txt'):


    process_line(line)  # 假设process_line是处理每一行数据的函数

动态生成测试数据

根据需要动态生成测试用例数据。

def test_data_generator(num_cases):


for _ in range(num_cases):


yield {


'username': f'user{_}',


'email': f'user{_}@example.com',


'password': 'password123'


}


for case in test_data_generator(5):


print(case)

递归遍历目录中的文件

使用生成器遍历并处理目录下的所有文件。

import os


def walk_files(dir_path):


    for root, dirs, files in os.walk(dir_path):


        for file in files:


            yield os.path.join(root, file)


for filepath in walk_files('./test_files'):


    print(filepath)

延迟计算

对于资源密集型的操作,如复杂计算,仅在需要时执行。

def fibonacci(n):


    a, b = 0, 1


    for _ in range(n):


        yield a


        a, b = b, a + b


for num in fibonacci(10):


    print(num)

数据过滤

从大量数据中筛选符合条件的数据。

def filter_data(data_list, condition=lambda x: x % 2 == 0):


    for item in data_list:


        if condition(item):


            yield item


data = [1, 2, 3, 4, 5, 6]


even_numbers = list(filter_data(data))


print(even_numbers)

批量处理响应

处理API批量请求的响应。

def process_responses(responses):


    for response in responses:


        yield parse_response(response)  # 假设parse_response处理单个响应


responses = [api_call(data) for data in batch_request(data)]


for processed in process_responses(responses):


    print(processed)

重复执行任务直到满足条件

例如,持续检查API状态直到成功。

def retry_until_success(api_func, max_attempts=5):


    for attempt in range(max_attempts):


        result = api_func()


        if result['status'] == 'success':


            yield result


            break


    else:


        yield {'status': 'failed', 'message': 'Max attempts reached'}


def check_status():


    # 假设的API调用逻辑


    pass


for outcome in retry_until_success(check_status):


    print(outcome)

测试报告生成

逐条生成测试报告项,避免一次性占用大量内存。

def generate_test_report(test_results):


    for test in test_results:


        yield f"Test {test['name']} - Status: {test['status']}\nDetails: {test['details']}"


results = [


    {'name': 'Test 1', 'status': 'Pass', 'details': 'All good'},


    ...


]


with open('report.txt', 'w') as report_file:


    for entry in generate_test_report(results):


        report_file.write(entry)

以上示例展示了生成器函数在接口自动化测试中的多样应用,包括数据处理、资源管理、及测试逻辑控制等方面,旨在提升测试效率和灵活性。

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】

​​​软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

在这里插入图片描述

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐