pytest+requests+Excel+allure接口自动化测试框架实践

背景

应对公司项目需要,搭建一个简单实用的接口自动化测试框架,供测试人员实用,主要是用来做系统的业务流程功能验证,去除了大部分的异常校验。

简介

这套框架使用的技术包括:pytest+requests+Excel+allure
下面先介绍一下该框架的分层结构:
框架主要分层结构
config:用来存放读取Excel测试用例的方法
kword:用来存放用例执行过程中需要封装的方法
test_case:用来存放用例执行的测试代码
test_data:用来存放执行的测试用例,以excel方式
main_run:总执行文件

实践

测试用例模板

先新建excel文档auto_cases.xlsx,定义测试用例的模板,包括:编号、用例名称、URL、路径等信息,如下所示
在这里插入图片描述

  • 编号:测试用例编号
  • 用例名:执行的用例名称
  • 地址:接口URL和端口
  • 路径:接口路径
  • 请求方法:接口请求方式
  • 请求头:接口传递的请求头信息
  • 参数:接口传递的请求参数
  • 校验字段:接口返回信息中检查的字段
  • 预期结果:接口执行时校验字段预期的结果
  • 实际结果:接口执行后校验字段实际的结果
  • 测试结果:接口执行后的结果
  • JSON提取_引用名称:接口关联提取的参数名称
  • JSON表达式:关联接口使用的表达式
  • 模块名称:接口所属的模块
  • 功能名称:接口所属的功能
  • 用例级别:接口执行的级别

创建测试用例后,将excel复制到test_data目录下

读取测试用例内容

config目录下面新增excel_read.py,通过openpyxl包中的load_workbook方法自动读取excel文件中的数据,返回一个list_tulpe列表

'''
读取excel内容,实现文件驱动自动化执行
'''

import openpyxl

def read_Excel():
    excel = openpyxl.load_workbook('./test_data/auto_cases.xlsx')
    sheet = excel['Sheet1']
    list_tulpe = []
    # 逐行读取excel数据
    for value in sheet.values:
        # 判断当前第一列的值,是否是数值编号
        if type(value[0]) is int:
            # 将元祖装载进list
            list_tulpe.append(value)
    return list_tulpe

调试返回的list_tulpe为
在这里插入图片描述

接口封装

kword目录下新增api_key.py文件,新建接口关键字驱动类ApiKey,用于提供自动化接口测试的关键字方法

import json
import allure
import jsonpath
import requests

class ApiKey:
    # 基于jsonpath获取数据的关键字,用于提取所需要的内容
    def get_text(self,data,key):
        # loads将json格式数据转换为字典格式
        # dumps将字典格式的内容转换为json格式
        dict_data = json.loads(data)
        value_list = jsonpath.jsonpath(dict_data,key)
        return value_list[0]

    @allure.step("发送get请求")
    # get请求的封装
    def get(self,url, params=None, **kwargs):
        return requests.get(url, params=params, **kwargs)

    @allure.step("发送post请求")
    # post请求的封装
    def post(self,**kwargs):
        return requests.post(**kwargs)
测试执行用例

test_case目录下面新增test_excel.py,实现测试用例执行

import openpyxl
import pytest
import allure

from config.excel_read import read_Excel
from kword.api_key import ApiKey


def setup_module():
    # 1.定义全局变量
    global excel, sheet, excel_path, ak, all_val,result
    # 2.初始化Excel文件
    excel_path = './test_data/auto_cases.xlsx'
    excel = openpyxl.load_workbook(excel_path)
    sheet = excel['Sheet1']
    # 3.实例化工具类
    ak = ApiKey()
    # 4.初始化字典
    all_val = {}
    result = None

@pytest.mark.parametrize('organ',read_Excel())
def test_organ(organ):
    r = organ[0] + 1
    # 如果存在自定义标题
    if organ[1] is not None:
    # 动态生成标题
        allure.dynamic.title(organ[1])
    # 动态获取级别信息
    if organ[16] is not None:
        allure.dynamic.severity(organ[16])
    # 动态获取模块名称
    if organ[14] is not None:
        allure.dynamic.feature(organ[14])
    # 动态获取用例功能名称
    if organ[15] is not None:
        allure.dynamic.story(organ[15])

    # 判断当前行的第一列的值,是否是数字编号
    if type(organ[0]) is int:
        # 准备需要的测试数据
        # 请求参数
        data = organ[6]
        # 校验字段
        assert_value = organ[8]
        # 预期结果字段
        expect_value = organ[9]
        if organ[6]:
            dict_data = {
                # 不能直接取字符串,要求是字典
                'url': organ[2] + organ[3],
                # eval官方解释:将字符串str当做有效的表达式来求值并返回计算结果
                # 这里直接给headers一个字典值
                'headers': eval(organ[5]),
                organ[7]: eval(data)
            }
        else:
            dict_data = {
                'url': organ[2] + organ[3],
                'headers': eval(organ[5])
            }
            print(dict_data)

        # 使用反射模拟请求
        res = getattr(ak, organ[4])(**dict_data)

        if organ[12] is not None:
            if ';' in organ[12]:
                # ===============JSON提取,多参数版================
                varStr = organ[12]
                # 用分号分割varStr字符串,并保存到列表里
                varStrList = varStr.split(';')
                # 获取varStrList列表长度
                length = len(varStrList)
                # 遍历分割JSON表达式
                jsonStr = organ[13]
                jsonList = jsonStr.split(';')
                # 循环输出列表值
                for i in range(length):
                    # json引用变量名获取
                    key = varStrList[i]
                    # json表达式获取
                    jsonExp = jsonList[i]
                    # 字典值的获取
                    valueJson = ak.get_text(res.text, jsonExp)
                    # 变量和值的存储
                    all_val[key] = valueJson
            else:
                # ===============JSON提取,单参数版================
                # 根据Excel填写的json表达式动态获取值
                valueJson = ak.get_text(res.text, organ[13])
                # 将获取到的token值赋值给Excel中定义的变量名,用定义的字典all_val保存相应得到的键值
                # 变量名获取
                key = organ[12]
                all_val[key] = valueJson
                print('key值为:' + key)
                print(valueJson)
                
            # 结果校验
            # 实际结果
            # 给它一个默认值,让异常的报错信息好检查一些
        result = ak.get_text(res.text, assert_value)
        print('==========检查信息=========')
        print("检验字段:" + organ[8])
        print("预期结果:" + str(organ[9]))
        print("实际结果:" + str(result))
        sheet.cell(r, 11).value = result
        if result == expect_value:
            sheet.cell(r, 12).value = '通过'
        else:
            sheet.cell(r, 12).value = '不通过'
        excel.save(excel_path)
        assert result == organ[9]

总执行文件

根目录下创建一个main_run.py执行函数

import os
import pytest
from config.excel_read import read_Excel

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

allure生成报告如下

在这里插入图片描述这只是一个初稿,欢迎大家一起改善优化!

  • 4
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
Python是一种广泛使用的编程语言,因其易学易用、灵活性和可扩展性而备受欢迎。requests是Python的一个库,它提供了一种简单且易于使用的方式来发送HTTP请求。pytest是Python的另一个库,它提供了一种用于编和运行测试的框架allure是一个测试报告生成工具,可以为测试结果提供美观和易读的报告。 在接口自动化测试中,可以使用Python的requests库来发送HTTP请求,并使用pytest框架来编和运行测试。可以使用Excel来存储测试数据、预期结果和实际结果。使用allure工具可以生成美观的测试报告。 以下是使用Python requestspytestallure进行接口自动化测试的一般步骤: 1. 安装Python、requestspytestallure 2. 创建一个Excel文件,输入测试数据、预期结果和实际结果 3. 创建一个pytest测试文件,并使用requests库发送HTTP请求,比较预期结果和实际结果 4. 在pytest测试文件中添加allure装饰器,以便生成测试报告 5. 运行pytest测试文件并生成allure测试报告 例如,以下是一个使用Python requestspytestallure进行接口自动化测试的示例代码: ```python import requests import pytest import allure import openpyxl @allure.title("测试接口") @pytest.mark.parametrize("test_input, expected", [(1, "success"), (2, "fail")]) def test_api(test_input, expected): # 从Excel文件中获取测试数据和预期结果 wb = openpyxl.load_workbook("testdata.xlsx") sheet = wb.active test_data = sheet.cell(row=test_input, column=1).value expected_result = sheet.cell(row=test_input, column=2).value # 发送HTTP请求 response = requests.get("http://example.com/api", params=test_data) actual_result = response.text # 比较预期结果和实际结果 assert actual_result == expected_result, f"预期结果:{expected_result},实际结果:{actual_result}" # 添加allure描述 allure.attach("请求参数", str(test_data)) allure.attach("预期结果", str(expected_result)) allure.attach("实际结果", str(actual_result)) ``` 在上面的代码中,使用了pytest的parametrize装饰器来传递测试数据和预期结果。使用openpyxl库从Excel文件中获取测试数据和预期结果。使用requests库发送HTTP请求并比较预期结果和实际结果。使用allure的装饰器来添加测试描述。最后,运行pytest测试文件并生成allure测试报告

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值