当前位置: 首页 > news >正文

四川省住房建设厅官方网站/百度网盘搜索入口

四川省住房建设厅官方网站,百度网盘搜索入口,网站建设实习小结,微信小程序店铺怎么弄1. 概述 Pytest的fixture功能灵活好用,支持参数设置,便于进行多用例测试,简单便捷,颇有pythonic。 如果要深入学习pytest,必学fixture。 fixture函数的作用: 2. 使用 完成setup和teardown操作&#xff0c…

1. 概述

Pytest的fixture功能灵活好用,支持参数设置,便于进行多用例测试,简单便捷,颇有pythonic。
如果要深入学习pytest,必学fixture。

fixture函数的作用:

 

2. 使用

 

  • 完成setup和teardown操作,处理数据库、文件等资源的打开和关闭
  • 完成大部分测试用例需要完成的通用操作,例如login、设置config参数、环境变量等
  • 准备测试数据,将数据提前写入到数据库,或者通过params返回给test用例,等

2.1. 简介

把一个函数定义为Fixture很简单,只能在函数声明之前加上“@pytest.fixture”。其他函数要来调用这个Fixture,只用把它当做一个输入的参数即可 多个fixture方法,可以互相调用,最好不要递归哈(没试过,有兴趣的童鞋可以试试)

2.2. 使用方式

  • 一个test函数可以包含多个fixture参数
  • fixture作用域:fixture可以修饰单个函数,单个或多个类的成员函数,单个类

下面来介绍pytest特有的方式来写用例

 

1、pytest fixture实例1

代码如下

from __future__ import print_function
import pytest@pytest.fixture()
def resource_a():print(‘\nresources_a() "setup"‘) def test_1_that_needs_resource_a(resource_a):print(‘test_1_that_needs_resource_a()‘)def test_2_that_does_not():print(‘\ntest_2_that_does_not()‘)def test_3_that_does(resource_a):print(‘test_3_that_does()‘)

使用-s -v运行查看详情如下

技术分享

可以看出测试用例继承了用pytest.fixture的函数后,都执行了setup的功能,默认的pytest.fixture是function

2、代码示例2

代码如下

from __future__ import print_function
import pytest@pytest.fixture(scope=‘module‘)
def resource_a_setup(request):print(‘\nresources_a_setup()‘)def resource_a_teardown():print(‘\nresources_a_teardown()‘)request.addfinalizer(resource_a_teardown)def test_1_that_needs_resource_a(resource_a_setup):print(‘test_1_that_needs_resource_a()‘)def test_2_that_does_not():print(‘\ntest_2_that_does_not()‘)def test_3_that_does(resource_a_setup):print(‘\ntest_3_that_does()‘)

使用-s -v运行查看详情如下

技术分享

 

pytest 首先寻找test_ 前缀开头的函数,找到test_1_that_needs_resource_a()函数,然后发现该函数需要一个名为resource_a_setup的参数,就会去寻找有@pytest.fixture标记的名称为resource_a_setup的函数,并构造一个fixture object传递给该测试函数,之后执行测试函数。 函数参数化是一种依赖注入的思想。 

3、使用pytest.fixture的几种方法

在写用例时,有几种方法使用pytest.fixture来形成框架,

方法一:


就是上面提到的这种方法,如下

@pytest.fixture()
def before():print(‘\nbefore each test‘)def test_1(before):print(‘test_1()‘)def test_2(before):print(‘test_2()‘)

方法二:使用fixture修饰:@pytest.mark.usefixtures('fixture1','fixture2')标记测试函数或类

 

@pytest.fixture()
def before():print(‘\nbefore each test‘)@pytest.mark.usefixtures("before") 
def test_1():print(‘test_1()‘)@pytest.mark.usefixtures("before") 
def test_2():print(‘test_2()‘)

标红的就是修饰器

在fixture object对象使用完以后会有一个destroy 过程,如果想要在destroy过程中进行一些特殊的操作,可以给fixture 函数增加一个request对象,然后定义一个包含你想要执行的操作的函数,调用request的addfinalizer(funct_name)方法来把该函数注册到这个fixture object中。 
可以看一个示例:

@pytest.fixture(scope="module")
def smtp(request):
    smtp = smtplib.SMTP("merlinux.eu")
    def fin():
        print ("teardown smtp")
        smtp.close()
    request.addfinalizer(fin)
    return smtp  # provide the fixture value
 

4、指定fixture作用范围

fixture包含一个scope的可选参数,用于控制fixture执行配置和销毁逻辑的频率。
@pytest.fixture()的scope参数有四个值:
scope='function'
函数级别的fixture每个测试函数 只运行一次。配置代码在测试用例运行之前运行,销毁代码在测试用例运行之后执行。function是fixture参数的默认值。
scope='class'
类级别的fixture每个测试类只运行一次,不管测试类中有多少个类方法都可以共享这个fixture
scope='module'
模块级别的fixture每个模块只运行一次,不管模块里有多少个测试函数,类方法或其他fixture都可以共享这个fixture
scope='session'
会话级别的fixture每次会话只运行一次。一次pytest会话中的所有测试函数、方法都可以共享这个fixture

 

 如下一个用module例子

@pytest.fixture(scope=‘module‘)
def resource_a():print(‘\nresources_a() "setup"‘)def test_1_that_needs_resource_a(resource_a):print(‘test_1_that_needs_resource_a()‘)def test_2_that_does_not():print(‘\ntest_2_that_does_not()‘)def test_3_that_does(resource_a):print(‘test_3_that_does()‘)

即使我们在每个用例都继承了resource_a,但在实际测试中,所有用例只执行了一次resource_a

技术分享

这时,你可能会问,为什么只有setup功能,没有teardown功能,要teardown怎么写,方法如下:

def cheese_db(request):.....def teardown():print(‘\n[teardown] cheese_db finalizer, disconnect from db‘)request.addfinalizer(teardown)

这里使用的还是之前介绍的request.addfinalizer功能,函数名字可以任意取,不一定要teardown

 

5、带参数的fixture

这里就不介绍了,看官方文档吧

6、多种fixture scope结合使用

看代码,如下

@pytest.fixture(scope="module")
def foo(request):print(‘\nfoo setup - module fixture‘)def fin():print(‘foo teardown - module fixture‘)request.addfinalizer(fin)@pytest.fixture()
def bar(request):print(‘bar setup - function fixture‘)def fin():print(‘bar teardown - function fixture‘)request.addfinalizer(fin)@pytest.fixture()
def baz(request):print(‘baz setup - function fixture‘)def fin():print(‘baz teardown - function fixture‘)request.addfinalizer(fin)def test_one(foo, bar, baz):print(‘in test_one()‘)def test_two(foo, bar, baz):print(‘in test_two()‘)

测试结果如下

技术分享

 

参考文档:https://blog.csdn.net/hit_zhouyou/article/details/45100265

https://www.jianshu.com/p/552c3f1e9946

http://www.bubuko.com/infodetail-2292746.html

http://www.jmfq.cn/news/5281579.html

相关文章:

  • 房县建设局网站/新闻最新热点
  • wordpress无法安装这个包/上海seo优化外包公司
  • 南宁培训网站建设/seo权重优化
  • 湖北省建筑信息平台/seo排名工具给您好的建议下载官网
  • 长沙南站建站/企点官网
  • 网站备案经验/windows优化大师怎么样
  • 奉新网站建设/济南seo快速霸屏
  • php仿博客园网站/海外短视频软件
  • 公司网站建设费用多少/漯河网络推广哪家好
  • 网站建设毕业论文/最新消息
  • asp网站开发的实训/微信营销案例
  • 福州网站建设方案书/网络服务包括
  • 义乌网站建设联系方式/seo的主要内容
  • 金融投资网站模板/百度免费推广方法
  • 做网站中二级导航链接到一级导航/免费b站推广网站短视频
  • vs哪个版本做网站好/seo免费推广软件
  • 网站建设基本流程视频/青岛seo精灵
  • 政府网站和政务新媒体建设管理/知乎seo优化
  • 做网站代下/上海网站推广排名公司
  • 腾讯云网站建设/简单网页制作
  • 一次性付费做网站/网站推广的10种方法
  • 微网站外链/互联网推广与营销
  • 做去态网站要学java吗/推广有什么好方法
  • 印刷厂网站模板/怎样免费推广自己的网站
  • php学多久可以做网站/企业品牌推广方案
  • 奢侈品b2c电商网站建设/北京网络营销推广外包
  • dw怎么用div css做网站/外贸seo网站
  • 上海门户网站制作/百度收录申请
  • 上海实时新闻/云优化软件
  • 网站建设的基本步骤是哪些/推广下载