Pytest+requests进行接口自动化测试4.0(Pytest框架前后置处理+参数化+Allure+log日志的实现)

如何快速搭建接口自动化测试框架【附教程+源码】 getEnvDomain 用于从自定义的configs.ini文件获取对应环境的微服务的请求域名configs.ini的内容。 阅读详情

一、pytest框架测试用例前后置处理

前置处理: 环境准备(启动服务)、数据初始化、资源获取(加载配置文件)
后置处理: 环境清理(垃圾数据)、资源释放、状态还原(回滚数据库事务)

1. setup/teardown、setup_class/teardown_class(用的少)

  • 举例(使用方法和 unittest 类似)
import pytest

class TestLogin:

    @classmethod
    def setup_class(cls):
        """在所有测试用例执行前只执行一次"""
        print('类的初始化工作,如创建对象,创建数据库链接')

    def setup(self):
        """前置处理"""
        print('在每个测试方法运行前都要执行该代码块')

    def test_case01(self):
        print('第2个')

    def test_case02(self):
        print('第3个')

    def test_case03(self):
        print('第1个')
              
    def teardown(self):
        """前置处理"""
        print('在每个测试方法运行后都要执行该代码块')
        
    @classmethod
    def teardown_class(cls):
        """在所有测试用例执行后只执行一次"""
        print('关闭数据库的链接')

2. pytest核心:通过装饰器 @pytest.fixture 方式来实现用例前后置(重点!!)

1)格式和结构

  • 前置处理(默认)

在方法前加上 @pytest.fixture(scope=“”, params=“”, autouse=False, ids=“”, name=“”)

  • 后置处理,关键字 yield

yield 之前的代码是前置,之后的是后置(teardown)

@pytest.fixture(scope='function',autouse=True)
def fixture_test():
    """前后置处理"""
    print("-----接口测试开始-----")
    yield
    print("-----接口测试结束-----")

2)@pytest.fixture 5种参数详解

- scope(重点)
scope表示被 @pytest.fixture 标记的方法作用域,它的值主要有4个,function(默认),class、module、package/session
function(默认)(作用域是每一个方法)每个测试用例执行之前都会先去执行前置操作,类似setup/teardown
class(作用域是每一个类)每个类执行之前会执行前置操作,类似setup_class/teardown_class
module(作用域是模块,也就是类)一个文件有多个类的时候,每次都只会执行一次前置和后置操作
package/session多个测试用例文件只执行一次前后置操作

举例:

function

@pytest.fixture(scope='function',autouse=True)
def fixture_test():
    """前后置处理"""
    print("这是处理前后置的方法")

在这里插入图片描述


class

@pytest.fixture(scope='class',autouse=True)
def fixture_test():
    """前后置处理"""
    print("-----接口测试开始-----")
    yield
    print("-----接口测试结束-----")

在这里插入图片描述


module
@pytest.fixture(scope='module',autouse=True)
def fixture_test():
    """前后置处理"""
    print("-----接口测试开始-----")
    yield
    print("-----接口测试结束-----")

在这里插入图片描述


package/session

步骤一:创建多个测试用例文件
在这里插入图片描述
步骤二:在根目录下创建 conftest.py ,@pytest.fixture(scope=‘session’)
在这里插入图片描述

import pytest

@pytest.fixture(scope='session',autouse=True)
def fixture_test():
    """前后置处理"""
    print("-----接口测试开始-----")
    yield
    print("-----接口测试结束-----")

步骤三:运行测试用例

import pytest

if __name__ == '__main__':
    pytest.main(['-vs', './testcase'])

运行结果:多个测试用例文件只执行一次前后置操作
在这里插入图片描述


- params
params参数化(支持的格式有:list、tuple、字典)

格式:

@pytest.fixture(scope='function', autouse=True, params=['北京', '广州', '深圳'])
def fixture_test(request):
    """前后置处理"""
    return request.param
    
class TestLogin02:
    def test_case01(self):
        print('第22个')

    def test_case02(self,fixture_test):
        print('第33个',fixture_test)

在这里插入图片描述


- ids(用的不多)
ids当使用params参数化时,给每一个值设置一个变量(相当于取别名),意义不大
@pytest.fixture(scope='function',autouse=True,params=['北京','广州','深圳'],ids=['BJ','GZ','SZ'])
def fixture_test(request):
    """前后置处理"""
    return request.param
    
class TestLogin02:
    def test_case01(self):
        print('第22个')

    def test_case02(self,fixture_test):
        print('第33个',fixture_test)

在这里插入图片描述


- autouse
autouseautouse=True 时自动使用@pytest.fixture ,默认False
@pytest.fixture(scope='module',autouse=True)
def fixture_test():
    """前后置处理"""
    print("-----接口测试开始-----")
    yield
    print("-----接口测试结束-----")

在这里插入图片描述


- name(用的不多)
name给被fixture标记的方法修改别名
@pytest.fixture(scope='function',autouse=True,params=['北京','广州','深圳'],name="test3")
def fixture_test(request):
    """前后置处理"""
    return request.param
    
class TestLogin02:
    def test_case01(self):
        print('第22个')

    def test_case02(self,test3):
        print('第33个',test3)

在这里插入图片描述

3. conftest.py + @pytest.fixtrue(全局处理)

conftest.py 文件名是固定写法,不可更改,conftest.py + @pytest.fixtrue 结合使用来实现全局前后置应用

操作步骤

步骤一:创建多个测试用例文件
在这里插入图片描述
步骤二:在根目录下创建 conftest.py ,@pytest.fixture
在这里插入图片描述

import pytest

@pytest.fixture(scope='module',autouse=True)
def fixture_test():
    """前后置处理"""
    print("-----接口测试开始-----")
    yield
    print("-----接口测试结束-----")

步骤三:运行测试用例

import pytest

if __name__ == '__main__':
    pytest.main(['-vs', './testcase'])

运行结果:多个测试用例文件均执行 conftest.py 中 @pytest.fixtrue 的前后置操作
在这里插入图片描述

使用场景(conftest可以根据需要写无数个)

1.登录操作(多个测试用例文件只需登录一次拿到 token 值)

@pytest.fixture(scope="function")
def login():
    """模拟用户登录,返回 token"""
    global LOGIN_TOKEN
    print("正在执行登录操作...")

    # 模拟登录请求
    credentials = {"username": "testuser", "password": "123456"}
    # 假设登录成功,返回 token
    LOGIN_TOKEN = "bearer_xyz_123_token"

    yield LOGIN_TOKEN  # 提供给测试函数使用

    # 后置:登出或清理 token
    print("登出,清除登录状态...")
    LOGIN_TOKEN = None

2.文件清除操作(每次运行结束后整体清除缓存)

@pytest.fixture(scope="function")
def temp_file():
    """创建一个临时测试文件,测试结束后自动删除"""
    file_path = "tests/temp/test_data.json"
    data = {"name": "张三", "age": 25}

    print(f"创建临时文件: {file_path}")
    with open(file_path, 'w', encoding='utf-8') as f:
        json.dump(data, f, ensure_ascii=False)

    yield file_path  # 将文件路径传给测试

    # 后置:删除文件
    if os.path.exists(file_path):
        os.remove(file_path)
        print(f"已删除临时文件: {file_path}")
    else:
        print(f"文件 {file_path} 不存在,跳过删除")

二、pytest框架参数化

1.@pytest.mark.parametrize(args_name,args_value)

args_name:参数名称 , args_value:值

值的可用类型举例
list:列表(最常用)[ ‘小李’ , ‘小张’ , ‘小华’ ]
tuple:元祖类型( ‘李四’ , ‘张三’ , ‘王五’ )
字典列表:[{},{},{}][{‘name’: ‘小张’}, {‘name’: ‘小明’}]
字典元祖:({},{},{})({‘name’: ‘小张’}, {‘name’: ‘小明’})

2.参数里面有多少个值这个用例就会执行多少次

  • 举例
class TestLogin:
    @pytest.mark.parametrize('params',({'name':'小张'},{'name':'小李'}))
    def test_case01(self,params):
        print('用例一')
        print(params)

在这里插入图片描述

三、pytest使用yaml文件做数据驱动

数据驱动是指:将测试逻辑与测试数据分离,通过读取外部文件中的数据来驱动测试用例执行。
使用场景:测试用例参数化(如登录、接口测试);配置管理;多环境数据支持(开发、测试、生产);UI 自动化中的页面对象数据分离

步骤一:准备工作

1. 安装依赖(PyYAML+Allure)

1)安装PyYAML

pip install PyYAML

2) 安装测试报告生成工具allure

在这里插入图片描述
在这里插入图片描述

  • 解压 allure.zip

在这里插入图片描述

  • 将 bin 目录的地址添加到环境变量中

在这里插入图片描述

  • cmd检查是否安装成功

在这里插入图片描述

2. Allure的使用

pytest.ini 配置文件及 run.py 整体运行文件的编写

  • 1)pytest.ini 配置文件及解释
addopts = --alluredir=./report/temp -vs --clean-alluredir -p no:warnings
         """生成文件存储路径       存储精细度    每次执行覆盖前一次  只显示报错"""      
  • 2)run.py 整体运行文件的编写
import pytest
import os

if __name__ == '__main__':
    pytest.main(['-vs', './testcase'])
    os.system(f'allure serve ./report/temp')
             """使用allure方式解析文件"""
  • 3)运行 run.py 生成报告

在这里插入图片描述

补充知识:allure测试报告内容定制化

(总览界面里的环境可通过代码进行配置)

在这里插入图片描述
1)根目录创建 environment.xml 文档
在这里插入图片描述
2)固定语法,可按需求修改内容

<environment>
    <parameter>
        <key>system</key>
        <value>window 10</value>
    </parameter>
    <parameter>
        <key>python version</key>
        <value>3.8.10</value>
    </parameter>
    <parameter>
        <key>allure version</key>
        <value>allure-2.13.8</value>
    </parameter>
    <parameter>
        <key>项目名</key>
        <value>xxx项目接口自动化测试</value>
    </parameter>
</environment>

3)运行主函数 run.py 里书写

每次运行,将 ./environment.xml 复制到 ./report/temp文件夹下

import shutil
if __name__ == '__main__':
    shutil.copy('./environment.xml','./report/temp')

4)查看生成效果

在这里插入图片描述

3. 创建 YAML 数据文件

在这里插入图片描述

- baseInfo:
    api_name: 用户登录
    url: /api/basic/auth/loginWithoutCheckCode
    method: POST
    header:
      Content-Type: application/json
  test_case:
    - case_name: 用户名和密码正确登录验证
      json:
        username: "cssc"
        password: "11312313"
      validation:
        - eq: [msg, 登录成功]
      extract:
        token: $.token

步骤二:执行

1. 编写测试用例(使用 @pytest.mark.parametrize)

import pytest
from common.run_yaml import ReadYamlData
from conf.setting import FILE_PATH
from common.sendrequests import SendRequest

class TestLogin:
    readyaml = ReadYamlData()

    @pytest.mark.parametrize('params',readyaml.read(FILE_PATH['login']))
    def test_case01(self,params):
        # print(params)
        new_url = 'http://192.168.4.200'+params['baseInfo']['url']
        headers =  params['baseInfo']['header']
        method = params['baseInfo']['method']
        data = params['test_case'][0]['json']
        sendrequest = SendRequest()
        res=sendrequest.run_main(url=new_url,header=headers,method=method,data=data)
        print(res)
        assert res['code'] == 200
  • 代码解析:

1)引入封装好的 ReadYamlData(读取 YAML 数据)

from common.run_yaml import ReadYamlData
class TestLogin:
    readyaml = ReadYamlData()   # 实例化类

2)数据参数化,将读取的yaml数据变为参数

from conf.setting import FILE_PATH
    @pytest.mark.parametrize('params',readyaml.read(FILE_PATH['login']))

FILE_PATH[‘login’] 为配置文件 setting.py 的使用

# 文件路径
FILE_PATH = {
    'login': os.path.join(DIR_path, r'testcase\login\login.yaml')
}

3)测试用例中使用该参数化的数据

    @pytest.mark.parametrize('params',readyaml.read(FILE_PATH['login']))
    def test_case01(self,params):
        new_url = 'http://192.xxx.x.200' + params['baseInfo']['url']
        headers =  params['baseInfo']['header']
        method = params['baseInfo']['method']
        data = params['test_case'][0]['json']

4)引入封装好的接口请求,执行接口调用

  • 封装好的接口请求

在这里插入图片描述

  • assert 断言判断接口返回是否与预期一致
from common.sendrequests import SendRequest
        sendrequest = SendRequest()           
        res = sendrequest.run_main(url=new_url,header=headers,method=method,data=data)
        print(res)
        assert res['code'] == 200
  • 执行结果

在这里插入图片描述

2. 运行Allure生成测试报告

运行根目录下的 run.py 文件

import pytest
import os

if __name__ == '__main__':
    pytest.main(['-vs', './testcase'])
    os.system(f'allure serve ./report/temp')

在这里插入图片描述

四、log日志模块的封装

目标:实现一个可复用的日志功能

  • 实现:
    1)日志能输出到 文件(用于后期排查问题)
    2)日志能输出到 控制台(方便实时查看)
    3)日志文件按 天 命名,自动创建目录
    4)日志内容包含:级别、时间、文件名、行号、函数名、消息
    5)支持不同输出级别控制

  • 文件目录(示例)
    Autopractice/
    ├── conf/
    │ └── setting.py ---- 配置文件
    ├── common/
    │ └── recordlog.py ---- 日志封装模块
    ├── testcases/
    │ └── test_login.py ---- 测试用例
    └── log/ ---- 自动生成的日志目录(无需手动创建)

第一步:配置文件 setting.py

# log日志的输出级别
LOG_LEVEL = logging.DEBUG        # 写入文件的日志级别(DEBUG 最详细)
STREAM_LOG_LEVEL = logging.WARNING  # 输出到控制台的日志级别(只显示警告及以上)

# 文件路径配置
FILE_PATH = {
    'log' : os.path.join(DIR_path, 'log')
}
  • 说明:

logging.DEBUG:表示记录所有级别的日志(DEBUG、INFO、WARNING、ERROR、CRITICAL)

logging.WARNING:表示记录 warning 级别以上的日志(WARNING、ERROR、CRITICAL)

第二步:封装日志模块 recordlog.py

import logging
import os
import time
from conf.setting import FILE_PATH,LOG_LEVEL,STREAM_LOG_LEVEL
from logging.handlers import RotatingFileHandler

log_path = FILE_PATH['log']
if not os.path.exists(log_path):
    os.makedirs(log_path)
logfile_name = os.path.join(log_path, f'test.{time.strftime("%Y%m%d")}.log')

class RecordLog:
    """封装日志"""
    def output_logging(self):
        """获取logger对象"""
        logger = logging.getLogger("apilog")
        # 防止打印重复的log日志
        if not logger.handlers:
            logger.setLevel(LOG_LEVEL)
            log_format = logging.Formatter('%(levelname)s - %(asctime)s - %(filename)s:%(lineno)d - [%(module)s:%(funcName)s] - %(message)s')
            # 日志输出到指定文件
            fh = RotatingFileHandler(filename=logfile_name,mode='a', maxBytes=5242880,
                                backupCount=7,
                                encoding='utf-8') # maxBytes:控制单个日志文件的大小,单位是字节,backupCount:用于控制日志文件的数量
            fh.setLevel(LOG_LEVEL)
            fh.setFormatter(log_format)

            # 再将相应的handler添加到logger
            logger.addHandler(fh)

            # 将日志输出到控制台
            sh = logging.StreamHandler()
            sh.setLevel(STREAM_LOG_LEVEL)
            sh.setFormatter(log_format)
            logger.addHandler(sh)

        return logger


apilog = RecordLog()
logs = apilog.output_logging()
  • 解释说明:

① 在 setting.py 文件中获取日志存储路径
② 查看是否有该路径存在,没有则按 setting.py 中规定创建 log 的多级目录
③ 定义日志文件名(按日期命名)

from conf.setting import FILE_PATH,LOG_LEVEL,STREAM_LOG_LEVEL

log_path = FILE_PATH['log']   # 在 setting.py 文件中获取日志存储路径
if not os.path.exists(log_path):
    os.makedirs(log_path)
logfile_name = os.path.join(log_path, f'test.{time.strftime("%Y%m%d")}.log')
                                           """time.strftime("%Y%m%d"):生成当前日期"""

  • 封装类:RecordLog(日志功能)

① 单例模式,创建名为’apilog’ 的 logger对象
② 设置日志输出级别 和 格式,并防止重复打印
③ 配置两个处理器,一个将日志输出到文件,一个将日志输出到终端

class RecordLog:
    """封装日志功能"""
    def output_logging(self):
        """返回一个配置好的 logger 对象"""
        # 获取一个名为 'apilog' 的 logger
        logger = logging.getLogger("apilog")
        # 防止重复添加 handler(避免日志重复打印)
        if not logger.handlers:
            # 设置 logger 的日志级别
            logger.setLevel(LOG_LEVEL)
            # 定义日志格式
            log_format = logging.Formatter(
                '%(levelname)s - %(asctime)s - %(filename)s:%(lineno)d - '
                '[%(module)s:%(funcName)s] - %(message)s'
            )
            # 1. 配置文件处理器:写入日志文件
            fh = RotatingFileHandler(
                filename=logfile_name,     # 日志文件路径
                mode='a',                  # 追加模式
                maxBytes=5 * 1024 * 1024,  # 单个文件最大 5MB
                backupCount=7,             # 最多保留 7 个备份文件
                encoding='utf-8'           # 编码格式
            )
            fh.setLevel(LOG_LEVEL)
            fh.setFormatter(log_format)
            logger.addHandler(fh)  # 添加到 logger

            # 2. 配置控制台处理器:输出到终端
            sh = logging.StreamHandler()
            sh.setLevel(STREAM_LOG_LEVEL)
            sh.setFormatter(log_format)
            logger.addHandler(sh)  # 添加到 logger

        return logger
代码作用
logging.getLogger(“apilog”)获取一个唯一的 logger 实例,名字叫 apilog
if not logger.handlers判断是否已添加处理器,防止重复添加导致日志重复
logger.setLevel(LOG_LEVEL)设置 logger 本身的日志级别
RotatingFileHandler将日志输出到文件,支持按大小分割日志文件,避免单个文件过大
StreamHandler将日志输出到控制台(PyCharm 的运行窗口)
setFormatter()设置日志的显示格式
addHandler()把 handler 加入 logger,实现多目的地输出

  • 创建全局 logger 实例

logs 就是一个可以直接使用的日志对象

# 创建一个 RecordLog 对象
apilog = RecordLog()

# 获取配置好的 logger
logs = apilog.output_logging()

第三步:在测试用例中使用日志

import pytest
from common.run_yaml import ReadYamlData
from conf.setting import FILE_PATH
from common.sendrequests import SendRequest
from common.recordlog import apilog,logs

class TestLogin:
    readyaml = ReadYamlData()
    @pytest.mark.parametrize('params',readyaml.read(FILE_PATH['login']))
    def test_case01(self,params):
        # print(params)
        new_url = 'http://192.168.4.200'+params['baseInfo']['url']
        logs.info("获取到接口的地址:" + new_url)
  • 日志级别使用建议:
方法用途
logs.debug(“…”)调试信息,如变量值、内部流程
logs.info(“…”)正常流程,如“开始执行测试”
logs.warning(“…”)警告,如“响应时间超过2秒”
logs.error(“…”)错误,如“请求失败”、“断言失败”

第四步:运行后查看日志

1.查看文件输出日志

在这里插入图片描述

INFO - 2025-09-17 10:29:18,989 - conftest.py:14 - [conftest:setup_test_env] - 开始测试会话,准备测试环境...
INFO - 2025-09-17 10:29:18,991 - test_login.py:15 - [test_login:test_case01] - 获取到接口的地址:http://192.168.4.200/api/basic/auth/loginWithoutCheckCode
INFO - 2025-09-17 10:29:40,240 - conftest.py:18 - [conftest:setup_test_env] - 测试会话结束,清理环境...
  • 日志内容解析

日志内容按我们设定的 log 内容输出,分别为:级别 - 时间 - 文件名:行数 - [ 模块:方法名] - logs.info到的内容

 log_format = logging.Formatter(
                '%(levelname)s - %(asctime)s - %(filename)s:%(lineno)d - '
                '[%(module)s:%(funcName)s] - %(message)s'
            )

2.查看终端输出日志

在这里插入图片描述

  • 日志内容解析

日志内容按我们设定的 log 内容输出,分别为:级别 - 时间 - 文件名:行数 - [ 模块:方法名] - logs.info到的内容

 log_format = logging.Formatter(
                '%(levelname)s - %(asctime)s - %(filename)s:%(lineno)d - '
                '[%(module)s:%(funcName)s] - %(message)s'
            )
基于requests+pytest接口测试实现 一、requests是什么 二、pytest是什么 二、请求接口获取响应 三、断言 阅读详情

相关推荐

Python+pytest+requests 自动化测试框架

环境准备 本次选用的是Python+Pytest+requests来搭建自动化框架,需要有 Python 环境(3.x 版本),安装pytest和requests,不会安装的自行去网上搜教程。 关于 Pytest 的基本使用,这里不作讲解,不清楚的可以看我之前的文章。 简单 Demo 我们先创建一个项目,取名api-test,然后在下面创建一个test_api.py的文件 # test_api.py import pytest import requests def test_01():

weixin_42686892的博客 1万+

2023全网最火的接口自动化框架对比 (建议收藏)啊哈

自动化接口测试使用到的框架: ● Postman+Newman+Allure+Jenkins ● Httprunner+Request+Pytest+Alluret+Jenkins ● JMeter+Ant+Allure+Jenkins ● Pytest+Request+Allure+Jenkins

m0_58026506的博客 2974

从零搭建Pytest+Requests接口自动化测试框架

接口自动化测试是软件质量保障中不可或缺的一环。对于需要频繁回归的接口项目,使用工具型方案往往难以应对大量用例、复杂断言和持续集成需求。Pytest作为Python主流测试框架,结合Requests库,能高效构建灵活可靠的接口自动化测试框架。本文从HTTP请求基础概念出发,讲解如何封装Requests会话、利用Pytest的fixture与参数化机制实现数据驱动,并整合日志、断言工具和HTML报告,最终落地一个可运行、可维护的测试工程。该方案适用于日常接口回归、CI流水线定时执行等场景,帮助团队提升测试效率与

weixin_34238633的博客 555

接口自动化框架,参数化处理,db数据承载形式实现参数化

1,接口自动化框架 1.1框架结构 接口测试框架的结构如下图所示: 接口测试框架的结构说明: - API 用来封装被测系统的接口 - TestCase 将一个或者多个接口封装成测试用例,并使用UnitTest管理测试用例TestCase 可以调用数据库进行数据校验 - 为了方便维护测试数据,可以把测试脚本和测试数据分离开 - 通过UnitTest断言接口返回的数据,并生成测试报告 1.2 框架目录...

weixin_50851485的博客 822

从零搭建Python接口自动化测试框架:Pytest+Requests+Allure实战指南

接口自动化测试是现代软件质量保障体系的核心环节,它通过模拟客户端请求与验证服务端响应,实现对API功能的自动化验证。其核心原理在于将测试用例脚本化、执行自动化,并集成断言机制进行结果校验。这项技术的核心价值在于显著提升回归测试效率与可靠性,将测试人员从重复劳动中解放,聚焦于复杂业务逻辑与探索性测试。在持续集成与DevOps实践中,健壮的自动化测试框架是保障快速、高质量交付的关键基础设施。典型的应用场景包括微服务API验证、前后端分离架构下的接口契约测试,以及复杂业务流的端到端验证。本文将以Python技术栈

weixin_34262482的博客 394

Pytest+Requests搭建企业级接口自动化测试框架实战

接口自动化测试是保障系统稳定的关键环节,而工程化框架的搭建往往比脚本编写更具挑战。理解HTTP协议与测试框架的边界是第一步:Requests负责请求发送与状态维持,Pytest则承担用例组织、数据驱动与执行控制,两者结合可构建高内聚、低耦合的测试体系。通过Session封装、YAML配置分离与fixture全局登录管理,能有效解决重复代码多、环境切换难、数据耦合深等痛点。结合Allure报告与CI流水线集成,实现测试结果可视化与持续反馈;同时针对高频调用场景下的429限流错误,提供重试策略与并发控制方案。本

weixin_33843947的博客 368

接口自动化测试框架:Python+Requests+Pytest+Allure+YAML

接口自动化测试框架:Python+Requests+Pytest+Allure+YAML,首先利用Python把HTTP接口封装成Python接口,接着把这些Python接口组装成一个个的关键字,再把关键字组装成测试用例,而测试数据则通过YAML文件进行统一管理,然后再通过Pytest测试执行器来运行这些脚本,并结合Allure输出测试报告。​

1343

Python自动化测试框架pytest:从入门到精通实战指南

在软件测试领域,自动化测试框架是提升测试效率与质量的核心工具。pytest作为Python生态中最主流的测试框架,以其简洁的语法、强大的扩展性和灵活的插件体系,成为现代测试工程化的首选。其核心原理基于“约定优于配置”的设计哲学,通过自动发现测试用例、支持参数化测试和Fixture依赖注入等机制,显著降低了测试代码的编写和维护成本。在技术价值层面,pytest不仅提升了测试执行速度与覆盖率,更通过丰富的插件生态(如pytest-html、pytest-xdist、allure-pytest等)支持分布式测试、

weixin_30301449的博客 728

基于Pytest与Requests的接口自动化测试框架搭建实践

接口自动化测试是软件质量保障中的关键环节,它通过脚本模拟HTTP请求验证后端接口的可靠性与正确性。其核心原理是利用测试框架组织用例并执行断言,同时依靠HTTP客户端库完成请求的发送与响应解析。在Python生态中,Pytest凭借灵活的夹具机制和强大的断言能力成为主流测试框架,而Requests则提供了简洁的HTTP交互方式。将两者结合,可以帮助团队建立分层清晰的测试工程,实现配置管理、数据驱动、日志监控与失败重试,从而显著提升回归效率与脚本可维护性。这类框架尤其适用于中小团队在持续集成中快速反馈接口质量。

weixin_34224941的博客 470

Python接口自动化测试框架实战:基于Pytest与Allure的宠物商店项目

接口自动化测试是现代软件质量保障的核心环节,它通过模拟客户端请求来验证服务端API的功能、性能和稳定性。其基本原理是使用脚本自动发送HTTP请求并验证响应,从而替代繁琐的手工测试。这项技术的核心价值在于提升测试效率、保证回归测试覆盖率,并能无缝集成到CI/CD流水线中,实现快速反馈。在实际应用中,接口自动化测试广泛用于微服务、前后端分离架构以及各类Web服务的验证。本文以经典的宠物商店RESTful API项目为例,详细讲解如何构建一个基于Python技术栈的、具备清晰分层架构的自动化测试框架。该框架采用数

weixin_33693070的博客 315

Python自动化测试框架搭建:从Pytest到CI/CD的完整实践指南

自动化测试框架是现代软件工程中提升测试效率、保障软件质量的核心基础设施。其核心原理在于通过分层架构实现关注点分离,将测试数据、页面对象、业务逻辑与执行引擎解耦,从而构建可维护、可复用的测试体系。在技术选型上,Python凭借其简洁语法和丰富生态成为主流选择,结合Pytest强大的Fixture机制和参数化功能,能够高效管理测试用例的前置后置条件与数据驱动。框架的价值在于将零散的测试脚本转化为系统化的工程实践,通过集成日志系统、Allure报告和CI/CD流水线,实现测试活动的标准化与持续反馈。在实际应用场景

weixin_30732487的博客 376

从0到1框架搭建,Python+Pytest+Allure+Git+Jenkins接口自动化框架(超细整理)

接口测试是对系统和组件之间的接口进行测试,主要是效验数据的交换,传递和控制管理过程,以及相互逻辑依赖关系。其中接口协议分为HTTP,RPC,Webservice,Dubbo,RESTful等类型。接口测试流程1、需求评审,熟悉业务和需求2、开发提供接口文档3、编写接口测试用例4、用例评审5、提测后开始测试6、提交测试报告两种常见的 HTTP 请求方法:GET 和 POST。

hlsxjh的博客 1162

接口自动化测试实战:从框架搭建到CI/CD集成的完整指南

接口自动化测试是现代软件工程中提升质量和效率的关键实践,其核心原理是通过脚本模拟客户端请求并自动验证服务器响应。这项技术通过将重复性的人工测试工作转化为可重复执行的代码,实现了测试用例的批量执行和回归测试的快速反馈,为持续集成和持续交付提供了坚实保障。在技术价值层面,接口自动化不仅显著提升了测试覆盖的深度与广度,还能有效降低人为错误,保障核心业务稳定性。典型的应用场景包括敏捷开发中的高频回归测试、复杂业务场景的参数化验证以及CI/CD流水线中的质量门禁。本文聚焦于接口自动化测试的实战落地,详细探讨了如何基于

dggnqzt6462的博客 393

从零构建Python接口自动化测试框架:Pytest+Requests实战指南

接口自动化测试是现代软件工程中保障交付质量与提升迭代效率的核心实践。其基本原理是通过脚本模拟客户端请求,对服务端接口进行功能、性能及稳定性的自动化验证,从而将测试人员从重复的手工操作中解放出来。这项技术的核心价值在于实现测试过程的标准化、资产化与持续反馈,是构建高效CI/CD流水线不可或缺的一环。在众多技术栈中,Python凭借其简洁语法与丰富生态,成为实现接口自动化的热门选择。本文将以Python生态下的Pytest测试框架与Requests库为核心,深入讲解如何搭建一个结构清晰、易于维护的接口自动化测试

weixin_33866037的博客 415

[V-10]ARMv8/v9-CPU Virtualization-CPU虚拟化架构简介(vCPU/vPE)

本文简要介绍了CPU虚拟化架构的基础知识。

基层架构师的分享 1267

华硕ROG玩家国度安装Ubuntu双系统避坑指南:安全启动密钥那些事儿

本文详细解析了在华硕ROG玩家国度设备上安装Ubuntu双系统时,如何正确处理BIOS中的安全启动(Secure Boot)与密钥管理,避免常见的引导失败和Windows系统无法启动问题。指南提供了从数据备份、启动盘制作到BIOS精细设置(如将OS Type改为Other OS而非简单关闭Secure Boot)以及分区规划的完整流程,确保两个系统都能稳定共存。

weixin_29219189的博客 754

Pytest+Requests接口自动化测试框架:从用例组织到持续集成实践

接口自动化测试的核心是高效稳定地完成回归验证,而Pytest与Requests的组合正是实现这一目标的轻量级方案。Pytest提供灵活的fixture机制、参数化用例与丰富的插件生态,用于组织用例、管理前置依赖与生成测试报告;Requests则负责发送HTTP请求并处理会话、Cookie与Token等鉴权细节。相比unittest、Postman和JMeter,这套组合在断言简洁性、用例可维护性和CI集成方面更具优势。从环境搭建、封装公共请求客户端,到使用conftest.py共享登录态、通过标记区分冒烟与

weixin_34203832的博客 352

Vmware虚拟机克隆详解:固定ip + 修改uuid等内容

分两大步 设置固定ip 克隆后修改相关配置 本文引用的其他地方的图片。会附上链接 若侵权,删 一、设置静态ip 先进行虚拟网络的编辑 接下来的操作需要管理员权限。(给权限就完事了) 接下来设置网卡: 网络和共享中心→ 更改适配器设置→VMware Network Adapter VMnet8 -> 右键属性 修改TCP/Ipv4的配置,网上常见是这种,笔者是英文的...

Unknownfuture的博客 9070

Python接口自动化测试实战:Pytest+Requests+Allure构建宠物商店项目框架

接口自动化测试是现代软件工程中保障API质量与稳定性的关键技术。其核心原理是通过脚本模拟客户端请求,对服务端接口进行功能、性能及稳定性的验证。在技术选型上,Python因其简洁语法和丰富生态成为主流,其中Requests库负责HTTP通信,Pytest框架提供灵活的测试组织与夹具管理,Allure则生成可视化测试报告,三者结合形成了高效的测试解决方案。这种组合的价值在于能快速回归测试、提前发现接口问题,并融入CI/CD流程实现持续验证。其应用场景广泛覆盖Web服务、微服务架构及前后端分离项目。本文以经典的宠

weixin_33670713的博客 331

一文搞定离线环境下的RAG引擎部署

在人工智能浪潮下,技术已成为构建智能问答、文档分析和代码助手等应用的核心。然而,在许多企业场景中,出于数据安全和性能的考虑,服务器往往部署在中,并要求极致的推理效率。这给依赖外部资源的应用部署带来了巨大挑战。如何在这种严苛的环境下,完整、可靠地部署一套包含向量数据库、**高性能推理服务(vLLM)**和Python后台的复杂RAG系统呢?本文将为你提供一个,手把手教你如何使用 Docker 技术,将一套基于 Weaviate 和的 Python RAG 应用完整打包,并在离线环境中一键部署。

木鱼时刻的专栏 1242

信捷PLC XD5系列运动控制(10轴)编程应用篇

项目PLC采用XD5-60T10-E,36DI 24DO 晶体管输出,支持10路脉冲输出功能。TMR指令定时器时基可以自己设定,这点比其他品牌PLC方便。ZRN指令我们需要上升沿指令触发。 5、变址寻址 该说不说这个变址寻址是真的强,比西门子指针、三菱的变址寄存器Z 、V都要更加灵活。 7、特殊寄存器:时钟 8、如何建立PLC通讯...............

RXXW_Dor的博客 1万+

Python接口自动化测试:从pytest用例设计到Allure报告生成实战

接口自动化测试是现代软件质量保障的核心环节,它通过模拟客户端请求来验证服务端API的功能、性能和可靠性。其基本原理是编写脚本自动发送HTTP请求并验证响应,从而实现测试的重复执行和快速反馈。这项技术的核心价值在于提升测试效率、保障回归质量,并能无缝集成到CI/CD流水线中。在实际应用中,一个健壮的自动化测试体系需要解决测试用例的组织、测试数据的维护以及测试结果的可视化等工程挑战。本文聚焦于如何利用pytest框架进行结构化的测试用例设计,并通过Allure生成专业的测试报告,为构建高效的接口自动化测试体系提

weixin_30470643的博客 314

6、Dialogflow 开发全解析:从基础到高级应用

本文全面解析了 Dialogflow 的核心功能与高级应用,涵盖意图与实体的创建、上下文管理、后续意图设置以及高级实体类型的实际应用场景。详细介绍了自定义实体的导入导出规则、编程添加方法及数量限制,并通过流程图和实例说明了上下文生命周期与对话连贯性设计。结合电商、旅游、问卷调查等实际业务场景,展示了模糊匹配、自动扩展、复合实体等功能的强大灵活性。最后提供了开发最佳实践建议,帮助开发者构建高效、智能的对话系统。

kafka6courier的博客 104

【第二章第4节】requests+Pytest接口自动化

接口自动化测试的最佳实践 本文阐述了接口自动化测试的高ROI特性,通过GaussDB兼容性测试案例展示了从手工3天到自动化3分钟的转变。作者提出requests+Pytest是黄金组合,并给出完整框架设计方案: 核心优势:相比UI自动化和单元测试,接口自动化在开发成本、执行速度、稳定性等方面综合最优 技术选型:requests简化HTTP请求,Pytest提供参数化、Fixture等测试能力 框架实现:包含配置管理、统一请求封装、模块化结构,支持环境隔离和日志记录 该方案特别适合需要快速验证业务逻辑的

笑着的程序员的博客 209

MAVLink协议详解

MAVLink是为微型飞行器MAV(Micro Air Vehicle)设计的(LGPL)开源的通讯协议。是无人飞行器和地面站(Ground Control Station ,GCS)之间,以及无人飞行器之间通讯常用的协议。APM、PIXHAWK飞控,Mission Planner、QGroundControl地面站均使用了MAVLink协议进行通讯。 MAVLink源码下载地址(现已更新至v2.0):https://github.com/mavlink/qgroundcontrol   用户手册:ht

程序猿老樊的博客 7705

cesium 气象云(体积云)

本文介绍了基于Cesium的气象云渲染技术方案,其核心是通过GPU加速的光线投射算法实现气象云的三维可视化。方案采用分层架构设计:GPU计算层由顶点着色器和片段着色器组成,负责光线投射计算、3D纹理采样和颜色映射;CPU控制层处理数据预处理、纹理创建和参数配置。关键技术包括:顶点着色器计算相机位置和光线方向,片段着色器实现光线步进采样、颜色映射和半透明混合。该方案高效解决了气象数据与地理场景的融合问题,支持云图、温度场等复杂三维气象数据的实时渲染,具有高真实感和良好性能。

God's asylum的博客 1204
上一篇: Pytest+requests进行接口自动化测试3.0(yaml配置文件 + Pytest框架基础知识)
下一篇: Pytest+requests进行接口自动化测试5.0(5种assert断言的封装 + pymysql)
know__ledge
博客等级 码龄5年 77粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值