百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

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

ccwgpt 2024-11-02 11:01 24 浏览 0 评论

前言

小编发现大家好像很喜欢pytest的内容,那么今天呢小编想好好的给大家介绍一下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 # 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)

好了,今天的分享就到这里了,各位大佬可以帮忙多多点赞和收藏,喜欢我的可以关注我哟。

相关推荐

Java都要学习什么东西?Java框架技术为什么很重要?

虽然我们入职的岗位是Java工程师,但是你只会Java语音是行不通的,至少要掌握Java、web、MySQL、Spring这四门技术。好程序员来简单说一下这四门技术是什么,掌握这些技术有什么重要性?...

阿里P8大牛耗费三年整理的:Java架构之完美设计实战PDF

前言做学问就像爬山,从山脚出发的人很多,能爬到山顶的却寥寥无几。有些人爬得很快,到达半山腰就盖了一所房子住在那里,对爬向山顶没有太大的兴趣。而能够登顶的人,除了要具备必要的技能外,更要有坚强的毅力,不...

会这些BATJ随你进(batj指哪四家公司)

为了方便同学们之后的面试复习,我把各类面试题给汇总了一下,每道题都是经过自己筛选后觉得需要掌握的,此次整理包括Java、数据结构与算法、计算机网络、操作系统、数据库等。后面我会把这些问题的解答陆续放...

Java七大热门技术框架源码解析(完结)

获课》weiranit.fun/5699/Java七大热门技术框架源码解析(完结)在Java开发领域,掌握热门技术框架的源码对于开发者进阶至关重要。这不仅能加深对框架运行机制的理解,更有助于...

Java 7种类类型,新手必备(java的类别)

今天给老婆整理了一下Java的几种类类型,希望她能对类的基本情况增加一些了解。1、接口(interface)接口是一个定义了方法规范(返回值、方法名、参数)的类,一般情况下不实现具体逻辑(在JDK1....

那些Java架构师必知必会的技术(java架构从入门到架构师)

Java基础#Java对象的内存布局MapStruct解了对象映射的毒周末我把HashMap源码又过了一遍Java7和Java8中的ConcurrentHashMap原理解析Java中自定...

年末将至,Java 开发者必须了解的 15 个Java 顶级开源项目

专注于Java领域优质技术,欢迎关注作者:SnailClimbStar的数量统计于2019-12-29。1.JavaGuideGuide哥大三开始维护的,目前算是纯Java类型项目中Sta...

20多个好用的 Vue 组件库,请查收

在本文中,我们将探讨一些最常见的vuejs组件。你可以收藏一波。VueTables-2地址:https://github.com/matfish2/vue-tables-2VueTables2...

安装Vue.js,搭建Vue环境(vue的安装步骤)

一、Vue开发环境:Node.js:javascript运行环境(runtime),不同系统直接运行各种编程语言npm::Nodejs下的包管理器webpack:Vue的模板文件。把所有浏...

推荐一个.net core web ui框架 Kendo UI

是一套使用jQuery、Angular、React或Vue框架的JavaScriptWeb应用程序的UI组件库图1先看对曲线图的绘制,上方是一个显示单元格。下面是绘制了多条线段曲线...

【推荐】2024年推荐的6款开源免费 Vue 后台管理系统模板,建议收藏

前言在现今的软件开发领域,Vue.js凭借其高效、灵活和易于上手的特性,成为了前端开发的热门选择。对于需要快速搭建企业级后台管理系统的开发者而言,使用现成的Vue后台管理系统模板无疑是一个明智之举。本...

迈向群体智能 | 智源发布首个跨本体具身大小脑协作框架

允中发自凹非寺量子位|公众号QbitAI3月29日,智源研究院在2025中关村论坛“未来人工智能先锋论坛”上发布首个跨本体具身大小脑协作框架RoboOS与开源具身大脑RoboBrain,可实...

大模型对接微信个人号,极空间部署AstrBot机器人,万事不求百度

「亲爱的粉丝朋友们好啊!今天熊猫又来介绍好玩有趣的Docker项目了,喜欢的记得点个关注哦!」引言前两天熊猫发过一篇关于如何在极空间部署AstrBot并对接QQ消息平台的文章,不过其实QQ现在已经很少...

Seata,让分布式事务不再是难题!实战分享带你领略Seata的魅力!

终身学习、乐于分享、共同成长!前言Seata是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata将为用户提供了AT、TCC、SAGA和XA事务模式,为用户打造一站式的...

常见分布式事务解决方案(分布式事务解决的问题)

1.两阶段提交(2PC)原理:分为准备阶段(协调者询问参与者是否可提交)和提交阶段(协调者根据参与者反馈决定提交或回滚)。优点:强一致性,适用于数据库层(如XA协议)。缺点:同步阻塞:所有参与者阻塞...

取消回复欢迎 发表评论: