pytest学习指南(三)-fixture基本使用

1.前言

        自动化测试本质属于软件测试活动中的一种方法,更多的是替代手工测试执行过程中重复的工作。所以自动测试和手工测试最大的区别在于执行测试用例的方式不一样。

        在执行测试用例前往往需要进行环境的准备。

   在unittest中一般通过 setUp与tearDown来进行用例前的环境准备和用例后的环境销毁。而在pytest中还有另外一种方式——fixture。与setup和teardown相比,fixture使用起来更加灵活,更加炫酷。

 

2.Fixture的使用

     1.基本使用--fixture与用例处在同一个文件中

import pytest
def test_2(aa):        #选择执行那个fixture
assert 2==2
print("我是测试用例")


@pytest.fixture()
def aa():
print("先执行我")
yield #类似分隔符号 yield 上面的代码表示用例执行前 下面的表示用例执行之后
print("执行完用例后再执行我")
@pytest.fixture()
def bb():
print("执行我把")
if __name__ == '__main__':
pytest.main([
"-s"])
  •  pytest 首先会检测到 fixture 函数, 并在运行测试函数之前先执行fixture,这里注意的是可以在一个文件中设置多个fixture,用例可以自行选择执行那个fixture
  • pytest中的环境准备和环境销毁(也就是unittest中的setup和teardown)是写在同一个函数中,用yield进行分隔

 2.conftest.py实现多个文件中共享fixture

 conftest.py文件

cimport pytest


    @pytest.fixture      #声明它下面的函数是一个pytest的前置后置
    def aa():
        print("先执行我")
        yield
        print("执行完用例后再执行我")

    @pytest.fixture
    def bb():
        print("执行我把")

test_demo.py文件

@pytest.mark.usefixtures("aa")  #表示调用名为aa的前置后置
def test_2():
assert 2==2
print("我是测试用例")

 

注意:当@pytest.mark.usefixtures放到class上指该类下所有用例都执行

 

2.fixture作为参数传入

   

为了提高代码的复用性,我们在写用例的时候,会用到函数,然后不同的用例去调用这个函数。比如登录操作,大部分的用例都会先登录,那就需要把这个登录单独抽出来写个函数,其他用例全部的调用这个登录函数就行。

但是登录的账号不能写死,有时候要用账号1登录、执行用例1,用账号2登录执行用例2,所以需要对函数传参

@pytest.fixture()
def fix_init_chrome():
    """启动/关闭 chrome浏览器"""
 

    driver = webdriver.Chrome()
    driver.get('https://www.baidu.com')
    driver.maximize_window()

    yield driver               #yield 类似于函数的中的return关键字 运行前置条件后 会将driver变量返回出来

    driver.quit()

 

import pytest

@pytest.mark.usefixtures('fix_init_chrome')                      #调用fix_init_chrome()环境
def test_1(fix_init_chrome):                      #将该环境名作为参数来接受 返回值        
    d=fix_init_chrome
    d.get("http://www.taobao.com")

 

posted @ 2020-03-22 15:14  hn_大熊  阅读(227)  评论(0编辑  收藏  举报