今天总结下pytest,pytest简直就是python自动化中的高富帅,各种操作,哈哈

这次总结主要涉及到了以下几点:

1、unittest中的setUp、tearDown、setUpClass、tearDownClass

2、pytest中的前置后置如何表达

3、如何将前置后置和用例关联

4、pytest中的前置后置的级别如何区分

5、pytest中的前置后置“继承”关系,如何继承

简单总结下pytest的前置后置吧,pytest的前置后置非常简单,但是不同于unittest的前置后置,首先回顾下

1、unittest中的setUp、tearDown、setUpClass、tearDownClass

  在unittest中的前置后置有明确的格式,看如下代码

import unittest

class MyTestCase(unittest.TestCase):

    def setUp(self):
print("我是set_up") def tearDown(self):
print("我是teardown") def test_1(self):
print("我是测试用例1") def test_ha(self):
print("我说测试用例2") if __name__ == '__main__':
unittest.main()

可以得出结论,以下是运行结果:

pytest_前置后置-LMLPHP

unittest的前置必须是放在setUp里面,后置必须是放在tearDown里面,这个是有明确的格式的

当然了,setUp、tearDown是用例级别的,unittest还有类界别 的,请看如下代码

import unittest

class MyTestCase(unittest.TestCase):

    @classmethod
def setUpClass(cls):
print("我是setupclass") @classmethod
def tearDownClass(cls):
print("我是teardownclass") def test_1(self):
print("我是测试用例1") def test_ha(self):
print("我说测试用例2") if __name__ == '__main__':
unittest.main()

结果如下:

pytest_前置后置-LMLPHP

可以看出setUpClass和tearDownClass都是在这个测试类只运行一次的

说了这么多,还是言归正传,说下pytest的前置后置

2、pytest中的前置后置如何表达

  pytest的前置后置只用一个函数就可以解决

import pytest

@pytest.fixture
def iniy():
print("我是前置")
yield
print("我是后置") @pytest.mark.usefixtures("iniy")
class TestCase: def test_1(self):
print("我是测试用例1") def test_ha(self):
print("我说测试用例2") if __name__ == '__main__':
pytest.main(["test.py"])

上面代码中的iniy函数就是一个前置后置,只需要加上一个装饰器(pytes.fixture)即可,

3、如何将用例与前置后置关联

  设置了前置后置之后,用例如何引用?

 @pytest.mark.usefixtures("init_driver")
def test_name_null_login(self, init_driver):
"""
用户名为空 """
init_driver[1].login(test_login_datas.login_name_null_data["name"], test_login_datas.login_name_null_data["passwd"])
assert(init_driver[1].error() == test_login_datas.login_name_null_data["expect"])

上面代码中标记的部分就是引用前置后置的方式,置于为什么用例需要传递参数?

r

4、pytest中的前置后置的级别如何区分

  查看源码可以看出这个fixture函数存在scope这个参数,这个参数是确定这个前置后置的级别,pytest中前置后置的界别分为函数级别、类级别、模块级别、会话级别,当然我们常用的还是类级别和函数级别

5、pytest中的前置后置“继承”关系,如何继承

  pytest中的前置后置还可以共用,类似于类的“继承”,当然这个也是需要固定的用法

如果要实现公用的前置后置,那么需要将这个前置后置放到指定的文件中去------conftest.py

当然这个继承关系也是有要求的:低级别可以继承高级别,高级别不能继承低级别

  举个栗子:函数级别的可以继承函数级别及更高的级别,但是类级别不能继承函数级别

# -*- coding:utf-8 -*-
"""
File Name: conftest
"""
import pytest @pytest.fixture(scope="class")
def ini():
print("我是类前置")
yield 2
print("我是类后置") @pytest.fixture
def init(ini):
pass

以上脚本可以看出init这个前置后置继承了ini这个类级别的前置后置,那么我们在下面脚本中直接调用这个init前置后置看看结果如何

import pytest

@pytest.fixture()
def iniy():
print("我是前置")
yield
print("我是后置") @pytest.mark.usefixtures("init")
class TestCase: def test_1(self):
print("我是测试用例1") def test_ha(self):
print("我说测试用例2") if __name__ == '__main__':
pytest.main(["test.py"])

pytest_前置后置-LMLPHP

05-11 13:03