pytest(二)框架实现一些前后置(固件,夹具)的处理,常用三种

为什么需要这些功能?

比如:web自动化执行用例前是否需要打开浏览器?执行用例后需要关闭浏览器?

示例代码:

import pytest
class Testcase:
    #这是每条测试用例执行前的初始化函数
    def setup(self):
        print("\n我是每条测试用例执行前的准备工作,比如:打开浏览器,加载页面等")
    #这是没条用例执行后的清理函数
    def teardown(self):
        print("\n我是每条测试用例执行后的清理工作,比如:关闭浏览器")
    #这是生活有用例执行前的初始化函数
    def setup_class(self):
        print("\n我是所有测试用例执行前的准备工作,比如:链接数据库,打开文件等")

    #这是所有用例执行后的清理工作
    def teardown_class(self):
        print("\n我是所有测试用例执行后的清理工作,比如:断开数据连接,关闭文件等")

    #测试用例1
    def test_case1(self):
        print("执行测试用例1")

    #测试用例2
    def test_case2(self):
        print("执行测试用例2")
if _name_=='_main_':
    pytest.main(["-vs"])

 2.1 autose:是否自动执行

        示例代码1(指定部分用例触发初始化、清理函数):

import pytest
# 添加此装饰器的函数可以实现初始化和清理工作
@pytest.fixture()
def fun():
    print("我是初始化工作")
    yield
    print("我是清理工作")
class TestCase:
  # 测试用例1
    def test_case(self):
        print("执行测试用例1")
    # 测试用例2:只有将初始化、清理函数作为参数传入用例,才会触发
    def test_case2(self, fun):
        print("执行测试用例2")
if __name__ == '__main__':

    pytest.main(["-sv"])

@注意:如果@pytest.fixture()装饰器内没有传递autouse参数,默认为False,只有传递了初始化方法的测试用例会触发初花清理方法,如示例代码中:测试用例1不会触发,测试用例2就会触发

示例代码2(全部符合规则的用例都会触发初始化清理方法)

import pytest

#添加此装饰器的函数可以实现初始化和清理工作
@pytest.fixture(autouse=True)
def fun():
    print("我是初始化工作")

    yield
    
    print("我是清理工作")

class TestCase:
    #测试用例1 
    def test_case1(self):
        print("执行测试用例1")

    #测试用例2
    def test_case(self):
        print("执行测试用例2")

if __name__=='__main__':
    pytest.main(["-vs"])

2.2 scope:表示被@pytest.fixture标记的方法的作用域

·示例代码

import pytest


"""
scope参数:表示被@pytest.fixture标记的方法的作用域
    function:函数(默认值),传递此参数或者不传则每条测试方法执行前都会触发初始化清理方法
    class:传递此参数则每个类执行前后都会触发一次初始化清理方法
    module:传递此参数则每个py模块执行前后悔触发一次初始化清理方法
    package:传递此参数则每个包执行前后会触发一次初始化清理方法

"""
#添加此装饰器的函数可以实现初始化和清理工作
@pytest.fixture(autouse = True,scope="class")

def fun():
    print("我是初始化工作")
    yield
    print("我是清理工作")

class TestCase:
    #测试用例1
    def test_case1(self):
        print("执行测试用例1")

    #测试用例2
    def test_case2(self):
        print("执行测试用例2")
if __name__=='__main__':
    pytest.main(["-vs"])

2.3 params:参数化,支持:列表[],元组(),字典列表[{},{}],字典元组({},{})

·示例代码:
 

import pytest

"""
        ·装饰器内参数是params,注意带s

        ·初始化、清理方法定义阶段要有一个实参必须为request

        ·初始化、清理方法内结合params参数化返回的值固定写法为:request.param,注意不带s

        ·params传递进去了几组测试数据,就会调用几次测试用例,并每次分发测试数据
"""
#添加此装饰器的函数可以实现初始化和清理工作
@pytest.fixture(params=[1,2,3])
def fun(request):
    print("我是初始化工作")
#固定写法:形参名字必须为request,而返回数据必须为request.param
    yield request.param
    print("我是清理工作")

class TestCase

    #测试用例1
    def test_case1(self)
        print("执行测试用例1")
    #测试用例2 初始化、清理方法内yiele或者return返回的结果会保存在初始化/清理方法名内,用例内可直接调用
    def test_case2(self,fun)
        print("执行测试用例2")
        print("测试数据:",fun)

if __name__=='__main__':
    pytest.main(["-vs"])

注意:

        ·装饰器内参数是params,注意带s

        ·初始化、清理方法定义阶段要有一个实参必须为request

        ·初始化、清理方法内结合params参数化返回的值固定写法为:request.param,注意不带s

        ·params传递进去了几组测试数据,就会调用几次测试用例,并每次分发测试数据

2.4  ids :当使用params参数化时,给每一个值设置一个变量名,意义不大

·示例代码:

import pytest
"""
ids里面传递的别名必须和参数个数保持一致
在执行结果中可以看到打印的nodeid里面的参数已经替换成了别名
"""

#添加此装饰器的函数可以实现初始化清理工作
@pytest.fixture(params=[1,2,3],ids=["data1","data2","data3"])
def fun(request):
    print("我是初始化工作")
    #固定写法:形参名字必须为request,而返回数据必须为request.param
    yield request.param
    print("我是清理工作")

class TestCase:
    #测试用例1
    def test_case(self):
        print("执行测试用例1")


    #测试用例2
    def test_case2(self,fun):
        print("执行测试用例2")
        print("测试数据",fun)

if __name__=='__main__':
    pytest.main(["-vs"])

2.5 name :给被@pytest.fixture标记的方法取一个别名,意义不大

import pytest
"""
起别名后,用例可以用别名来引用原来的方法名
起别名后原来的名字则无法使用了,否则报错
"""

#添加此装饰器的函数可以实现初始化和清理工作
@pytest.fixture(params=[1,2,3],name="aaa")
def fun(request):
    print("我是初始化工作")
    #固定写法:形参名字必须为request,而返回数据必须为request.param
    yield request.param
    print("我是清理工作")

class TestCase:
    #测试用例1
    def test_case1(self):
        print("执行测试用例1")

    #测试用例2
    def test_case2(self,aaa):
        print("执行测试用例2")
        print("测试数据",aaa)

if __name__=='__main__':
    pytest.main(["-vs"])

三、通过conftest.py和pytest.fixture()结合使用实现全局的前置应用(比如:项目的全局登录,模块的全局处理等)

使用规则:

        conftest.py文件是单独存放的一个家具配置文件,名称是不能更改的

用处:可以在不同的py文件中使用同一个fixture函数

原则上conftest.py需要喝运行的用例放到同一层,并且不需要做任何import 导入操作

注意:如果一个测试用例添加了两个测试夹具,后面的一个夹具会在前一个的内层执行

如:

class TestCase:
    #测试用例
    def test_case(self,fun1,fun2):
        print("执行测试用例")
        print("测试数据:",fun1)
        print("测试数据:",fun2)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

XuMeng_first

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值