python测试4_Python 各种测试框架简介(四):pytest

pytest 有时也被称为 py.test,是因为它使用的执行命令是 $ py.test。本文中我们使用 pytest 指代这个测试框架,py.test 特指运行命令。

##较于 nose

这里没有使用像前三篇一样(简介-举例-discovery-环境)式的分段展开,是因为 pytest 与 nose 的基本用法极其相似。因此只做一个比较就好了。他俩的区别仅在于

调用测试的命令不同,pytest 用的是 $ py.test

创建测试环境(setup/teardown)的 api 不同

下面使用一个例子说明 pytest 的 setup/teardown 使用方式。

some_test.py:

lang:python

import pytest

@pytest.fixture(scope='function')

def setup_function(request):

def teardown_function():

print("teardown_function called.")

request.addfinalizer(teardown_function)

print('setup_function called.')

@pytest.fixture(scope='module')

def setup_module(request):

def teardown_module():

print("teardown_module called.")

request.addfinalizer(teardown_module)

print('setup_module called.')

def test_1(setup_function):

print('Test_1 called.')

def test_2(setup_module):

print('Test_2 called.')

def test_3(setup_module):

print('Test_3 called.')

pytest 创建测试环境(fixture)的方式如上例所示,通过显式指定 scope='' 参数来选择需要使用的 pytest.fixture 装饰器。即一个 fixture 函数的类型从你定义它的时候就确定了,这与使用 @nose.with_setup() 十分不同。对于 scope='function' 的 fixture 函数,它就是会在测试用例的前后分别调用 setup/teardown。测试用例的参数如 def test_1(setup_function) 只负责引用具体的对象,它并不关心对方的作用域是函数级的还是模块级的。

有效的 scope 参数限于:'function','module','class','session',默认为 function。

运行上例:$ py.test some_test.py -s。 -s 用于显示 print() 函数

============================= test session starts =============================

platform win32 -- Python 3.3.2 -- py-1.4.20 -- pytest-2.5.2

collected 3 items

test.py setup_function called.

Test_1 called.

.teardown_function called.

setup_module called.

Test_2 called.

.Test_3 called.

.teardown_module called.

========================== 3 passed in 0.02 seconds ===========================

这里需要注意的地方是:setup_module 被调用的位置。

##pytest 与 nose 二选一

首先,单是从不需要使用特定类模板的角度上,nose 和 pytest 就较于 unittest 好出太多了。doctest 比较奇葩我们在这里不比。因此对于 “选一个自己喜欢的测试框架来用” 的问题,就变成了 nose 和 pytest 二选一的问题。

pythontesting.net 的作者非常喜欢 pytest,并表示

pytest 赛高,不服 solo

好吧,其实他说的是 “如果你挑不出 pytest 的毛病,就用这个吧”。

于是下面我们就来挑挑 pytest 的毛病:

它的 setup/teardown 语法与 unittest 的兼容性不如 nose 高,实现方式也不如 nose 直观

第一条足矣

毕竟 unittest 还是 Python 自带的单元测试框架,肯定有很多怕麻烦的人在用,所以与其语法保持一定兼容性能避免很多麻烦。即使 pytest 在命令行中有彩色输出让我很喜欢,但这还是不如第一条重要。

实际上,PyPI 中 nose 的下载量也是 pytest 的 8 倍多。

所以假如再继续写某一个框架的详解的话,大概我会选 nose 吧。

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

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

相关文章

在Eigrp做不等值路由的负载均衡

在Eigrp做不等值路由的负载均衡 EIGRP Load Balancing 每个路由协议都支持等值路径的负载均衡.除此之外,IGRP和EIGRP也支持不等值路径的负载均衡,使用variance命令. Variance命令向路由器通告一个n值,n值使用variance命令指定.n值为1-128之间,默认为1。 网络拓扑 Va…

雪花算法Snowflake

雪花Id生成算法,是鼎鼎有名的分布式Id生成算法。它的优点在于,在分布式系统中快速生成有时间顺序的唯一编号!Snowflake实测每秒可生成900万个唯一Id。Nuget包:NewLife.Core源码地址:https://github.com/NewLifeX/X/blo…

java爬取新浪微博登陆_30行jsoup代码搞定新浪微博登录抓取爬虫

主要是设置cookies 想知道方法的朋友可以留言哦爬虫问题都可以探讨哦import java.io.IOException;import java.util.HashMap;import java.util.Map;import org.jsoup.Connection;import org.jsoup.Connection.Method;import org.jsoup.Jsoup;import org.jsoup.nodes.Document;p…

像小猪佩奇那样生活,需要多少钱?

每个有娃的家庭,几乎都有一个小猪佩奇的超级粉丝《小猪佩奇》(又名《粉红猪小妹》)史上最赚钱的英国学前电视动画片动画之一有网友从经济的角度算了笔账像佩奇一家那样生活需要多少钱呢?▼这是佩奇的家,视野相当不错的…

几何画板自定义工具_几何画板最强版 v5.06 中文版(含教程/实例/控件/打包机/工具集)...

相信还有很多地方的网课没有结束,前两天有小伙伴在后台留言求几何画板,这款软件大都收费,所以小软公然发到这里怕是不太稳妥,如果被删除就是被举报啦,需要的小伙伴速度下载保存~几何画板英文名:Sketchpad&a…

解惑3G业务

内容简介: 本书系统地介绍了第三代移动通信系统的业务,主要从业务概念、业务实现流程、关键技术、关键问题以及解决问题的思路几个角度进行介绍。本书内容包括:通信业务发展整体分析、3G的移动视频业务、基于SIP的移动“邀请”业务、移动位置…

Delphi 26 岁

喜欢就关注我们吧!诞生于1995年的 Delphi 现在已经 26 岁了。1995年2月14日,Borland 公司推出了面向开发者的新工具——Delphi,旨在接替 DOS 时代盛行一时的 Turbo Pascal。说到这两款产品必然离不开它们的灵魂人物——Anders Hejlsberg&…

row number函数_Hive排名函数ROW_NUMBER,RANK 和 DENSE_RANK的区别

需求描述:分析最近三个月每天排名前30的邮箱收件数量。涉及到的表字段:发件时间,收件人。一、ROW_NUMBER表t查询出了3月每天不同类型邮箱收件量的降序排名,表t1通过ROW_NUMBER函数给每行数据添加序列号,select ROW_NUM…

在U盘上安装linux

所谓在U盘上安装Linux,就是在U盘上放置一些文件,可以让电脑从U 盘启动linux(需要电脑支持从U盘启动)。这篇教程简单说一下怎么在U盘上安装DSL。主要是这个发行版小,50M左右,而且包含了该有的很多软件。前提…

java中的console是干什么的_[Java教程]javascript中,你真的会用console吗?

[Java教程]javascript中,你真的会用console吗?0 2015-08-11 17:00:09使用console进行性能测试和计算代码运行时间对于前端开发人员,在开发过程中经常需要监控某些表达式或变量的值,如果使用用debugger会显得过于笨重,最…

边缘计算k8s集群之SuperEdge

什么是边缘计算边缘计算,是指在靠近物或数据源头的一侧,采用网络、计算、存储、应用核心能力为一体的开放平台,就近提供最近端服务。其应用程序在边缘侧发起,产生更快的网络服务响应,满足行业在实时业务、应用智能、安…

python中getrandbits函数用法_python random - 刘江的python教程

random阅读: 8288评论:1random模块用于生成伪随机数。真正意义上的随机数(或者随机事件)是按照实验过程中表现的分布概率随机产生的,其结果是不可预测的。而计算机中的随机数是所谓的随机函数按照一定算法模拟产生的,其结果是确定的&#xff…

让你的系统移动起来

最近一直在捣鼓linux系统,听一大哥说想搞好它,最简单的方法就是经常用,用的久了也就自然简单了。。就跟我们用windows一样。。在linux系统里,我最喜欢的是Ubuntu。。个人感觉它做的还不错,有丰富的三方软件支持&#x…

java一个界面用另一个界面的值_如何将参数/值从一个弹出窗口传递到Angular2中的另一个弹出窗口...

我在Angular2中有一个要求,我需要打开第一个弹出窗口,用户会输入一些值 . 在某些用户事件(即按钮单击)上,我需要关闭该弹出窗口并打开另一个弹出窗口,其中包含用户在第一个弹出窗口中输入的值 .我创建了一个plunker,我…

简约而不简单的 Django 新手图文教程

来源:cizixssegmentfault.com/a/1190000008387882本文面向:有python基础,刚接触web框架的初学者。环境:windows7,python3.5.1,pycharm专业版,Django 1.10版,pip3一、Django简介百度百…

通俗系列之同步、异步、阻塞和非阻塞

前言在日常的开发中,经常出现同步、异步、阻塞和非阻塞等概念。有些人搞不清楚什么代码是同步,什么代码是异步。有些人说我用异步了啊,为什么效率还是没提高呢?也许你是用异步了,但是可能是异步阻塞了。有些人一听说异…

python的matplotlib库内的函数_如何在matplotlib中找到函数下面的区域?

我是python和matplotlib库的新手,我试图在绘图中得到函数行下方的区域。我有一个变量a&b,它在我的绘图中移动一个矩形。我也许可以使用原始数学来解决这个问题,但我想知道是否有一种更简单的方法来实现我正在尝试使用matp…

局域网一点通之组网、管网、用网1000问

(51cto.com)局域网一点通之组网、管网、用网1000问转载于:https://blog.51cto.com/laowu2517/241359

【直观详解】支持向量机SVM

【阅读时间】13min - 19min【内容简介】详解解读什么是支持向量机,如何解支持向量以及涉及的拉普拉斯乘子法,还有核方法的解读。1什么是支持向量机-SVM支持向量机-SVM(Support Vector Machine)从本质来说是一种:用一条线(方程&…

C# 打印PDF文档的10种方法

操作PDF文档时,打印是常见的需求之一。针对不同的打印需求,可分多种情况来进行,如设置静默打印、指定打印页码范围和打印纸张大小、双面打印、黑白打印等等。经过测试,下面将对常见的几种PDF打印需求做一些归纳总结,这…