码迷,mamicode.com
首页 > 编程语言 > 详细

python pytest测试框架介绍三

时间:2017-09-05 09:57:19      阅读:228      评论:0      收藏:0      [点我收藏+]

标签:用例   jpg   http   方法   param   resources   项目   targe   disco   

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

1、pytest fixture实例1

代码如下

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

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

 

2、pytest fixture实例2

代码如下

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

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

技术分享

可以看出测试用例继承了用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功能,后续再介绍

 

python pytest测试框架介绍三

标签:用例   jpg   http   方法   param   resources   项目   targe   disco   

原文地址:http://www.cnblogs.com/landhu/p/7462999.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!