ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Pytest测试用例之setup与teardown方法

2021-11-29 10:01:38  阅读:175  来源: 互联网

标签:teardown setup print 用例 Pytest test 测试用例 执行


介绍

unittest里面 [前置/后置setup/teardown ]非常好,用来写一些每个case执行前都需要执行的公用代码 [ 作用:在每次用例开始前和结束后都去执行一次 ]

例如我们的进入产品前可能都需要打开浏览器登录等,执行完毕后需要关闭浏览器等,这些我们都可以用前置后置初始化环境去实现的,然后这样的前置后置方法有很多

当然还有更高级一一点的setupClass和teardownClass,需配合@classmethod装饰器起使用,在做selenium自动化的时候,它的效率尤为突显;只用启动-次浏览器就可以将在该代码文件下的所有待执行用例,进行执行完毕。不需要执行每条每次就打开浏览器

pytest框架也有类似于setup和teardown的语法,并且还不止这四个,下面我们简单看看这些方法的简单介绍

 

用例运行级别

- 模块级(setup_module/teardown_module)开始于横块始末,全局的

- 函数级(setup_function/teardown_function)只对函数用例生效(不在类中)

- 类级(setup_class/teardown_calss)只在类中前后运行一次(在类中)

- 方法级(setup_method/teardown_method)开始于方法始末(在类中)

- 类里面的(setup/teardown)运行在调用方法前后

 

###

函数级 setup_function/teardown_function

import pytest


# 函数式
def setup_function():
    print('setup_function:每个用例前都会执行')


def teardown_function():
    print('teardown_function:每个用例后都会执行')


def test_001():
    print("正在执行第一条用例")
    p = "Python"
    assert "h" in p


def test_002():
    print("正在执行第二条用例")
    p = 'Test'
    assert 'T' in p


if __name__ == '__main__':
    pytest.main(['-s', 'test_updown_demo1.py'])

###

test_updown_demo1.py::test_001 setup_function:每个用例前都会执行
PASSED [ 50%]正在执行第一条用例
teardown_function:每个用例后都会执行

test_updown_demo1.py::test_002 setup_function:每个用例前都会执行
PASSED [100%]正在执行第二条用例
teardown_function:每个用例后都会执行

 

 

###

模块级 setup_module/teardown_module

import pytest
 
# 模块级
def setup_module():
    print('setup_module:整个.py模块只执行一次')
    print("比如:所有用例开始前只打开一次浏览器")
 
 
 
 
def teardown_module():
    print('teradown_module:整个.py模块只执行一次')
    print("比如:所有用例结束只最后关闭浏览器")
 
 
 
 
def test_001():
    print("正在执行第一条用例")
    p = "Python"
    assert "h" in p
 
 
 
 
def test_002():
    print("正在执行第二条用例")
    p = 'Test'
    assert 'T' in p
 
 
 
 
if __name__ == '__main__':
    pytest.main(['-s', 'test_fixt.py'])

###

test_updown_demo1.py::test_001 setup_module:整个.py模块只执行一次
比如:所有用例开始前只打开一次浏览器
PASSED                                    [ 50%]正在执行第一条用例

test_updown_demo1.py::test_002 PASSED                                    [100%]正在执行第二条用例
teradown_module:整个.py模块只执行一次
比如:所有用例结束只最后关闭浏览器

 

###

类级 setup_class/teardown_calss

import pytest


class Testcaselist():
    print('setup_class:所有用例执行之前')

    # 类级
    def setup_class(self):
        print('setup_class:所有用例执行之前')

    def teardown_class(self):
        print('teardown_class:所有用例执行结束之后')

    # 测试用例
    def test_001(self):
        print("正在执行第一条用例")
        p = "Python"
        assert "h" in p

    def test_002(self):
        print("正在执行第二条用例")
        p = 'test'
        assert 't' in p


if __name__ == '__main__':
    pytest.main(['-s', 'test_updown_demo1.py'])

 

###

test_updown_demo1.py::Testcaselist::test_001 setup_class:所有用例执行之前
PASSED                      [ 50%]正在执行第一条用例

test_updown_demo1.py::Testcaselist::test_002 PASSED                      [100%]正在执行第二条用例
teardown_class:所有用例执行结束之后

###

方法级 setup_method/teardown_method

import pytest


class Testcaselist():
    # 方法级

    def setup_method(self):
        print('setup_method:每个用例开始之前执行')

    def teardown_method(self):
        print('teardown_method:每个用例结束后执行')

    # 测试用例
    def test_001(self):
        print("正在执行第一条用例")
        p = "Python"
        assert "h" in p

    def test_002(self):
        print("正在执行第二条用例")
        p = 'test'
        assert 't' in p


if __name__ == '__main__':
    pytest.main(['-s', 'test_updown_demo1.py'])

 

####

test_updown_demo1.py::Testcaselist::test_001 setup_method:每个用例开始之前执行
PASSED                      [ 50%]正在执行第一条用例
teardown_method:每个用例结束后执行

test_updown_demo1.py::Testcaselist::test_002 setup_method:每个用例开始之前执行
PASSED                      [100%]正在执行第二条用例
teardown_method:每个用例结束后执行

####

 

标签:teardown,setup,print,用例,Pytest,test,测试用例,执行
来源: https://www.cnblogs.com/andy0816/p/15618052.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有