自动化测试项目学习笔记(四):Pytest介绍和使用

简介: 本文是关于自动化测试框架Pytest的介绍和使用。Pytest是一个功能丰富的Python测试工具,支持参数化、多种测试类型,并拥有众多第三方插件。文章讲解了Pytest的编写规则、命令行参数、执行测试、参数化处理以及如何使用fixture实现测试用例间的调用。此外,还提供了pytest.ini配置文件示例。

学习说明

这里主要是了解pytest的使用。

Pytest介绍

Pytest是一个非常成熟的全功能的Python测试框架,主要由一下几点:

  • 简单容易上手,文档很丰富
  • 支持参数化,可以细粒度地控制要测试的测试用例
  • 能够支持简单的单元测试和复杂的功能测试,还可以用来做selemium、appmium等自动化测试、接口自动化测试(pytest+request)
  • 有很多丰富的第三方插件,并且可以自定义扩展,比如pytest-selemium、pytest-html、pytest-rerunfailures、pytest-xdist(多CPU分发)
  • 可以初始化和清除,setupmodule和teardowmmodule。

编写规则

  • 测试文件以test开头(以test结尾也可以)
  • 测试函数以test开头
  • 测试类以Test开头,不能有init方法
  • 断言使用assert即可

Console参数介绍

  • -v:用于显示每个测试函数的执行结果
  • -q:只显示整体测试结果
  • -s:用于显示测试函数中print()函数输出
  • -x:–exitfirst,在第一个错误或测试失败时立即退出
  • -h:帮助

执行测试

  • 配置PyCharm执行
    • Tools->Python integrated tools->Default test runner
  • main方法
    • pytest.main([“-s”, “-v”, “test_01.py”])
  • 命令行
    • pytest -s -v test_01.py

执行指定的函数

有三种方法

  • 显式指定函数名,通过::标记

    •    pytest.main(["-s", "-v", "test_03.py::test1"])
      
  • 使用模糊匹配,通过-k选择标识

    •    pytest.main(["-s", "-v", "-k", "add","test_03.py"])
      
    •    或者直接命令行 pytest -k func1 test.py
      
  • 使用pytest.mark,在函数上进行标记(必须要写配置文件)

    •    pytest.main(["-s", "-v", "-m", "undo","test_03.py"])
      
    •    或者直接命令行 pytest -m undo test_03.py
      
import pytest

@pytest.mark.undo
def test_add1():
    print("test1")

@pytest.mark.do
def test_sub2():
    print("test2")

if __name__ == '__main__':
    # pytest.main(["-s", "-v", "test_03.py::test1"])
    # pytest.main(["-s", "-v", "-k", "add","test_03.py"])
    pytest.main(["-s", "-v", "-m", "undo","test_03.py"])

下面是pytest.ini的配置文件

[pytest]
markers=
        do: do
        undo: undo

参数化处理

在pytest中,也可以使用参数化测试,即每组参数都独立执行一次测试。使用的工具就是pytest.mark.parametrize(argnames, argvalues)。包括列表、元组和字典来进行传参。

import pytest

# 列表
data = ['123', '456']

@pytest.mark.parametrize("pwd", data)
def test1(pwd):
    print("pwd")

# 元组
data2 = [(1,2,3), (4,5,6)]
@pytest.mark.parametrize("a, b, c", data2)
def test2(a, b, c):
    print(a, b, c)

# 字典
dicts = [
    {
      "user": 123,
      "pwd": 456
    },{
        "user": 789,
        "pwd": 101112
    }
]

data4 = [
    pytest.param(1,2,3, id="(a+b):pass"), # id的值可以自定义,只要方便理解每个用例是干什么的即可
    pytest.param(4,5,9, id="(a+b):pass")

]
@pytest.mark.parametrize("dic", dicts)
def test3(dic):
    print(dic)

def add(a,b):
    return a+b

class TestParametrize(object):

    @pytest.mark.parametrize("a, b, expect", data4)
    def test_patam(self, a, b, expect):
        assert add(a, b) == expect
if __name__ == '__main__':
    pytest.main(["-s", "-v", "test_04.py"])

使用fixture实现用例之间的调用

**目的:**是前后置的方法,可以实现部分以及全部用例的前后置。

如果要实现后置,则需要加上yield-(yield是生成器,可以生成一个可以迭代的数组,然后循环,所以是可以返回的)yield和return都可以返回,return后面没有代码,而yield后面可以有代码。

@pytest.fixture(),包含五个参数

  • scope:表示的是被这个装饰器它的作用域是什么,可以作用域函数、类、模块和包
  • params:可选的参数化,列表、元组、字典列表、字典元组。
  • autouse:自动执行,默认是False
  • ids:当使用params参数化时,给每一个值设置一个变量名
  • name: 表示被装饰器所标记的方法取别名-取了别名原来的名就不能用了
    fixture与fixture间可相互调用
    fixture可以有返回值,如果没有return,默认会是None
import pytest

@pytest.fixture()
def init():
    print("init")
    return 1

def test1(init):
    print("test1")

def test2(init):
    print("test2")

if __name__ == '__main__':
    pytest.main(['-s','-v',"test_05.py"])
目录
相关文章
|
1月前
|
人工智能 测试技术 项目管理
测试不再碎片化:AI智能体平台「项目资料套件」功能上线!
在实际项目中,需求文档分散、整理费时、测试遗漏等问题常困扰测试工作。霍格沃兹推出AI智能体测试平台全新功能——项目资料套件,可将多个关联文档打包管理,并一键生成测试用例,提升测试完整性与效率。支持套件创建、文档关联、编辑删除及用例生成,适用于复杂项目、版本迭代等场景,助力实现智能化测试协作,让测试更高效、更专业。
|
14天前
|
测试技术 UED 开发者
性能测试报告-用于项目的性能验证、性能调优、发现性能缺陷等应用场景
性能测试报告用于评估系统性能、稳定性和安全性,涵盖测试环境、方法、指标分析及缺陷优化建议,是保障软件质量与用户体验的关键文档。
|
3月前
|
Java 测试技术 Spring
简单学Spring Boot | 博客项目的测试
本内容介绍了基于Spring Boot的博客项目测试实践,重点在于通过测试驱动开发(TDD)优化服务层代码,提升代码质量和功能可靠性。案例详细展示了如何为PostService类编写测试用例、运行测试并根据反馈优化功能代码,包括两次优化过程。通过TDD流程,确保每项功能经过严格验证,增强代码可维护性与系统稳定性。
158 0
|
3月前
|
人工智能 数据可视化 测试技术
UAT测试排程工具深度解析:让验收测试不再失控,项目稳稳上线
在系统交付节奏加快的背景下,“测试节奏混乱”已成为项目延期的主因之一。UAT测试排程工具应运而生,帮助团队结构化拆解任务、清晰分配责任、实时掌控进度,打通需求、测试、开发三方协作闭环,提升测试效率与质量。本文还盘点了2025年热门UAT工具,助力团队选型落地,告别靠表格和群聊推进测试的低效方式,实现有节奏、有章法的测试管理。
|
8月前
|
人工智能 自然语言处理 测试技术
Potpie.ai:比Copilot更狠!这个AI直接接管项目代码,自动Debug+测试+开发全搞定
Potpie.ai 是一个基于 AI 技术的开源平台,能够为代码库创建定制化的工程代理,自动化代码分析、测试和开发任务。
593 19
Potpie.ai:比Copilot更狠!这个AI直接接管项目代码,自动Debug+测试+开发全搞定
|
8月前
|
缓存 Java 测试技术
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
842 3
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
|
8月前
|
JSON 前端开发 API
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
337 5
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
|
14天前
|
运维 Linux 网络安全
自动化真能省钱?聊聊运维自动化如何帮企业优化IT成本
自动化真能省钱?聊聊运维自动化如何帮企业优化IT成本
46 4
|
3月前
|
运维 监控 安全
从实践到自动化:现代运维管理的转型与挑战
本文探讨了现代运维管理从传统人工模式向自动化转型的必要性与路径,分析了传统运维的痛点,如效率低、响应慢、依赖经验等问题,并介绍了自动化运维在提升效率、降低成本、增强系统稳定性与安全性方面的优势。结合技术工具与实践案例,文章展示了企业如何通过自动化实现运维升级,推动数字化转型,提升业务竞争力。
|
12月前
|
运维 Linux Apache
,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具
【10月更文挑战第7天】随着云计算和容器化技术的发展,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具,通过定义资源状态和关系,确保系统始终处于期望配置状态。本文介绍Puppet的基本概念、安装配置及使用示例,帮助读者快速掌握Puppet,实现高效自动化运维。
225 4