您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

Pytest 快速入门

时间:2023-04-17 14:09:34  来源:  作者:测试玩家勇哥

Pytest的入门操作使用

pytest 特点:

  1. 非常容易上手,入门简单,文档丰富,文档中有很多实例可以参考

  2. 能够支持简单的单元测试和复杂的功能测试

  3. 支持参数化

  4. 执行测试过程中可以将某些测试跳过(skip),或者对某些预期失败的case标记成失败

  5. 支持重复执行(rerun)失败的 case

  6. 支持运行由 nose, unittest 编写的测试 case

  7. 可生成html报告

  8. 方便的和持续集成工具 jenkins 集成

  9. 可支持执行部分用例

  10. 具有很多第三方插件,并且可以自定义扩展

安装

直接执行 如下命令即可安装pytest

  • pip install pytest

我们还需要产生测试报表,所以要安装一个第三方插件 pytest-html ,执行如下命令安装

  • pip install pytest-html
def func(x):    return x + 3

def test_answer():    assert func(3) == 6

class TestClass:    def test_01(self):        print('n用例01')        assert 1 == 1
    def test_02(self):        print('n用例02')        assert 2 == 2
    def test_03(self):        print('n用例03')        assert 3 == 2

 

然后,cmd进入当前文件目录,直接执行

  • pytest

 

PS D:Lemonpy45webatuotestpytest_learn> pytest .test_learn01.py========================================================== test session starts ==========================================================platform win32 -- Python 3.9.7, pytest-6.2.5, py-1.10.0, pluggy-1.0.0rootdir: D:Lemonpy45webatuotestpytest_learnplugins: allure-pytest-2.9.43, anyio-3.3.2, html-3.1.1, metadata-1.11.0collected 4 items                                                                                                                        
test_learn01.py ...F                                                                                                               [100%]
=============================================================== FAILURES ================================================================___________________________________________________________ TestClass.test_03 ___________________________________________________________
self = <test_learn01.TestClass object at 0x0000023FFB6743D0>
    def test_03(self):        print('n用例03')>       assert 3 == 2E       assert 3 == 2
test_learn01.py:27: AssertionError--------------------------------------------------------- Captured stdout call ----------------------------------------------------------
用例03======================================================== short test summary info ========================================================FAILED test_learn01.py::TestClass::test_03 - assert 3 == 2====================================================== 1 failed, 3 passed in 0.21s ======================================================PS D:Lemonpy45webatuotestpytest_learn>

注意:

  • 如果只执行pytest,会查找当前目录及其子目录下以 test_*.py 或 *_test.py 文件,找到文件后,在文件中找到以 test 开头函数并执行

  • 如果只想执行某个文件,可以pytest start.py

  • 加上-q,就是显示简单的结果: pytest -q start.py

  • 如果我们希望 显示测试代码中print的内容,因为这些打印语句在调试代码时很有用,可以加上命令行参数 -s

    如下

    pytest -s
    
  • 如果我们希望得到更详细的执行信息,包括每个测试类、测试函数的名字,可以加上参数 -v,这个参数可以和 -s 合并为 -sv

    如下

    pytest -sv
    
  • 为了防止pytest到其他目录中找测试用例项,执行测试时,我们可以在命令行加上目标目录 cases ,就是这样

    pytest cases
    
pytest运行方式测试类主函数模式#  test_abc.pyimport pytest  # 引入pytest包
def test_a():  # test开头的测试函数    print("------->test_a")    assert 1  # 断言成功
def test_b():    print("------->test_b")    assert 0  # 断言失败

if __name__ == '__main__':    # pytest.main("-s  test_abc.py")  早期版本是这样的执行的    pytest.main(["-s",  "test_abc.py"])  # 调用pytest的main函数执行测试

 

命令行模式运行

  • # pytest 文件路径/测试文件名pytest ./test_abc.py

 

Pytest用例的设计原则

Pytest写用例时候,一定要按照下面的规则去写,否则不符合规则的测试用例是不会执行的

  • 文件名以 test_*.py文件和*_test.py

  • 以 test_ 开头的函数

  • 以 Test 开头的类,不能包含__init__ 方法

  • 所有的包 package 必须要有__init__.py文件

Pytest之并发执行

在Pytest测试框架中提供了pytest-xdist可以并发执行测试用例,来提升测试用例的执行速度。通常的情况下,测试用例的执行都是依据一定的规则来按顺序进行执行,这样的结果是每次执行的时候有的资源就只能被一个测试用例占用,而达不到测试用例执行的时候资源的共享,插件pytest-xdist插件可以很好的解决这个问题,一方面资源达到共享,基于第一点的考虑,也就达到了第二点的提升了测试执行的效率。

  • 安装pytest-xdist插件 pip install pytest-xdist

  • 使用 pytest -n auto 默认自动检查系统cpu个数,然后进行并发

  • 也可以指定并发数 pytest -n 2 即并发数2执行

pytest的重复执行

  • 安装:pip3 install pytest-repeat

 

命令行方式

使用–count命令行选项来指定您要运行一个或多个测试的次数:

  • pytest --count = 10 test.py

 

代码方式

如果要在代码中将测试标记为重复多次,则可以使用

# @pytest.mark.repeat(count)装饰器:
import pytest@pytest.mark.repeat(3)def test_example():    print("执行成功")

 

重复测试直到失败

有时候,功能模块不稳定,会存在一些错误,可以将 -x 与 pytest-repeat 一起用,强制运行器在第一次测试失败时停止


 
  • py.test --count=1000 -x test.py

 

repeat-scope的使用

命令行参数
作用:能够覆盖默认的测试用例执行顺序,相似fixture的scope参数

  • function:默认,范围针对每一个用例重复执行,再执行下一个用例

  • class:以class为用例集合单位,重复执行class里面的用例,再执行下一个


 
  • pytest -s --count=2 --repeat-scope=class test_Class.py

 

  • module:以模块为单位,重复执行模块里面的用例,再执行下一个


 
  • pytest -s --count=2 --repeat-scope=moudle test_Class.py

 

  • session:重复整个测试会话,即全部测试用例的执行一次,而后再执行第二次

产生报告

前面在安装pytest,我们也安装了 pytest-html 插件,这个插件就是用来产生测试报告的。

要产生报告,在命令行加上 参数 --html=report.html --self-contained-html ,如下


 
  • pytest cases --html=report.html --self-contained-html

 

这样就会产生名为 report.html的测试报告文件,可以在浏览器中打开



Tags:Pytest   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
入门Pytest:优雅地进行Python测试
一、引言当涉及到python的测试框架时,pytest是一个功能强大且广泛应用的第三方库。它提供简洁而灵活的方式来编写和执行测试用例,并具有广泛的应用场景。下面是pytest的介绍和...【详细内容】
2023-11-23  Search: Pytest  点击:(303)  评论:(0)  加入收藏
掌握Pytest的实用技巧和优秀实践
pytest是一个功能丰富且易于使用的Python测试框架,它建立在Python标准库的unittest模块之上,提供了更简洁、灵活和可读性强的测试代码编写方式。下面,我将按照步骤引导您学习py...【详细内容】
2023-06-07  Search: Pytest  点击:(137)  评论:(0)  加入收藏
pytest 前后置操作详谈
pytest 的前置与后置处理Pytest贴心的提供了类似setup、teardown的方法,并且还超过四个,一共有十种 模块级别:setup_module、teardown_module 函数级别:setup_function、teard...【详细内容】
2023-04-18  Search: Pytest  点击:(41)  评论:(0)  加入收藏
Pytest 快速入门
Pytest的入门操作使用pytest 特点: 非常容易上手,入门简单,文档丰富,文档中有很多实例可以参考 能够支持简单的单元测试和复杂的功能测试 支持参数化 执行测试过程中可以将...【详细内容】
2023-04-17  Search: Pytest  点击:(26)  评论:(0)  加入收藏
pytest通过parametrize方法实现数据驱动实战
前言在之前的篇章中讲解了yaml文件的基本语法规则、yaml文件的读写方法、通过unittest自动化测试框架+ddt+yaml实现数据驱动。同样Pytest自动化测试框架也能读取yaml文件实...【详细内容】
2022-12-03  Search: Pytest  点击:(330)  评论:(0)  加入收藏
Python+Pytest框架在Jenkins上生成Allure测试报告
在自动化测试执行之后,生成一个美观大方的测试报告,也是测试过程中,非常最要的一环。测试报告直接反应了测试过程中发现的问题,分析测试报告是解决问题的最重要手段。那么一个专...【详细内容】
2020-07-12  Search: Pytest  点击:(803)  评论:(0)  加入收藏
pytest、tox、Jenkins实现python接口自动化持续集成
pytest介绍pytest是一款强大的python测试工具,可以胜任各种级别的软件测试工作,可以自动查找测试用并执行,并且有丰富的基础库,可以大幅度提高用户编写测试用例的效率,具备可扩...【详细内容】
2020-03-16  Search: Pytest  点击:(328)  评论:(0)  加入收藏
Python测试工具 | 8 个很棒的pytest插件
Python 测试工具最好的一方面是其强大的生态系统。这里列出了八个最好的插件。我们是 pytest 的忠实粉丝,并将其作为工作和开源项目的默认 Python 测试工具。在本月的 Python...【详细内容】
2019-09-12  Search: Pytest  点击:(872)  评论:(0)  加入收藏
▌简易百科推荐
即将过时的 5 种软件开发技能!
作者 | Eran Yahav编译 | 言征出品 | 51CTO技术栈(微信号:blog51cto) 时至今日,AI编码工具已经进化到足够强大了吗?这未必好回答,但从2023 年 Stack Overflow 上的调查数据来看,44%...【详细内容】
2024-04-03    51CTO  Tags:软件开发   点击:(5)  评论:(0)  加入收藏
跳转链接代码怎么写?
在网页开发中,跳转链接是一项常见的功能。然而,对于非技术人员来说,编写跳转链接代码可能会显得有些困难。不用担心!我们可以借助外链平台来简化操作,即使没有编程经验,也能轻松实...【详细内容】
2024-03-27  蓝色天纪    Tags:跳转链接   点击:(12)  评论:(0)  加入收藏
中台亡了,问题到底出在哪里?
曾几何时,中台一度被当做“变革灵药”,嫁接在“前台作战单元”和“后台资源部门”之间,实现企业各业务线的“打通”和全域业务能力集成,提高开发和服务效率。但在中台如火如荼之...【详细内容】
2024-03-27  dbaplus社群    Tags:中台   点击:(8)  评论:(0)  加入收藏
员工写了个比删库更可怕的Bug!
想必大家都听说过删库跑路吧,我之前一直把它当一个段子来看。可万万没想到,就在昨天,我们公司的某位员工,竟然写了一个比删库更可怕的 Bug!给大家分享一下(不是公开处刑),希望朋友们...【详细内容】
2024-03-26  dbaplus社群    Tags:Bug   点击:(5)  评论:(0)  加入收藏
我们一起聊聊什么是正向代理和反向代理
从字面意思上看,代理就是代替处理的意思,一个对象有能力代替另一个对象处理某一件事。代理,这个词在我们的日常生活中也不陌生,比如在购物、旅游等场景中,我们经常会委托别人代替...【详细内容】
2024-03-26  萤火架构  微信公众号  Tags:正向代理   点击:(10)  评论:(0)  加入收藏
看一遍就理解:IO模型详解
前言大家好,我是程序员田螺。今天我们一起来学习IO模型。在本文开始前呢,先问问大家几个问题哈~什么是IO呢?什么是阻塞非阻塞IO?什么是同步异步IO?什么是IO多路复用?select/epoll...【详细内容】
2024-03-26  捡田螺的小男孩  微信公众号  Tags:IO模型   点击:(8)  评论:(0)  加入收藏
为什么都说 HashMap 是线程不安全的?
做Java开发的人,应该都用过 HashMap 这种集合。今天就和大家来聊聊,为什么 HashMap 是线程不安全的。1.HashMap 数据结构简单来说,HashMap 基于哈希表实现。它使用键的哈希码来...【详细内容】
2024-03-22  Java技术指北  微信公众号  Tags:HashMap   点击:(11)  评论:(0)  加入收藏
如何从头开始编写LoRA代码,这有一份教程
选自 lightning.ai作者:Sebastian Raschka机器之心编译编辑:陈萍作者表示:在各种有效的 LLM 微调方法中,LoRA 仍然是他的首选。LoRA(Low-Rank Adaptation)作为一种用于微调 LLM(大...【详细内容】
2024-03-21  机器之心Pro    Tags:LoRA   点击:(12)  评论:(0)  加入收藏
这样搭建日志中心,传统的ELK就扔了吧!
最近客户有个新需求,就是想查看网站的访问情况。由于网站没有做google的统计和百度的统计,所以访问情况,只能通过日志查看,通过脚本的形式给客户导出也不太实际,给客户写个简单的...【详细内容】
2024-03-20  dbaplus社群    Tags:日志   点击:(4)  评论:(0)  加入收藏
Kubernetes 究竟有没有 LTS?
从一个有趣的问题引出很多人都在关注的 Kubernetes LTS 的问题。有趣的问题2019 年,一个名为 apiserver LoopbackClient Server cert expired after 1 year[1] 的 issue 中提...【详细内容】
2024-03-15  云原生散修  微信公众号  Tags:Kubernetes   点击:(6)  评论:(0)  加入收藏
站内最新
站内热门
站内头条