openpyxl,使用Excel实现接口自动化

背景:使用Excel实现接口自动化,将请求参数存放与Excel中,并将接口执行结果反写到表格中

一、了解openpyxl

Openpyxl是一个用于处理Excel文件的Python库。它允许您使用Python创建、读取和修改Excel文件。Openpyxl支持Excel 2010及以后版本,包括xlsx文件格式。不支持xls文件

二、Excel数据格式

文件定义了以下字段,格式如下图所示:

service:服务端

request_method:请求方式

router:请求地址

data:请求参数

asserts:断言

results:断言结果

response:响应信息

三、代码实现逻辑(request+pytest+openpyxl)

import pytest
from openpyxl import load_workbook


def read_data():
    """
    @description : 读取Excel表中数据
    ---------
    @param :
    -------
    @Returns : 返回Excel中测试数据,列表形式
    -------
    """
    workbook = load_workbook("testcase/test_data.xlsx")  # 加载工作簿
    sheet = workbook['测试用例'] # 加载工作表
    data = []
    # 遍历指定行范围的值,以及行数row_now
    for row_num, row in enumerate (sheet.iter_rows(min_row=2, values_only=True),start=2):
        test_case = {
            "row_num": row_num,
            "service": row[0],
            "request_method": row[1],
            "router": row[2],
            "data": row[3],
            "asserts": row[4],
            "expected_result": row[5],
            "results": row[6],
            "response": row[7]
        }
        data.append(test_case)
    return data


def send_request(test_case):
    """
    @description : 发送请求信息
    ---------
    @param test_case : 测试用例数据(存放与Excel中)
    -------
    @Returns : response
    -------
    """
    from utils.common_request import CommonRequest
    cr = CommonRequest(test_case['service'])
    if test_case['request_method'] == 'GET':
        response = cr.send_main(method=test_case['request_method'], router=test_case['router'], params=eval(test_case['data']))
    else:
        response = cr.send_main(method=test_case['request_method'], router=test_case['router'], json_data=eval(test_case['data']))
    return response


@pytest.mark.parametrize("test_case", read_data())
def test_api(test_case):
    """
    @description : 执行测试用例,并将测试结果以及响应信息,反写至Excel文件
    ---------
    @param test_case: 测试用例数据(存放与Excel中)
    -------
    """
    response = send_request(test_case)
    result = response.json()
    # 判断实际结果与预期结果是否一致
    test_case['results'] = 'Pass' if eval(test_case['asserts']) == test_case['expected_result'] else 'Fail'  # eval()函数,将字符串作为
    test_case['response'] = response.text # 将返回数据转换为str类型
    workbook = load_workbook("testcase/test_data.xlsx")  # 加载工作簿
    sheet = workbook.active # 加载工作表
    sheet.cell(row=test_case['row_num'], column=7, value=test_case['results'])
    sheet.cell(row=test_case['row_num'], column=8, value=test_case['response'])
    workbook.save("testcase/test_data.xlsx") # 保存工作簿
    assert eval(test_case['asserts']) == test_case['expected_result']

四、执行结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值