全功能Python测试框架:Pytest的基本使用

pytest介绍

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

  • 1、简单灵活,容易上手,文档丰富;
  • 2、支持参数化,可以细粒度地控制要测试的测试用例;
  • 3、能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytest+requests);
  • 4、pytest具有很多第三方插件,并且可以自定义扩展。
    如pytest-selenium(集成selenium)、pytest-html(完美html测试报告生成)、pytest-rerunfailures(失败case重复执行)、pytest-xdist(多CPU分发)、pytest–ordering(控制测试运行的顺序);
  • 5、测试用例的skip和xfail处理;
  • 6、可以很好的和CI工具结合,例如jenkins。

编写规则

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

快速示例

test_pyexample.py

import pytest

class TestClass:
        def test_one(self):
            x = "this"
            assert 'h' in x

        def test_two(self):
            x = "hello"
            assert hasattr(x, 'check')

        def test_three(self):
            a = "hello"
            b = "hello world"
            assert a in b

通过命令行运行:

  • 1、cd 到代码所在的目录,执行命令:py.test test_pyexample.py;
  • 2、安装pytest-sugar插件可以看到进度条。

Pycharm配置运行:

1.file->Setting->Tools->Python Integrated Tools->项目名称->Default test runner->选择py.test。

import pytest

class TestClass:
        def test_one(self):
            x = "this"
            assert 'h' in x

        def test_two(self):
            x = "hello"
            assert hasattr(x, 'check')

        def test_three(self):
            a = "hello"
            b = "hello world"
            assert a in b

if __name__ == "__main__":
    pytest.main('-q test_class.py')

Console常用参数介绍:

  • -v 用于显示每个测试函数的执行结果
  • -q 只显示整体测试结果
  • -s 用于显示测试函数中print()函数输出
  • -x, –exitfirst, exit instantly on first error or failed test
  • -m 只运行带有装饰器配置的测试用例
  • -h 帮助
py.test
py.test test_mod.py
py.test somepath
py.test -k stringexpr

py.test test_mod.py::test_func

pytest参数化

使用装饰器:@pytest.mark.parametrize()。
单个参数:

import pytest
import random

@pytest.mark.parametrize('x',[(1),(2),(6)])

def test_add(x):
    print(x)
    assert  x==random.randrange(1,7)

多个参数:

import pytest

@pytest.mark.parametrize('x,y',[
    (1+2,3),
    (2-0,1),
    (6*2,12),
    (10*2,3),
    ("test","test"),
])

def test_add(x,y):

    assert  x==y

控制测试运行顺序
安装pytest-ordering:

pip install pytest-ordering

借助于装饰器@pytest.mark.run(order=1)控制测试运行的顺序。

import pytest
import time

value=0
@pytest.mark.run(order=2)
def test_add2():
    print("I am 2")
    time.sleep(2)
    assert value==10

@pytest.mark.run(order=1)
def test_add():
    print("I am add")
    global value
    value=10
    assert value==10

运行后生成测试报告(htmlReport)
安装pytest-html:

pip install -U pytest-html

如何使用:

py.test test_pyexample.py --html=report.html

更详细的测试报告

安装 pytest-cov:

pip install pytest-cov

如何使用

py.test --cov-report=html --cov=./ test_code_target_dir
Console参数介绍
--cov=[path], measure coverage for filesystem path (multi-allowed), 指定被测试对象,用于计算测试覆盖率
--cov-report=type, type of report to generate: term, term-missing, annotate, html, xml (multi-allowed), 测试报告的类型
--cov-config=path, config file for coverage, default: .coveragerc, coverage配置文件
--no-cov-on-fail, do not report coverage if test run fails, default: False,如果测试失败,不生成测试报告
--cov-fail-under=MIN, Fail if the total coverage is less than MIN. 如果测试覆盖率低于MIN,则认为失败

多进程运行

安装pytest-xdist:

pip install -U pytest-xdist

如何使用:

py.test test_pyexample.py -n NUM

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

重新运行失败的用例

安装pytest- rerunfailures:

import random

def add(x,y):
    return x+y

def test_add():
    random_value=random.randint(2,7)
    print('random_value:'+str(random_value))
    assert add(1,3)==random_value

如何使用:

  • 命令:pytest –reruns 重试次数
  • 比如:pytest –reruns 3 表示:运行失败的用例可以重新运行3次
  • 命令:pytest –reruns 重试次数 –reruns-delay 次数之间的延时设置(单位:秒)
  • 比如:pytest –reruns 3 –reruns-delay 5 表示:(译:瑞软四、地类)运行失败的用例可以重新运行3次,第一次和第二次的间隔时间为5秒钟

另外也可以通过装饰器的方式配置:

@pytest.mark.flaky(reruns=3, reruns_delay=5)

最后下面是我整理出来的一份软件测试工程师发展方向知识架构体系图。

全功能Python测试框架:Pytest的基本使用

希望大家能在这个成长过程中收益良多。可以说,这个过程会让你痛不欲生,但只要你熬过去了。以后的生活就轻松很多。正所谓万事开头难,只要迈出了第一步,你就已经成功了一半,古人说的好”不积跬步,无以至千里。”等到完成之后再回顾这一段路程的时候,你肯定会感慨良多。

由于CSDN上传图片大小有限,有需要的朋友可以关注我的公众号:程序员二黑,回复1,即可获取原图。

下面是一份配套的软件测试资源包:

全功能Python测试框架:Pytest的基本使用
上面是一些配套资源,这些资源对于软件测试的的朋友来说应该是最全面最完整的备战仓库,为了更好地整理每个模块,我也参考了很多网上的优质博文和项目,力求不漏掉每一个知识点,很多朋友靠着这些内容进行复习,拿到了BATJ等大厂的offer,这个仓库也已经帮助了很多的软件测试的学习者,希望也能帮助到你。关注我的微信公众号:程序员二黑,即可免费获取!

最困难的时候,也就是我们离成功不远的时候!如果你不想再体验一次自学时找不到资料,没人解答问题,坚持几天便放弃的感受的话,可以加入我们的群:785128166 大家一起讨论交流学习。

如果您觉得文章还不错,请 点赞、分享、在看、收藏 一下,因为这将是我持续输出更多优质文章的最强动力!

精彩推荐

在职阿里6年,一个29岁女软件测试工程师的心声

拒绝B站邀约,从月薪3k到年薪47W,我的经验值得每一个测试人借鉴

公司新来的阿里p8,看了我做的APP和接口测试,甩给了我这份文档

Original: https://blog.csdn.net/weixin_54696666/article/details/120415983
Author: 程序员二黑
Title: 全功能Python测试框架:Pytest的基本使用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/774342/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 010 Django ORM数据库框架

    ORM数据库框架 ORM数据库框架 Django 下配置 MySQL 创建数据库并且让 django 使用 了解什么是模型 ORM 框架 模型层示例 创建一个模型类 数据库迁移 O…

    Python 2023年6月12日
    061
  • Pyinstaller打包Django项目(耗时两天 踩坑无数 记录一下)

    背景 朋友开了个小医疗公司,平时给客户发货开出货单使用的是祖上传下来的据说花了三百大洋买的一个小软件,扯淡的是每次开完出货单,复杂流程搞完之后去仓库取货,发现仓库货用完了,想着帮忙…

    Python 2023年8月5日
    057
  • 使用Flask+mysql开发一套自己的搜索引擎(附源码)

    使用Flask+mysql开发一套自己的搜索引擎(附源码) 前言 主要是针对在内网办公的朋友,可以把这一套部署到单机或者公司服务器,做一些名词查询、语言翻译的功能,如果需要的话可以…

    Python 2023年8月12日
    060
  • Python画正方体

    文章目录 * – 画个立方体 – 做个魔方 – 八叉树示意图 画个立方体 在 matplotlib中,通过 plt.voxels绘制立方体,下面…

    Python 2023年8月31日
    053
  • 我的硕士前半生

    本篇文章属于随笔类,它可能无法对你起到直接帮助,它只是我这个普通学生一年半以来的一些足迹与思考。本文首发于我的个人博客 Forever Young 我的本科像硕士,有实验室有工位,…

    Python 2023年11月5日
    050
  • 送你一个Python 数据排序的好方法

    摘要:学习 Pandas排序方法是开始或练习使用 Python进行基本数据分析的好方法。最常见的数据分析是使用电子表格、SQL或pandas 完成的。使用 Pandas 的一大优点…

    Python 2023年8月7日
    042
  • ChatGPT面试阿里P6测试开发岗能过吗?

    啊哦~你想找的内容离你而去了哦 内容不存在,可能为如下原因导致: ① 内容还在审核中 ② 内容以前存在,但是由于不符合新 的规定而被删除 ③ 内容地址错误 ④ 作者删除了内容。 可…

    Python 2023年11月4日
    030
  • python词云详细教程

    import wordcloudimport jiebafrom PIL import Imageimport numpy as npimport matplotlib.pyplo…

    Python 2023年9月6日
    030
  • 你给文字描述,AI艺术作画,精美无比!附源码,快来试试!

    💡 作者:韩信子@ShowMeAI📘 深度学习实战系列:https://www.showmeai.tech/tutorials/42📘 TensorFlow 实战系列:https:…

    Python 2023年10月25日
    036
  • 06 接口测试平台 前端登录接口对接

    别人写的平台再垃圾,也是用来淘汰你的。 代码更新地址:https://github.com/ahu965/api-automator.git Python环境没有的,请自行安装,本…

    Python 2023年8月6日
    067
  • Python 封装zabbix-get接口调用

    Zabbix 是一款强大的开源网管监控工具,该工具的客户端与服务端是分开的,我们可以直接使用自带的 zabbix_get命令来实现拉取客户端上的各种数据,在本地组装参数并使用Pop…

    Python 2023年5月25日
    056
  • .NET混合开发解决方案16 管理WebView2的用户数据

    🚀 优质资源分享 🚀 学习路线指引(点击解锁)知识定位人群定位🧡 Python实战微信订餐小程序 🧡 进阶级本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯…

    Python 2023年8月12日
    051
  • selenium+python爬虫全流程教程

    python+selenium爬虫全流程详解 selenium+python爬虫简介 * selenium测试脚本 python+selenium 模拟浏览器—-以ch…

    Python 2023年8月1日
    041
  • educoder Matplotlib图形配置——设置注释

    Matplotlib图形配置——设置注释 任务描述 相关知识 添加注释 文字、坐标变换 编程要求 测试说明 任务描述 本关任务:掌握 matplotlib设置注释的几种方法和文字坐…

    Python 2023年8月31日
    074
  • [深度学习项目] – 时间序列预测 (2)

    文章目录 abstract 可视化 读入数据 * 简单时序图 季节性时序图 季节性箱线图 趋势箱线图 时序的主要成分 statsmodels 安装 周期检验 STL算法介绍 Hom…

    Python 2023年8月7日
    055
  • Python 你可能从未听说过的5种隐藏技巧

    1. … 对象 没错,你没看错,就是 … 在Python中…代表着一个名为 Ellipsis 的对象。根据官方说明,它是一个特殊值,通常可以作为…

    Python 2023年8月28日
    034
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球