Python测试框架:pytest学习笔记

 更新时间:2020年10月20日 15:52:02   作者:默默的点滴  
这篇文章主要介绍了Python测试框架:pytest的相关资料,帮助大家更好的利用python进行单元测试,感兴趣的朋友可以了解下

 python通用测试框架大多数人用的是unittest+HTMLTestRunner,这段时间看到了pytest文档,发现这个框架和丰富的plugins很好用,所以来学习下pytest.

pytest是一个非常成熟的全功能的Python测试框架,主要有以下几个特点:

  • 简单灵活,容易上手
  • 支持参数化
  • 能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytest+requests)
  • pytest具有很多第三方插件,并且可以自定义扩展,比较好用的如pytest-selenium(集成selenium)、pytest-html(完美html测试报告生成)、pytest-rerunfailures(失败case重复执行)、pytest-xdist(多CPU分发)等
  • 测试用例的skip和xfail处理
  • 可以很好的和jenkins集成
  • report框架----allure 也支持了pytest

安装pytest:

pip install -U pytest

验证安装的版本:

pytest --version

几个pytest documentation中的例子:

例子1:

import pytest

# content of test_sample.py
def func(x):
 return x + 1
def test_answer():
 assert func(3) == 5

命令行切换到文件所在目录,执行测试(也可以直接在IDE中运行):

这个测试返回一个失败报告,因为func(3)不返回5。

例子2:

当需要编写多个测试样例的时候,我们可以将其放到一个测试类当中,如:

class TestClass: 
 def test_one(self): 
 x = "this" 
 assert 'h' in x 
 
 def test_two(self): 
 x = "hello" 
 assert hasattr(x, 'check')

运行以上例子:

从测试结果中可以看到,该测试共执行了两个测试样例,一个失败一个成功。同样,我们也看到失败样例的详细信息,和执行过程中的中间结果。-q即-quiet,作用是减少冗长,具体就是不再展示pytest的版本信息。

如何编写pytest测试样例

通过上面2个实例,我们发现编写pytest测试样例非常简单,只需要按照下面的规则:

  • 测试文件以test_开头(以_test结尾也可以)
  • 测试类以Test开头,并且不能带有 init 方法
  • 测试函数以test_开头
  • 断言使用基本的assert即可

运行模式

   Pytest的多种运行模式,让测试和调试变得更加得心应手,下面介绍5种常用的模式。在介绍之前需要提醒一句,运行pytest时会找当前目录及其子目录中的所有test_*.py 或 *_test.py格式的文件以及以test开头的方法或者class,不然就会提示找不到可以运行的case了。

1.运行后生成测试报告(htmlReport)

安装pytest-html:

pip install -U pytest-html

运行模式:

pytest --html=report.html

报告效果:

在以上报告中可以清晰的看到测试结果和错误原因,定位问题很容易。

2.运行指定的case

  当我们写了较多的cases时,如果每次都要全部运行一遍,无疑是很浪费时间的,通过指定case来运行就很方便了。

例子代码:

class TestClassOne(object):
 def test_one(self):
 x = "this"
 assert 't'in x
 
 def test_two(self):
 x = "hello"
 assert hasattr(x, 'check')
class TestClassTwo(object):
 def test_one(self):
 x = "iphone"
 assert 'p'in x
 
 def test_two(self):
 x = "apple"
 assert hasattr(x, 'check')

运行模式:

模式1:直接运行test_se.py文件中的所有cases:

pytest test_se.py

模式2:运行test_se.py文件中的TestClassOne这个class下的两个cases:

pytest test_se.py::TestClassOne

模式3:运行test_se.py文件中的TestClassTwo这个class下的test_one:

注意:定义class时,需要以T开头,不然pytest是不会去运行该class的。

3.多进程运行cases

  当cases量很多时,运行时间也会变的很长,如果想缩短脚本运行的时长,就可以用多进程来运行。

安装pytest-xdist:

pip install -U pytest-xdist

运行模式:

pytest test_se.py -n NUM

其中NUM填写并发的进程数。

4.重试运行cases

  在做接口测试时,有事会遇到503或短时的网络波动,导致case运行失败,而这并非是我们期望的结果,此时可以就可以通过重试运行cases的方式来解决。

安装pytest-rerunfailures:

pip install -U pytest-rerunfailures

运行模式:

pytest test_se.py --reruns NUM

NUM填写重试的次数。

5.显示print内容

  在运行测试脚本时,为了调试或打印一些内容,我们会在代码中加一些print内容,但是在运行pytest时,这些内容不会显示出来。如果带上-s,就可以显示了。

运行模式:

pytest test_se.py -s

另外,pytest的多种运行模式是可以叠加执行的,比如说,你想同时运行4个进程,又想打印出print的内容。

  可以用:

pytest test_se.py -s -n 4

以上就是Python测试框架:pytest学习笔记的详细内容,更多关于python pytest的资料请关注脚本之家其它相关文章!

相关文章

  • 使用Python将Mysql的查询数据导出到文件的方法

    使用Python将Mysql的查询数据导出到文件的方法

    今天小编就为大家分享一篇关于使用Python将Mysql的查询数据导出到文件的方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • 跟老齐学Python之传说中的函数编写条规

    跟老齐学Python之传说中的函数编写条规

    在使用函数的时候,首先要把它放在对象的层面考量,它不是什么特殊的东西,尽管我们使用了不少篇幅讲述它,但它终归还是一个对象。
    2014-10-10
  • 在Python的Flask框架中实现单元测试的教程

    在Python的Flask框架中实现单元测试的教程

    这篇文章主要介绍了在Python的Flask框架中实现单元测试的教程,属于自动化部署的方面,可以给debug工作带来诸多便利,需要的朋友可以参考下
    2015-04-04
  • python实现的二叉树算法和kmp算法实例

    python实现的二叉树算法和kmp算法实例

    最近重温数据结构,又用python,所以就用python重新写了数据结构的一些东西,以下是二叉树的python写法
    2014-04-04
  • 利用Celery实现Django博客PV统计功能详解

    利用Celery实现Django博客PV统计功能详解

    给网站增加pv、uv统计,可以是件很简单的事,也可以是件很复杂的事。下面这篇文章主要给大家介绍了利用Celery实现Django博客PV统计功能的相关资料,文中介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-05-05
  • python排序的方法实例总结

    python排序的方法实例总结

    在本篇文章里小编给大家整理的是一篇关于python排序的方法实例总结内容,有兴趣的朋友们可以学习下。
    2021-04-04
  • 一行代码挖掘文化瑰宝,Python解锁古诗文世界

    一行代码挖掘文化瑰宝,Python解锁古诗文世界

    想要从文字海洋中捕获珍珠般的古诗文吗?通过Python爬取古诗文网,你将掌握直捣黄龙的技能,简单几步,让经典文学尽收囊中,为你的项目增添灵气,需要的朋友可以参考下
    2024-03-03
  • Python函数参数类型及排序原理总结

    Python函数参数类型及排序原理总结

    这篇文章主要介绍了Python函数参数类型及排序原理总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • python实现猜数字小游戏

    python实现猜数字小游戏

    这篇文章主要,具有一定的参考价值,感兴趣的小伙伴们可以参考一下介绍了Python实现猜数字小游戏,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • python编写朴素贝叶斯用于文本分类

    python编写朴素贝叶斯用于文本分类

    这篇文章主要为大家详细介绍了python编写朴素贝叶斯用于文本分类,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12

最新评论