Python模块—Pytest模块

这篇具有很好参考价值的文章主要介绍了Python模块—Pytest模块。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


PyTest

1. args参数

参数 作用
-v 详细输出测试信息。
-q 简要输出测试信息。
-s 输出测试用例中的print语句。
-x 遇到失败用例时立即停止测试。
-k 根据条件指定用例去测试,如:‘-k’ ,‘TestCase and not test_case_1’(可指定类名&函数名)
-m 根据修饰器指定用例去测试,如:‘-m’ , ‘skip’(可指定测试种类)
# args参数运用
if __name__ == '__main__':
    pytest.main(args=['-q', '-s','pytest_fixture.py'(测试文件名)]) 

2. pytest-ordering

  • 修饰器:@pytest.mark.run(order=1)
  • 说明:order的值越小,测试用例越先被执行!
  • 作用:控制用例的执行顺序
  • 依赖:pytest-ordering 模块
@pytest.mark.run(order=4)
def test_case_1(login):
    print('Test case 1')
    assert True

3. fixture(前置函数)

  • 修饰器:@pytest.fixture()
  • 说明:将被@pytest.fixture()修饰的方法传入测试用例参数
  • 作用:完成测试之前的初始化,也可以返回数据给测试函数。
  • 参数一scope作用域参数

作用域:

function 函数或者方法级别都会被调用.

class 类级别调用一次.

module 模块级别调用一次.

session 是多个文件调用一次(可以跨.py文件调用,每个.py文件就是module).

@pytest.fixture(scope='作用域')
def login():
    print('Login Operation!')
    
@pytest.mark.run(order=4)
def test_case_1(login):
    print('Test case 1')
    assert True
  • 参数二params传递数据参数

测试过程中需要大量的测试数据,如果每条测试数据都编写一条测试用例,用例数量将是非常宠大的。

一般我们在测试过程中会将测试用到的数据以参数的形式传入到测试用例中,并为每条测试数据生成一个测试结果数据.

@pytest.fixture(params=[1, 2, 3,])
def past_data(request):
    print(f"get data : {request.param}")
    return request.param

def test_case_9(past_data):
    print(f"past_data : {past_data}")
  • 参数三autouse自动执行参数

如果每条测试用例都需要添加 fixture 功能,则需要在每一要用例方法里面传入这个fixture的名字.

这里就可以在装饰器里面添加一个参数 autouse=‘true’,它会自动应用到所有的测试方法中,只是这里没有办法返回值给测试用例.

@pytest.fixture 里设置 autouse 参数值为 true(默认 false),每个测试函数都会自动调用这个前置函数

@pytest.fixture(autouse=True)
def login():
    print('Login Operation!')

4. parametrize(参数化)

  • 修饰器:@pytest.mark.paramtrize(‘data’, param)

  • **Parametrize()**方法主要参数说明:

    argsnames :参数名,是个字符串,如中间用逗号分隔则表示为多个参数名.

    argsvalues :参数值,参数组成的列表,列表中有几个元素,就会生成几条用例.

  • 作用:实现测试数据的传参。

  • 方式一单次使用 parametrize

@pytest.mark.parametrize('x', [1, 2, 3])
def test_case_10(x):
    print(f"Parameters : {x}")
    assert True
  • 方式二多次使用 parametrize
# 参数按照 (笛卡尔积方式)组合
@pytest.mark.parametrize('x', [1, 2, 3])
@pytest.mark.parametrize('y', [4, 5, 6])
def test_case_10(x, y):
    print(f"Parameters : {x} and {y}")
    assert True

5. fixture 与 parametrize 结合

  • 适用场景:测试数据需要在 fixture 方法中使用,同时也需要在测试用例中使用。可以在使用 parametrize 的时候添加一个参数 indirect=Truepytest 可以实现将参数传入到 fixture 方法中,也可以在当前的测试用例中使用.
  • 结合方法indirect 参数设置为 Truepytest 会把 argnames 当作函数去执行,将 argvalues 作为参数传入到 argnames 这个函数里.
@pytest.fixture()
def login_app(request):
    print("Login browser...")
    print(f"value is {request.param}")
    return request.param

@pytest.mark.parametrize('login_app', ['zhangsan', 'lisi', 'wangwu'], indirect=True)
def test_case_11(login_app):
    print("Test_case_11!")
    print(f"value is {login_app}")
    assert True
    
# 运行结果:
# Login browser...
# value is zhangsan(方法输出)
# Test_case_11!
# value is zhangsan(用例输出)

6. pyyaml(数据源)

  • 适用场景:在实际的测试工作中,通常需要对多组不同的输入数据,进行同样的测试操作步骤,以验证我们的软件质量。这种测试,在功能测试中非常耗费人力物力,但是在自动化中,却比较好实现,只要实现了测试操作步骤,然后将多组测试数据以数据驱动的形式注入,就可以实现了.当数据量非常大的时候,我们可以将数据存放到外部文件中,使用的时候将文件中的

  • 依赖:PyYaml 模块文章来源地址https://www.toymoban.com/news/detail-630909.html

# 数据源
---
-
  - 张三
  - 李四
  - 王五
-
---
  • Python 代码
import yaml
file_name=os.path.abspath(os.path.join(os.path.dirname(os.path.dirname(__file__)),'data/data.yaml'))
@pytest.mark.parametrize('x, y, z', yaml.safe_load(open(file_name, encoding='utf-8')))
def test_case_12(x, y, z):
    print("Testing case 12!")
    print(f"Value is {x} and {y} and {z}")
    assert True
    
# 运行结果:
# Testing case 12!
# Value is 张三 and 李四 and 王五

7. pytest-xdist(分布式测试)

  • 介绍:pytest-xdist 是 pytest 分布式执行插件,可以多个 CPU 或主机执行,这款插件允许用户将测试并发执行(进程级并发), 插件是动态决定测试用例执行顺序的。
  • 依赖:pytest-xdist 模块
# 参数 -n atuo(可以指定内核数)
if __name__ == "__main__":
    pytest.main(args=['-s', '-v', '-n', 'auto'])

8. allure(测试报告)

  • 依赖:allure-pytest 模块
  • 用法
# 导包
import pytest,os

allure_result_path = os.path.abspath(os.path.join(os.path.dirname(os.path.dirname(__file__)), 'report/json'))
allure_report_path = os.path.abspath(os.path.join(os.path.dirname(os.path.dirname(__file__)), 'report/html'))

if __name__ == "__main__":
    pytest.main(args=['-s', '-v', '--alluredir', allure_result_path])
    cmd = 'allure generate %s -o %s -c' % (allure_result_path, allure_report_path)
    os.system(cmd)
# 注意:
# 这里可能会有报错现象,解决方法:将pycharm软件设置成以管理员模式运行
# 使用步骤:
1. 将pytest配置文件中的命令行参数加上如下代码
--alluredir report
2. 编写好测试脚本后,在命令行行中运行pytest
[pytest]
addopts = -s --alluredir report
testpaths = ./scripts
python_files = test*.py
python_classes = Test*
python_functions = test*
3. 程序运行结束后,会在项目的report目录中生成一些json文件
# 增加allure特性,丰富测试报告内容:
@allure.epic() epic描述 敏捷里面的概念,定义史诗,往下是feature
@allure.feature() 模块名称 功能点的描述,往下是story
@allure.story() 用户故事 用户故事,往下是title
@allure.title(用例的标题) 用例的标题 重命名html报告名称
@allure.testcase() 测试用例的链接地址 对应功能测试用例系统里面的case
@allure.issue() 缺陷 对应缺陷管理系统里面的链接
@allure.description() 用例描述 测试用例的描述
@allure.step() 操作步骤 测试用例的步骤
@allure.severity() 用例等级 blocker,critical,normal,minor,trivial
@allure.link() 链接 定义一个链接,在测试报告展现
@allure.attachment() 附件 报告添加附件

到了这里,关于Python模块—Pytest模块的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 10 python pytest

    项目里面新建 xxx.txt文件 执行pip install -r xxx.txt一次性安装所有插件 pytest-html 生成html格式的自动化测试报告 pytest-xdist 测试用例分布式执行,多cpu分发 pytest-ordering 用于改变测试用例的执行顺序 pytest-rerunfailures 用于失败后重跑 pytest-pytest 用于生成美观的测试报告 1,模块必须以

    2024年02月17日
    浏览(32)
  • Python —— pytest框架

    1、搭建自动化框架的思路与流程 1、搭建自动化测试框架的思路和流程,任意测试手段流程都是一致的:手工测试、自动化测试、工具测试 手工测试:熟悉业务 —— 写用例 —— 执行用例并记录结果 —— 生成测试报告 自动化测试:熟悉业务 —— 写自动化用例(来自于手工

    2024年04月17日
    浏览(33)
  • Python UI自动化 —— pytest常用运行参数解析、pytest执行顺序解析

    -v 用于显示每个测试函数的执行结果 -q 只显示整体测试结果 -s 用于显示测试函数中print()函数输出 -x 在第一个错误或失败的测试中立即退出 -m 只运行带有装饰器配置的测试用例 -k 通过表达式运行指定的测试用例 -h 帮助 首先来看什么参数都没加的运行情况 -v 用于显示每个测

    2024年02月09日
    浏览(45)
  • Python测试之Pytest详解

    当涉及到 python 的测试框架时, pytest 是一个功能强大且广泛应用的第三方库。它提供简洁而灵活的方式来编写和执行测试用例,并具有广泛的应用场景。下面是 pytest 的介绍和详细使用说明: pytest 是一个用于 python 单元测试的框架,它建立在标准的 unittest 模块之上,并提供

    2024年02月05日
    浏览(33)
  • Python pytest入门教程

    一、引言 Python是一种广泛使用的编程语言,常用于Web开发、数据分析、机器学习等领域。在Python的测试框架中,pytest是一个非常流行的选择。它具有简单易用、灵活多变的特点,可以帮助开发者快速编写和执行测试用例。本文将通过一系列示例,带领大家入门Python的pytest测试

    2024年01月16日
    浏览(40)
  • python中Pytest常用的插件

    前言 除了框架本身提供的功能外,Pytest还支持上百种第三方插件,良好的扩展性可以更好的满足大家在用例设计时的不同需求。本文将为大家详细介绍下面5项常用的插件。 1. 用例依赖 编写用例的时候,我们会注意用例之间的独立性,但部分用例之间确实存在关联,无法做到

    2024年01月19日
    浏览(32)
  • 【Python】案例介绍Pytest进行压力测试

    在现代Web应用程序中,性能是至关重要的。为了确保应用程序能够在高负载下正常运行,我们需要进行性能测试。 今天,应小伙伴的提问, 田辛老师来写一个Pytest进行压力测试的简单案例。 这个案例的测试网站我们就隐藏了,不过网站的基本情况是: 阿里云服务器:CentO

    2024年02月07日
    浏览(45)
  • Python单元测试框架之pytest -- 断言

    对于测试来讲,不管是功能测试,自动化测试,还是单元测试。一般都会预设一个正确的预期结果,而在测试执行的过程中会得到一个实际的结果。测试的成功与否就是拿实际的结果与预期的结果进行比较。这个比的过程实际就是断言(assert)。 在unittest单元测试框架中提供

    2024年02月11日
    浏览(63)
  • Python单元测试pytest捕获日志输出

    使用pytest进行单元测试时,遇到了需要测试日志输出的情况,查看了文档 https://docs.pytest.org/en/latest/how-to/capture-stdout-stderr.html https://docs.pytest.org/en/latest/how-to/logging.html 然后试了一下,捕捉logger.info可以用caplog,获取print输出可用capsys,Demo如下: - a.py - test_a.py - 验证:

    2024年04月10日
    浏览(41)
  • Python基础介绍 —— 使用pytest进行测试!

    Pytest 是 Python 的一种单元测试框架,与 Python 自带的 unittest 测试框架类似,但是比 unittest 框架使用起来更简洁,效率更高。 Pytest 是 Python 的一种单元测试框架,与 Python 自带的 unittest 测试框架类似,但是比 unittest 框架使用起来更简洁,效率更高。 适合从简单的单元到复杂的

    2024年02月05日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包