首页 > 编程语言 >【接口自动化_进阶】2.0版python接口自动化自建库

【接口自动化_进阶】2.0版python接口自动化自建库

时间:2024-12-12 15:23:19浏览次数:10  
标签:case 进阶 自定义 data 接口 用例 自动化 数据 id

项目介绍

目前常见的接口自动化框架,数据维护方式分为两种,一种是维护到文件,另一种维护到代码中。

文件方式维护

优点:

  • 可读性和可维护性好
  • 易上手
    缺点:
  • 性能较差些
  • 用例设计和使用不灵活
  • 冗余数据较多
  • 扩展性差

代码中维护

优点:

  • 灵活性高
  • 性能高
  • 代码及数据复用率高

缺点:

  • 可读性和可维护性好差
  • 不易上手

为了更好的解决可维护性和灵活性及代码复用率,故对框架进行重新设计。

项目数据分析

接口信息

  • 用例标题
  • 请求地址
  • 请求方式
  • 请求数据(支持动态提取响应中数据、支持动态定义参数、支持取配置参数)
    • 必填参数
    • 所有参数
    • 参数化数据

测试数据

  • 测试用例(可进行动态修改、引用为前置或后置操作步骤)
  • 测试步骤维护
  • 测试断言
    • 默认断言
    • 预期结果和实际结果进行对比
    • 自定义断言(key,关键字,value表达式计算)
    • 自定义断言(自定义方法)

项目设计

运行环境

allure-pytest==2.8.17
jsonpath==0.82
loguru==0.5.1
pytest==6.0.1
pytest-assume==2.4.3
pytest-rerunfailures==9.1.1
python-magic-bin==0.4.14
PyYAML==6.0
ruamel.yaml==0.17.10
requests==2.24.0
base
tool
xlrd~=1.2.0
xlwt~=1.3.0
xlutils~=2.0.0
pdfplumber~=0.7.1
urllib3==1.25.11

可以使用pip来安装包 pip install -r requirements.txt

项目及业务功能介绍

用例数据维护

# yaml锚点格式(范围:文件全局): *xx
      # 字典数据维护使用锚点
      # - name: &AP "张三"        #设置锚点
      #  Introduce: *AP         #引入锚点,类似于 Introduce=AP
      #  <<: *AP                #合并锚点,类似于 example.push(AP)
# jsonpath查找数据格式(范围:参数、断言均可):   $.xx
# 替换字符串数据格式(范围:参数、断言均可):  $xx或${xx}
# 方法调用格式(范围:自定义断言):   fun

# ============================================== 公共参数 ==============================================
dict:
  name: &name "张三"
  age: &age 18
  config: &config add()



# ============================================== 用例数据 ==============================================
# home页-消息-新增
api_message_add:
  title: home页第一条用例
  url: /api/post/message
  method: POST
  required_parameter:
    $id: ${is}             # 支持数据池提取数据
    name: *name           # 支持yaml锚点
    age: *age                    # __init__.py文件中取配置数据
    sex: fun{add()}
    funap: *config
    ss: dd
  all_parameters:
    id: $id
    name: 张三
    age: 18
  json:
  files:
# 参数化用例
  parameterization: {
      "enable": [
        # [用例参数,{实际结果:预期结果}]
        [ True, True ],     # 不填写实际结果表达式,会用后面的预期结果生成默认的实际结果的表达式(默认表达式为$.data.itemList.0.%s)
        [False, {"$.data.itemLIst.0.plateNo": False}]
      ] #,
#      "plateNo": [
#        ["用例1", {"$.data.itemLIst.0.plateNo": "预期1"}],
#        ["用例2", {"$.data.itemLIst.0.plateNo": "预期1"}]
#      ],
#      "name": [
#        ["用例1", {"$.data.itemLIst.0.plateNo": "预期1"}],
#        ["用例2", {"$.data.itemLIst.0.plateNo": "预期1"}]
#      ]
    }

  Abnormal_parameter:

环境配置

用例编写

# -*- coding:utf-8 -*-
"""
@File: test_home.py
@Author: SanShu
@Time : 2024/12/7 16:16
@Description: 测试用例
"""
import time
import pytest
from loguru import logger
from base.base_case import BaseCaseExecute
from tool.data_process import TestDataProcess
from tool import case_data_generate, merge_dict


class TestHome:

    @pytest.mark.parametrize("case",  # 获取参数化用例数据
                             case_data_generate(
                                 TestDataProcess("home/home.yaml").get_test_case("api_message_add.parameterization")
                             )
                             )
    def test_home(self,
                  case,
                  test_preceding_step,  # 前置用例执行
                  test_next_step  # 后置用例执行
                  ):
        # 参数化用例
        param, data, expect = case
        # 指定用例文件位置及用例名称
        case_data = TestDataProcess("home/home.yaml").get_test_case("$.api_message_add")

        param_json = merge_dict(  # 两个表合并,第一个基表,若两个表有同一个字段则以第二个表数据为准
            case_data["required_parameter"],  # 基表数据
            {
                param: data,
                "name": str(time.time()),
                "age": 19  # 基表有此字段时,以此数据为准
            }
        )

        # file_Path = 'files/upload_file.xls'
        # file_Name = os.path.basename(file_Path)

        data = {
            'title': case_data["title"],  # 用例标题
            "step": None,
            "url": case_data["url"],
            "method": case_data["method"],
            "header": None,
            "params": None,
            "data": None,
            "json": param_json,
            "files": None,  # {file_Name: file_Path}
            'extract': {
                'name': param_json.get('name'),  # 当前请求中提取参数到数据池中
                "id": "$.data.id",  # 响应数据中提取参数
                "name2": "$.data.name"
            },
            "expect": {
                "$.success": True,
                "$.data.name": "李四",
                "$.data.id": "$.data.id"  # {响应结果}和{参数池数据}对比
            },
            "expect_custom": [  # 自定义断言
                {
                    "expect": "$id",  # 数据池中提取数据("$"为全局池中取数据,"$."响应结果中取数据)
                    "keyword": "==",
                    "actual": "$.data.aaa"  # 响应数据中提取数据("$"为全局池中取数据,"$."响应结果中取数据)
                },
                {
                    "expect": "$id",  # 数据池中提取数据("$"为全局池中取数据,"$."响应结果中取数据)
                    "keyword": "==",
                    "actual": "$.data.aaa"  # 响应数据中提取数据("$"为全局池中取数据,"$."响应结果中取数据)
                },
                {
                    "func": {  # 自定义断言方法
                        "name": "add",  # 自定义方法和关键字方法只能走一个
                        "params": ["$.data.aaa", "$id"]  # "$"为全局池中取数据,"$."响应结果中取数据
                    }
                },
                {
                    "func": {  # 自定义断言方法
                        "name": "add2",  # 自定义方法和关键字方法只能走一个
                        "params": ["$.data.aaa", "$id"]  # "$"为全局池中取数据,"$."响应结果中取数据
                    }
                }
            ]

            # "relation": {  # 存储用例id到池子中,建立关系,便于后续使用---未开放,根据需求而定
            #     # "id": ["6b7pf4jcmun7qechmnjvno5oqa"]
            # }
        }

        # 执行用例
        BaseCaseExecute(data).execute()

用例执行

测试报告

自建库



自建库构建及安装

常见问题

标签:case,进阶,自定义,data,接口,用例,自动化,数据,id
From: https://www.cnblogs.com/upstudy/p/18599381

相关文章

  • CMDB(进阶篇):如何管理好一个CMDB
    配置管理数据库(ConfigurationManagementDatabase,简称CMDB)是IT运维管理中的一个核心组件,它存储了IT环境中的各种配置项信息及其相互关系。一个高效的CMDB不仅能提升运维效率,还能显著增强故障排查和系统变更管理的能力。然而,管理好一个CMDB并非易事,需要精心规划、持续维护和不断优......
  • DocFlow票据AI自动化处理工具:出色的文档解析+抽取能力,提升企业文档数字化管理效能
    近期,DocFlow票据自动化产品正式在TextIn平台上线。DocFlow是一款票据AI自动化处理工具,支持不同版式单据智能分类扩展,可选功能插件配置流程,满足多样业务场景。随着全球化与信息化进程,企业的文件、信息、数据吞吐量不断增长,2020年以来,业务形势的变革再次加速了企业对先进的文档数字......
  • 管理咨询顾问保姆级学习参考资料,解读187页IBM 管理咨询顾问能力进阶手册
            本文主要介绍了IBM管理咨询顾问能力进阶手册的内容,包括项目实施要点、PPT写作技巧、工具及使用技巧介绍、乙方和爱商咨询PPT模板参考等。文章通过模块化方法阐述了管理咨询领域常用的策略、组织和流程,以及集客业务运营全视图等方面的知识。重点内容:1.项目......
  • 股票数据接口API实例代码python、JAVA等多种语言演示免费获取实时数据、历史数据、CDM
    ​本文中所有接口均可直接在浏览器打开获取数据,为了便于大家验证有效性,已经做好了超链接,直接点击即可!沪深两市股票列表API接口链接(可点击验证):https://api.mairui.club/hslt/list/b997d4403688d5e66a【实时数据接口】沪深两市实时交易数据接口API接口链接(可点击验证):htt......
  • 自动化处理: Unhandled exception. System.IO.IOException: The configured user limit
    #!/bin/bash#设置root密码为环境变量exportROOT_PASSWORD="your_root_password_here"#检查是否以普通用户运行if["$EUID"-eq0];thenecho"不要以root权限直接运行此脚本"exitfi#打印当前的max_user_instances值echo"当前的max_user_instances值:"su......
  • 信而泰推出POE交换机一站式自动化测试方案
     方案背景传统POE交换机测试工序主要有扫条码,接网线,POE供电测试,流量测试,LED测试,信息核对等,基本都依赖于手工操作,效率偏低,并且LED测试,POE供电测试依赖人工判断是否良品,容易误测。如果再考虑到操作员工变动等因素,培训员工的时间,员工操作方法不统一等情况都会导致生产效率降低与测......
  • C#自动化处理: Unhandled exception. System.IO.IOException: The configured user lim
    usingSystem;usingSystem.Diagnostics;classProgram{//定义root密码(请用你的实际密码替换)privateconststringRootPassword="your_root_password_here";staticvoidMain(){try{//需要执行的命令列表......
  • Nodejs 从入门到进阶
    9:252020/4/263年前的视频以下是Node可以实现的工作:(仅作了解)Web服务器命令行工具网络爬虫桌面应用程序开发(Electron)app嵌入式游戏交互模式(repl模式)仅作了解cmd三、Nvm的安装和初步使用从上一节我们知道,NodeJS有太多的版本了,切记,并不是新版本一出现,旧的版本就不......
  • 依靠 PROFINet 与 Modbus 协议让西门子 PLC 成功连接 RS485 接口变频器
      在工业网络环境中,不同网络协议的沟通不畅是否曾让您倍感困扰?别担心,捷米特JM-RTU-PN数据通讯模块横空出世,为您化解这一棘手难题!此模块专注于PROFINet网络与Modbus网络间的数据交互,能够巧妙地将RS485网络接入西门子PLC的PROFINet网络架构之中,并且全面支持多种Modbus......
  • 自动思维链(Auto-CoT):LLM推理能力的自动化提升
    大型语言模型在处理自然语言任务时,通常依赖于大量的训练数据和复杂的神经网络结构。尽管这些模型在生成文本和回答问题方面表现出色,但在面对需要复杂推理的任务时,它们的表现往往不尽如人意。为了克服这一挑战,研究人员开发了一种名为“思维链”(Chain-of-Thought,CoT)的引导方法。C......