自动化测试项目学习笔记(四):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天前
|
缓存 Java 测试技术
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
14 3
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
|
3天前
|
人工智能 自然语言处理 测试技术
Potpie.ai:比Copilot更狠!这个AI直接接管项目代码,自动Debug+测试+开发全搞定
Potpie.ai 是一个基于 AI 技术的开源平台,能够为代码库创建定制化的工程代理,自动化代码分析、测试和开发任务。
91 19
Potpie.ai:比Copilot更狠!这个AI直接接管项目代码,自动Debug+测试+开发全搞定
|
5天前
|
JSON 前端开发 API
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
29 5
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
|
1月前
|
Dart 前端开发 Android开发
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
36 1
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
1月前
|
存储 测试技术 API
pytest接口自动化测试框架搭建
通过上述步骤,我们成功搭建了一个基于 `pytest`的接口自动化测试框架。这个框架具备良好的扩展性和可维护性,能够高效地管理和执行API测试。通过封装HTTP请求逻辑、使用 `conftest.py`定义共享资源和前置条件,并利用 `pytest.ini`进行配置管理,可以大幅提高测试的自动化程度和执行效率。希望本文能为您的测试工作提供实用的指导和帮助。
114 15
|
3月前
|
机器学习/深度学习 算法 UED
在数据驱动时代,A/B 测试成为评估机器学习项目不同方案效果的重要方法
在数据驱动时代,A/B 测试成为评估机器学习项目不同方案效果的重要方法。本文介绍 A/B 测试的基本概念、步骤及其在模型评估、算法改进、特征选择和用户体验优化中的应用,同时提供 Python 实现示例,强调其在确保项目性能和用户体验方面的关键作用。
72 6
|
3月前
|
机器学习/深度学习 算法 UED
在数据驱动时代,A/B 测试成为评估机器学习项目效果的重要手段
在数据驱动时代,A/B 测试成为评估机器学习项目效果的重要手段。本文介绍了 A/B 测试的基本概念、步骤及其在模型评估、算法改进、特征选择和用户体验优化中的应用,强调了样本量、随机性和时间因素的重要性,并展示了 Python 在 A/B 测试中的具体应用实例。
47 1
|
7天前
|
JSON 前端开发 测试技术
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
51 10
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
|
1月前
|
数据可视化 前端开发 测试技术
接口测试新选择:Postman替代方案全解析
在软件开发中,接口测试工具至关重要。Postman长期占据主导地位,但随着国产工具的崛起,越来越多开发者转向更适合中国市场的替代方案——Apifox。它不仅支持中英文切换、完全免费不限人数,还具备强大的可视化操作、自动生成文档和API调试功能,极大简化了开发流程。
|
1月前
|
存储 测试技术 数据库
接口测试工具攻略:轻松掌握测试技巧
在互联网快速发展的今天,软件系统的复杂性不断增加,接口测试工具成为确保系统稳定性的关键。它如同“翻译官”,模拟请求、解析响应、验证结果、测试性能并支持自动化测试,确保不同系统间信息传递的准确性和完整性。通过Apifox等工具,设计和执行测试用例更加便捷高效。接口测试是保障系统稳定运行的第一道防线。

热门文章

最新文章