当前位置: 首页 > news >正文

pytest测试框架之基本用法

一.基本用法

测试框架做了什么:

1.测试发现(收集用例,从不同目录/文件/类中找到用例)

2.环境管理(数据库的测试-数据库的密码;对应的库测试数据)

3.执行用例(收集用例执行的信息-日志/输入输出/失败的原因)

4.输出报告(执行的环境、用例的结果、用例执行的过程中产生的信息)

a. 测试发现

1.创建:test_开头的文件

2.文件中创建Test开头的类

3.创建test_开头的函数或方法(用例)

def test_a():#函数passclass Test:def test_b(self): #方法pass

①.pytest中以每一个函数或方法,做为用例

②.pytest以命名区分普通函数(方法)、用例

③.pytest启动方式 pytest

④.pytest输出用例的收集情况、执行情况、汇总信息

b.断言

python提供的内容判断机制,如果判断失败,抛出异常

name = "aa"# if name == "aa":
#     print("yes")
# else:
#     print("no")assert name == "aa"

对于测试框架来说:

  没有异常,判定为通过

  存在异常,判定为失败

def test_a():#函数assert 1 == 1 #不会引发异常class Test:def test_b(self): #方法assert 1 == 2 #测试失败,引发异常

c.读懂结果 (对结果的判断)

test_xxx.py .F [100%]

在test_文件中执行2个用例,直至全部用例执行完毕

第一个通过,第二个失败

用例的执行情况

缩写单词含义
.passed通过
Ffailed失败(用例执行时报错)
Eerror出错(fixture执行报错)
sskipped跳过
Xxpassed预期外的通过
xxfailed预期内的失败

二、高级用法

a. mark 标记

标记是为了用例之间彼此不同,实现用例筛选。

标记的使用步骤:

1.注册标记

准备配置文件-项目根目录下创建,"python.ini"

[pytest] #ini文件格式的语法,一个选择器markers = apiuiute2e

2.使用标记

①贴上标记
import pytest@pytest.mark.api #装饰器def test_a():#函数assert 1 == 1 #不会引发异常class Test:def test_b(self): #方法assert 1 == 2 #测试失败,引发异常
②筛选标记

pytest -m api #仅筛选api的用例 (执行程序时输入)

pytest -m e2e  #筛选单个标记

一个用例可以打上不同标记,筛选标记是亦可筛选多个 pytest -m “api or e2e”

除了自己注册到的标记之外,pytest还内置了一些标记:跳过、预期失败、参数化、调用fixture第三方插件,也会内置一些标记:执行顺序、执行依赖、失败重试

b. fixture 框架

自动的在用例之前、之后完成,用于测试环境的构建和销毁。

标记也可以调用fixture。

@pytest.mark.usefixtures('aaa')

使用生成器实现前置、后置的分离。

@pytest.fixture() #fixture  不能在用例之间之间调用,名字放置函数/用例的参数中,称为请求
def aaa(): #python 语言上的生成器print("aaa") #前置代码,在用例执行之前自动运行yieldprint("111") #后置代码,在用例执行之后自动运行def test_a():#函数assert 1 == 1 #不会引发异常class Test:def test_b(self): #方法assert 1 == 2 #测试失败,引发异常

1.fixture的作用范围:支持5级范围 (unitest仅支持3级范围)

2.同一范围内的用例,共享fixture  (fixture可以调用另一个fixture(作用范围影响共享))

3.conftest.py 创建全局范围fixture

c. hook (我们和框架之间的桥梁)

钩子:当pytest在合适的时机,允许进入、退出pytest核心内部。

目的 : 改变pytest原有的运行模式/处理方式

yaml文件:
test_name:abc #测试用例名称
steps: #测试用例步骤- a:6b:2c:8 # a +b = c 成功- a:3b:3c:9 # a +b != c 失败

def pytest_yaml_run_step(item): #在合适的时机被pytest自动的调用step = item.current_stepprint("yaml中用例步骤",step)a = step['a']b = step['b']c = step['c']assert a+b == c

三、框架封装

封装:通过隐藏细节的方式降低使用的复杂度,添加新的功能特性。

pytest是通用型的测试框架:白盒、集成、黑盒(api/web/app)...

在pytest基础上,结合业务需求上封装:

1.接口自动化测试框架

2.Web自动化测试框架

3.App自动化测试框架

a.日志记录

修改配置文件

[pytest] //ini文件格式的语法,一个选择器markers =apiuiute2erun_yaml_case = 1log_file = ./pytest.log #建议通过不同的文件夹管理 ./log/pytest.log
log_file_level = info
log_file_format = %(levelname)-8s %(asctime)s [%(name)s:%(lineno)s] : %(message)s
log_file_date_format = %Y-%m-%d %H:%H:%S#记录用例执行结果
result_log_enable =1
#记录用例分裂线
result_log_separator =1
#分割线等级
result_log_level_separator = warning
#异常信息等级
result_log_level_verbose = info

b.生成测试报告

①修改配置文件

[pytest] //ini文件格式的语法,一个选择器addopts = --alluredir=./temps --clean-alluredir #生成数据markers =apiuiute2erun_yaml_case = 1log_file = ./pytest.log
log_file_level = info
log_file_format = %(levelname)-8s %(asctime)s [%(name)s:%(lineno)s] : %(message)s
log_file_date_format = %Y-%m-%d %H:%H:%S#记录用例执行结果
result_log_enable =1
#记录用例分裂线
result_log_separator =1
#分割线等级
result_log_level_separator = warning
#异常信息等级
result_log_level_verbose = info

②执行系统命令

allure generate -o report temps

③创建一键式执行脚本

使用python代码,代替命令

import os
import pytest
pytest.main() #启动框架
os.system('allure generate -o report temps') #生成报告

④接口请求和断言 (接口自动化框架)

pytest+yaml+requests+allure_logging 接口自动化测试框架

yaml文件:

test_name:百度首页接口
steps:-request:  #请求接口method: geturl: https://www.baidu.com-response: #断言响应status_code: 200text: "baidu"

test_pytest.py:

import pytest
import requests #请求接口
import responses_validator #断言响应@pytest.mark.api #装饰器@pytest.fixture() #fixture  不能在用例之间之间调用,名字放置函数/用例的参数中,称为请求
def aaa(): #python 语言上的生成器print("aaa") #前置代码,在用例执行之前自动运行yieldprint("111") #后置代码,在用例执行之后自动运行def pytest_yaml_run_step(item): #在合适的时机被pytest自动的调用step = item.current_stepkey = list(step)[0]  value = list(step.values())[0]match key:case 'request':item.resp = requests.request(**value)case 'respones':responses_validator.validator(item.resp, **value)return True

⑤浏览器启动和控制 (web自动化框架)

pytest + yaml + selenium + allure + logging Web自动化测试框架

⑥app启动和控制(app自动化框架)

pytest + yaml + appium + allure + logging Web自动化测试框架

四、资源分享

a.接口/api

1.框架整体结构

2.框架使用说明

  1. 环境准备
    • 安装依赖:pip install -r requirements.txt
    • 安装 Allure 报告工具:根据操作系统从官方网站下载并配置环境变量
  2. 配置环境
    • 修改config/env.yaml文件,配置不同环境的基础 URL
    • 通过current_env指定当前使用的环境
  3. 编写测试用例
    • data/api_cases目录下创建 YAML 文件编写测试用例
    • 测试用例包含请求信息、前置后置操作和断言
  4. 执行测试
    • 运行python run.py执行所有测试用例
    • 生成的测试报告在reports/allure-report目录下
    • 可以通过allure open reports/allure-report命令查看报告
  5. 框架特点
    • 测试数据与代码分离,便于维护
    • 支持多环境配置
    • 自动生成详细的 Allure 测试报告
    • 完善的日志记录
    • 支持失败重跑
    • 丰富的断言方法

这个框架可以根据实际项目需求进行扩展,例如添加数据库操作、接口依赖处理、参数化等功能。

b. web

1.框架整体结构

2.框架使用说明

1.环境准备:
  • 安装依赖:pip install -r requirements.txt
  • 安装 Allure 报告工具:根据操作系统从官方网站下载并配置环境变量
2.配置环境:
  • 修改config/env.yaml配置不同环境的 URL
  • 通过config/config.yamlcurrent_env指定当前使用的环境
  • 可配置浏览器类型、超时时间、失败重试次数等
3.编写页面元素:
  • element目录下创建 YAML 文件,定义页面元素的定位方式和值
  • 支持 id、xpath、css selector 等多种定位方式
4.创建页面对象:
  • src/page_objects目录下创建页面对象类,继承 BasePage
  • 封装页面操作方法,调用 BasePage 的通用方法
5.编写测试用例 :
  • data/web_cases目录下创建 YAML 文件编写测试用例
  • 测试用例包含测试步骤、参数和断言
6.执行测试:
  • 运行python run.py执行所有测试用例
  • 生成的测试报告在reports/allure-report目录下
  • 可以通过allure open reports/allure-report命令查看报告
7.框架特点:
  • 采用页面对象模式 (POM),使代码结构清晰,易于维护
  • 测试数据与代码分离,通过 YAML 文件管理
  • 自动生成详细的 Allure 测试报告,包含步骤、截图和日志
  • 支持失败自动截图,便于问题定位
  • 支持测试失败重试机制
  • 完善的日志记录,便于调试
  • 支持多环境配置和多种浏览器

这个框架可以根据实际项目需求进行扩展,例如添加数据库操作、API 调用、更多的断言方式等功能。

c.APP

1.框架整体结构

2.框架使用说明

  1. 环境准备
    • 安装 Python 3.8+ 和必要依赖:pip install -r requirements.txt
    • 安装 Appium 服务和相关驱动
    • 配置 Android SDK 或 Xcode 环境
  2. 配置框架
    • 在 config/devices.yaml 中配置测试设备信息
    • 在 config/env.yaml 中配置应用环境信息
    • 根据需要调整 config/config.yaml 中的全局设置
  3. 编写测试
    • 在 elements 目录下定义页面元素 YAML 文件
    • 在 src/page_objects 中实现页面对象类
    • 在 data/test_cases 中编写 YAML 测试用例
    • 在 tests 目录下编写测试脚本
  4. 执行测试
    • 启动 Appium 服务:appium
    • 运行测试:python run.py
    • 查看报告:allure open reports/allure-report

该框架适合中小型 App 自动化测试项目,通过合理的架构设计和工具集成,能够有效提高测试效率和可维护性,降低自动化测试的实施成本。

http://www.dtcms.com/a/338224.html

相关文章:

  • GPT-5之后:当大模型更新不再是唯一焦点
  • 本地搭建dify+deepseek智能体
  • 【unitrix数间混合计算】3.1 零标记trait(zero.rs)
  • 【最后203篇系列】033 Mongo副本集修复过程
  • Maven resources资源配置详解
  • 小程序被爬虫攻击,使用waf能防护吗?
  • Vision Master的C#脚本与opencv联合编程
  • 【opencv-Python学习笔记(7):图像平滑处理】
  • 【图像算法 - 17】慧眼识“果”:基于深度学习与OpenCV的苹果智能检测系统(附完整代码)
  • sqli-labs通关笔记-第54关 GET字符型注入(单引号闭合 限制10次探测机会)
  • 英特尔公司Darren Pulsipher 博士:以架构之力推动政府数字化转型
  • 【leetcode】392. 判断子序列
  • 【yocto】为什么要选择yocto?
  • leetcode4_452 and 763
  • 力扣热题100------19.删除链表的倒数第N个结点
  • 【MongoDB与Python:数据库操作入门教程】
  • 力扣hot100:移动零问题的巧妙解决:双指针与原地交换策略(283)
  • ETL中统一调度的方式
  • Vue深入组件:组件事件详解1
  • 如何使用 React 101 的 Highcharts 包装器
  • 【网络安全实验报告】实验七:简单的防火墙搭建实验
  • css word-pass
  • 数据转换细节揭秘:ETL如何精准映射复杂业务逻辑
  • 专题:2025AI技术应用与发展报告|附600+份报告PDF、数据仪表盘汇总下载
  • 前端处理导出PDF。Vue导出pdf
  • GPT-5博士级AI使用教程及国内平替方案
  • 活到老学到老之vue-vben-admin项目安装
  • WordPress (LNMP 架构) 一键部署 Playbook
  • django+Vue3实现前后端分离式实时聊天室
  • Java面试考点