自动化测试项目学习笔记(四):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"])
目录
相关文章
|
15天前
|
机器学习/深度学习 算法 UED
在数据驱动时代,A/B 测试成为评估机器学习项目不同方案效果的重要方法
在数据驱动时代,A/B 测试成为评估机器学习项目不同方案效果的重要方法。本文介绍 A/B 测试的基本概念、步骤及其在模型评估、算法改进、特征选择和用户体验优化中的应用,同时提供 Python 实现示例,强调其在确保项目性能和用户体验方面的关键作用。
23 6
|
18天前
|
关系型数据库 MySQL Java
【Docker最新版教程】一文带你快速入门Docker常见用法,实现容器编排和自动化部署上线项目
Docker快速入门到项目部署,MySQL部署+Nginx部署+docker自定义镜像+docker网络+DockerCompose项目实战一文搞定!
|
17天前
|
机器学习/深度学习 算法 UED
在数据驱动时代,A/B 测试成为评估机器学习项目效果的重要手段
在数据驱动时代,A/B 测试成为评估机器学习项目效果的重要手段。本文介绍了 A/B 测试的基本概念、步骤及其在模型评估、算法改进、特征选择和用户体验优化中的应用,强调了样本量、随机性和时间因素的重要性,并展示了 Python 在 A/B 测试中的具体应用实例。
24 1
|
20天前
|
监控 安全 测试技术
如何在实际项目中应用Python Web开发的安全测试知识?
如何在实际项目中应用Python Web开发的安全测试知识?
25 4
|
1月前
|
网络协议 关系型数据库 应用服务中间件
【项目场景】请求数据时测试环境比生产环境多花了1秒是怎么回事?
这是一位粉丝(谢同学)给V哥的留言,描述了他在优化系统查询时遇到的问题:测试环境优化达标,但生产环境响应时间多出1秒。通过抓包分析,发现MySQL请求和响应之间存在500毫秒的延迟,怀疑是网络传输开销。V哥给出了以下优化建议:
|
2月前
|
测试技术
自动化测试项目学习笔记(五):Pytest结合allure生成测试报告以及重构项目
本文介绍了如何使用Pytest和Allure生成自动化测试报告。通过安装allure-pytest和配置环境,可以生成包含用例描述、步骤、等级等详细信息的美观报告。文章还提供了代码示例和运行指南,以及重构项目时的注意事项。
238 1
自动化测试项目学习笔记(五):Pytest结合allure生成测试报告以及重构项目
|
2月前
|
监控 Java Maven
springboot学习二:springboot 初创建 web 项目、修改banner、热部署插件、切换运行环境、springboot参数配置,打包项目并测试成功
这篇文章介绍了如何快速创建Spring Boot项目,包括项目的初始化、结构、打包部署、修改启动Banner、热部署、环境切换和参数配置等基础操作。
154 0
|
2月前
|
机器学习/深度学习 人工智能 运维
构建高效运维体系:从自动化到智能化的演进
本文探讨了如何通过自动化和智能化手段,提升IT运维效率与质量。首先介绍了自动化在简化操作、减少错误中的作用;然后阐述了智能化技术如AI在预测故障、优化资源中的应用;最后讨论了如何构建一个既自动化又智能的运维体系,以实现高效、稳定和安全的IT环境。
73 4
|
2月前
|
运维 Linux Apache
,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具
【10月更文挑战第7天】随着云计算和容器化技术的发展,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具,通过定义资源状态和关系,确保系统始终处于期望配置状态。本文介绍Puppet的基本概念、安装配置及使用示例,帮助读者快速掌握Puppet,实现高效自动化运维。
63 4
|
13天前
|
机器学习/深度学习 运维 监控
智能化运维:从自动化到AIOps的演进之路####
本文深入探讨了IT运维领域如何由传统手工操作逐步迈向高度自动化,并进一步向智能化运维(AIOps)转型的过程。不同于常规摘要仅概述内容要点,本摘要将直接引入一个核心观点:随着云计算、大数据及人工智能技术的飞速发展,智能化运维已成为提升企业IT系统稳定性与效率的关键驱动力。文章详细阐述了自动化工具的应用现状、面临的挑战以及AIOps如何通过预测性分析和智能决策支持,实现运维工作的质变,引领读者思考未来运维模式的发展趋势。 ####