基于Excel数据驱动实现接口自动化测试

一、数据准备

此处准备了一个简单的Excel数据文档。
在这里插入图片描述
存放项目目录为:
在这里插入图片描述


二、具体步骤及代码

1、关键字封装
将get、post等常用行为进行二次封装。
代码(api_key.py)如下:
在这里插入图片描述

import allure
import json
import jsonpath
import requests

# 定义一个关键字类
class ApiKey:
    # 将get请求行为进行封装
    @allure.step("发送get请求")
    def get(self, url, params=None, **kwargs):
        return requests.get(url=url, params=params, **kwargs)

    # 将post请求行为进行封装
    @allure.step("发送post请求")
    def post(self, url, data=None, **kwargs):
        return requests.post(url=url, data=data, **kwargs)

    # 由于接口之间可能相互关联,因此下一个接口需要上一个接口的某个返回值,此处采用jsonpath对上一个接口返回的值进行定位并取值
    @allure.step("获取返回结果字典值")
    def get_text(self, data, key):
        # json数据转换为字典
        json_data = json.loads(data)
        # jsonpath取值
        value = jsonpath.jsonpath(json_data, '$..{0}'.format(key))
        return value[0]
  • 其中引用allure.step()装饰器进行步骤详细描述,使测试报告更加详细。
  • 使用jsonpath对接口的返回值进行取值。

2、Excel数据驱动
读取文档内容,判断文档内容是否有值进行调用传参。
代码(test_excel_read02.py)如下:
在这里插入图片描述

import os
import allure
import openpyxl
import pytest
from api_keyword.api_key import ApiKey


# excel用例的读取与执行
def test01():
    # 读取表格
    excel = openpyxl.load_workbook('../case/api_cases.xlsx')
    # 读取sheet页
    sheet = excel['Sheet1']
    # 初始化工具类
    ak = ApiKey()

    # 读取excel内容,实现文件驱动自动化执行
    for value in sheet.values:
        # 判断当前行第一列的值是否是数字编号
        if type(value[0]) is int:
            # 用例标题
            title = value[10]
            # 请求参数
            data = value[5]
            # 校验字段
            assert_value = value[7]
            # 预期结果
            expect_value = value[8]

            '''判断是否存在请求头'''
            # 存在请求头
            if value[4]:
                '''判断是否存在请求参数'''
                # 存在请求参数
                if value[5]:
                    dict_data = {
                        'url': value[1] + value[2],
                        # eval:将字符串str当做有效的表达式来求值并返回计算结果,此处直接给headers一个字典
                        'headers': eval(value[4]),
                        # 参数类型
                        value[6]: eval(data)
                    }
                # 不存在请求参数
                else:
                    dict_data = {
                        'url': value[1] + value[2],
                        # eval:将字符串str当做有效的表达式来求值并返回计算结果,此处直接给headers一个字典
                        'headers': eval(value[4]),
                    }
            # 不存在请求头
            else:
                '''判断是否存在请求参数'''
                # 存在请求参数
                if value[5]:
                    dict_data = {
                        'url': value[1] + value[2],
                        # 参数类型
                        value[6]: eval(data)
                    }
                # 不存在请求参数
                else:
                    dict_data = {
                        'url': value[1] + value[2]
                    }

            with allure.step(title):
                # 进行请求
                # getattr(对象,属性,赋值)在属性不存在时可以直接赋值
                res = getattr(ak, value[3])(**dict_data)
                """
                常规的参数传递:
                requests.get(url="",:params="",headers="")
                如果接口封装时,参数做了**kwargs,可以直接通过字典传递
                """
                try:
                    result = ak.get_text(res.text, assert_value)
                    print(result == expect_value)
                except:
                    print("==========实际结果==========")
                    print("请求参数有误,请检查")


if __name__ == '__main__':
    pytest.main(['-v',
                 '--alluredir', './result', '--clean-alluredir'])
    os.system('allure serve result')

3、报告结果
在这里插入图片描述


三、代码下载地址

链接:https://pan.baidu.com/s/1YZnsyJqRENY05ImtOGxr0w
提取码:q21d
–来自百度网盘超级会员V2的分享


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值