pytest测试框架的基本使用与介绍

news2024/11/16 13:22:00

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 # run all tests below current dir
py.test test_mod.py # run tests in module file test_mod.py
py.test somepath # run all tests below somepath like ./tests/
py.test -k stringexpr # only run tests with names that match the
# the "string expression", e.g. "MyClass and not method"
# will select TestMyClass.test_something
# but not TestMyClass.test_method_simple
py.test test_mod.py::test_func # only run tests that match the "node ID",
# e.g "test_mod.py::test_func" will be selected
# only run test_func in test_mod.py

 

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):   #必须与上面保持一致,只能用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) #后执行order=2
def test_add2():
    print("I am 2")
    time.sleep(2)
    assert value==10
 
@pytest.mark.run(order=1)   #先执行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)

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

 

 这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/728783.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Jenkins---jenkins生成Allure报告

目录 前言 Allure插件安装 生成Allure报告 遇到的问题 总结: 前言 前几天介绍了如何生成html报告,目前绝大部分公司都是用的allure报告,那么今天也介绍下如何通过jenkins生成allure报告。 Allure插件安装 jenkins中存在支持allure报告…

Pytorch从入门到精通:一、准备工作与查询函数

之前虽然做了不少计算机视觉的项目,但是如果让我从0还是用Pytorch开始写的话还是有一点难度。原因就在于没有系统的学习Pytorch,对于里面的不少模块都只知道使用,不知道原理,知道它能工作,但是不知道怎么样工作的。所以…

QT - 20230707

登录界面练习 #include "loginwindow.h"QIcon fetchIconWithName(QString name) {QString res "../login/images/" name;return QIcon(res); }LoginWindow::LoginWindow(QWidget *parent): QMainWindow(parent) {this->resize(600, 800);this->se…

小红书私信软件:把微信二维码联系方式隐藏在图片中推广引流找客源

小红书私信软件:把微信二维码联系方式隐藏在图片中推广引流找客源,小红书还能这么玩?小红书暑期聊天功能上新了,共享收藏夹、斗图神器,暑期表情,笔记表态....快去和好友一起解锁新功能吧! #小红书 最近发现…

YOLOv5-第Y1周:调用官方权重进行检测

YOLOv5-第Y1周:调用官方权重进行检测 YOLOv5-第Y1周:调用官方权重进行检测一、前言二、我的环境三、下载源码四、运行代码五、视频检测八、总结 YOLOv5-第Y1周:调用官方权重进行检测 一、前言 🍨 本文为🔗365天深度学…

【Redis-工具类】自定义Redis工具类并使用其进行简单操作

【Redis-工具类】自定义Redis工具类并使用其进行简单操作 1)自定义 Redis 工具类2)工具类的简单使用 1)自定义 Redis 工具类 package gaei.cn.x5l.x5lhive2cos.utils;import gaei.cn.x5l.x5lhive2cos.CosDataBackupHistory; import gaei.cn.…

AI智能化数据分析,赋能文旅直播发展新赛道

一、文旅直播发展背景 近期,旅游业市场呈现火热态势。暑期旅游市场预计迎来新一轮旅游小高峰,旅游业进入结构性复苏新阶段。而随着社交媒介的普及与旅游直播的兴起,全国多地文旅“出圈”形成热议。 对于文旅产业发展来说,高品质…

【如何在工作中保持稳定的情绪 --- 保持稳定情绪的7个工作技巧】

导语: 在现代工作环境中,保持稳定的情绪是一项至关重要的技能。当我们遇到挑战、压力和严峻的工作条件时,情绪的稳定性对于我们的工作效率和心理健康至关重要。本文将分享七个实用的工作技巧,帮助你保持稳定的情绪并提升工作质量…

面对chatGPT,冷静比鸡血更重要!

这段时间 chatGPT 也算是疯狂的吸引眼球了。 看起来广告费没白花,不管说的对不对,反正说它一定要用**“颠覆”“天花板”“惊艳”“抢大多数人的饭碗”**之类的词。 再大一点的描述就是:留给人类的时间不多了。扼腕叹息、杞人类生存空间而忧…

springboot项目开启https协议

1、在windows以管理员身份运行cmd,输入如下命令生成证书 keytool -genkey -alias myhttps -keyalg RSA -keysize 2048 -validity 36500 -keystore "D:/tmp/ssl/myhttps.keystore"注释 命令:keytool -genkey -alias testhttps -keyalg RSA -keysize 204…

蓝牙资讯|苹果Beats Studio Pro耳机曝光,支持苹果和谷歌的查找功能

国外科技媒体9to5Mac曝光苹果Beats Studio Pro耳机,这款耳机配备了 2 个定制的 40 毫米驱动单元,即便是在最高音量下,也能确保不会失真。Beats Studio Pro 还将配备集成的数字处理器,该处理器“优化最终频率响应,以获得…

Jetpack 架构组件你了解多少?

本文是我在学习Jetpack的过程中做的一些记录,如有错误,欢迎指正 本文包含了 ViewModel、Lifecycles、LiveData、Room、WorkManager 的相关用法,你可以通过目录直接跳转到你想了解的地方 ViewModel 简单介绍下 ViewModel:ViewMode…

DataWhale: LLM+KG

https://mp.weixin.qq.com/s/MIi1WrAwfmqnXGlkQq8DqQ

硬件性能 - 网络瓶颈分析

简介 本文章主要通过Linux命令查看网络信息、判断是否出现网络瓶颈等简单分析方法。 目录 1. 监控命令 sar 2. 带宽利用率 3. 网络延迟 4. 网络连接数 5. 模拟网络故障 1. 监控命令 sar sar 命令实时查看网络情况(详细命令:Linux性能监控命令_sar …

靠着这份 Java 面试题跟答案,我从 14K 变成了 28K!

LZ 认为,对于 Java 面试以及进阶的最佳学习方法莫过于刷题博客书籍总结,前三者 LZ 将淋漓尽致地挥毫于这篇文章中,至于总结在于个人,实际上越到后面你会发现面试并不难,其次就是在刷题的过程中有没有去思考&#xff0c…

【QT】——事件处理系统

目录 1.事件介绍 2.QT事件的产生 3.事件处理函数 3.1鼠标事件 3.2键盘事件 3.3窗口重绘事件 3.4窗口关闭事件 3.5窗口大小变化事件 4. 重写事件处理函数 1.事件介绍 QT 程序是事件驱动的, 程序的每个动作都是由内部某个事件所触发。QT 事件的发生和处理 成为程序运行的…

数据质量管理之ETL中的挑战与解决方案

摘要:在数据驱动的时代,数据质量管理是企业成功的关键因素之一。在ETL(Extract, Transform, Load)过程中,数据质量问题可能会导致数据失真、决策错误和业务损失。本文将探讨ETL中常见的数据质量挑战,并提供…

CSS入门.

目录 基础入门基础语法 1.基础入门 什么是 CSS CSS 指层叠样式表(Cascading Style Sheets)样式通常存储在样式表中 为什么要使用 CSS 样式定义如何显示 HTML 元素为了解决内容与表现分离的问题主要目的:可以让相同的一个页面在不同的浏…

linux服务配置ssh免密

一、常用场景 1、我们经常使用scp命令在两台不同服务器之间进行文件传输,但每执行一次scp命令时,都需要输入一次密码;使用ssh命令远程连接另一台服务器时,也需要输入密码。频繁输入密码比较麻烦,ssh可帮助我们在两台服…

【python】array数组添加一行或一列数据

目录 0.环境 1.背景 2.具体实现 2.1思路 2.2具体实现 2.2.1 增加一列 2.2.2增加一行 3. 完整代码 0.环境 windows jupyter notebook跑代码 1.背景 在实现数据可视化的时候,用了numpy的array类型的数组,需要手动在最后增加一列数据,所以…