博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python pytest测试框架介绍三
阅读量:6084 次
发布时间:2019-06-20

本文共 3173 字,大约阅读时间需要 10 分钟。

之前介绍了pytest以xUnit形式来写用例,下面来介绍pytest特有的方式来写用例

1、pytest fixture实例1

代码如下

from __future__ import print_functionimport 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的特有的模式来写用例,使用的方式是scope方式,scope支持多种,后面会介绍

这里还使用了pytest的addfinalizer内置功能,具体可参见,用处是:在最后一个测试项目中调用teardown

 

2、pytest fixture实例2

代码如下

from __future__ import print_functionimport 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()')

这是最简单的一个例子,结果如下

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

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.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()')

标红的就是修饰器

 

4、fixture scope的范围参数

之前使用@pytest.fixture(scope='module')来定义框架,scope的参数有以下几种

  •  function   每一个用例都执行
  • class        每个类执行
  • module     每个模块执行(函数形式的用例)
  • session     每个session只运行一次,在自动化测试时,登录步骤可以使用该session

 

 如下一个用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()')

测试结果如下

 

pytest还有很有用的yield功能,后续再介绍

 

转载于:https://www.cnblogs.com/landhu/p/7462999.html

你可能感兴趣的文章
50、Toast自定义布局
查看>>
STM32F4 Timer simplified block diagram
查看>>
python安装
查看>>
poj 1979 Red and Black(dfs水题)
查看>>
javascript与java编码互转
查看>>
【C++】类的特殊成员变量+初始化列表
查看>>
pip安装使用详解
查看>>
数学 - Codeforces Round #319 (Div. 1)A. Vasya and Petya's Game
查看>>
ExtJs--02--MessageBox相关弹出窗口alert,prompt,confirm采用
查看>>
滴滴快车奖励政策,高峰奖励,翻倍奖励,按成交率,指派单数分级(9月7日~9月13日)...
查看>>
NSDictionary 键值对查找
查看>>
初步boost之pool图书馆学习笔记
查看>>
QR代码简单
查看>>
Linux内核启动流程分析(一)【转】
查看>>
Android4.3 蓝牙BLE初步
查看>>
[异常解决] vmware tools 虚拟机 --> 更新/导入wmwera tools菜单变灰,无法导入问题解决...
查看>>
lintcode :最小路径和
查看>>
【ThinkingInC++】8、说明,浅谈数据类型的大小
查看>>
js原生之设计模式开篇介绍
查看>>
Delphi文件操作函数
查看>>