从0到1精通自动化测试,pytest自动化测试框架,测试用例setup和teardown(三)

目录

一、前言

二、用例运行级别

三、函数式

1、setup_function / teardown_function

2、setup_module / teardown_module

四、类和方法

五、函数和类混合


一、前言

学过 unittest 的都知道里面用前置和后置 setup 和 teardown 非常好用,在每次用例开始前和结束后都去执行一次

当然还有更高级一点的 setupClass 和 teardownClass,需配合 @classmethod 装饰器一起使用,在做 selenium 自动化的时候,它的效率尤为突然,可以只启动一次浏览器执行多个用例

pytest框架也有类似于setup和teardown的语法,并且还不止这四个

二、用例运行级别

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

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

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

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

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

三、函数式

1、setup_function / teardown_function

1.pytest框架支持函数和类两种用例方式
先看函数里面的前置与后置用法:
setup_function / teardown_function (每个用例开始和结束调用一次)

# test_fixt.py

# coding:utf-8
import pytest
# 函数式

''' 程序员曦曦'''

def setup_function():
    print("setup_function:每个用例开始前都会执行")

def teardown_function():
    print("teardown_function:每个用例结束后都会执行")

def test_one():
    print("正在执行----test_one")
    x = "this"
    assert 'h' in x

def test_two():
    print("正在执行----test_two")
    x = "hello"
    assert hasattr(x, 'check')

def test_three():
    print("正在执行----test_three")
    a = "hello"
    b = "hello world"
    assert a in b

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

运行结果:

============================= test session starts =============================
platform win32 -- Python 3.6.0, pytest-3.6.3, py-1.5.4, pluggy-0.6.0
rootdir: E:\YOYO, inifile:
collected 3 items

test_fixt.py setup_function:每个用例开始前都会执行
正在执行----test_one
.teardown_function:每个用例结束后都会执行
setup_function:每个用例开始前都会执行
正在执行----test_two
Fteardown_function:每个用例结束后都会执行
setup_function:每个用例开始前都会执行
正在执行----test_three
.teardown_function:每个用例结束后都会执行

================================== FAILURES ===================================
__________________________________ test_two ___________________________________

    def test_two():
        print("正在执行----test_two")
        x = "hello"
>       assert hasattr(x, 'check')
E       AssertionError: assert False
E        +  where False = hasattr('hello', 'check')

test_fixt.py:19: AssertionError
===================== 1 failed, 2 passed in 0.03 seconds ======================

2.从结果可以看出用例执行顺序:setup_function > 用例1 > teardown_function, setup_function > 用例2 > teardown_function, setup_function > 用例3 > teardown_function

备注:-s参数是为了显示用例的打印信息。 -q参数只显示结果,不显示过程

2、setup_module / teardown_module

1.setup_module 是所有用例开始前只执行一次,teardown_module 是所有用例结束后只执行一次

# test_fixt.py

# coding:utf-8
import pytest
# 函数式

''' 程序员曦曦'''

def setup_module():
    print("setup_module:整个.py模块只执行一次")
    print("比如:所有用例开始前只打开一次浏览器")

def teardown_module():
    print("teardown_module:整个.py模块只执行一次")
    print("比如:所有用例结束只最后关闭浏览器")

def setup_function():
    print("setup_function:每个用例开始前都会执行")

def teardown_function():
    print("teardown_function:每个用例结束前都会执行")

def test_one():
    print("正在执行----test_one")
    x = "this"
    assert 'h' in x

def test_two():
    print("正在执行----test_two")
    x = "hello"
    assert hasattr(x, 'check')

def test_three():
    print("正在执行----test_three")
    a = "hello"
    b = "hello world"
    assert a in b

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

2.从运行结果可以看到 setup_module 和 teardown_module 只执行了一次

test_fixt.py setup_module:整个.py模块只执行一次
比如:所有用例开始前只打开一次浏览器
setup_function:每个用例开始前都会执行
正在执行----test_one
.teardown_function:每个用例结束前都会执行
setup_function:每个用例开始前都会执行
正在执行----test_two
Fteardown_function:每个用例结束前都会执行
setup_function:每个用例开始前都会执行
正在执行----test_three
.teardown_function:每个用例结束前都会执行
teardown_module:整个.py模块只执行一次
比如:所有用例结束只最好关闭浏览器

备注:setup_function / teardown_function和setup_module / teardown_module这四种方法是可以任意组合的,用一个和多个都可以

四、类和方法

1.setup / teardown 和 unittest 里面的 setup / teardown 是一样的功能,setup_class 和 teardown_class 等价于 unittest 里面的 setupClass 和 teardownClass

#test_fixtclass.py
# coding:utf-8

import pytest
# 类和方法

''' 程序员曦曦'''

class TestCase():

    def setup(self):
        print("setup: 每个用例开始前执行")

    def teardown(self):
        print("teardown: 每个用例结束后执行")

    def setup_class(self):
        print("setup_class:所有用例执行之前")

    def teardown_class(self):
        print("teardown_class:所有用例执行之前")

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

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

    def test_one(self):
        print("正在执行----test_one")
        x = "this"
        assert 'h' in x

    def test_two(self):
        print("正在执行----test_two")
        x = "hello"
        assert hasattr(x, 'check')

    def test_three(self):
        print("正在执行----test_three")
        a = "hello"
        b = "hello world"
        assert a in b

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

运行结果

test_fixtclass.py setup_class:所有用例执行之前
setup_method:  每个用例开始前执行
setup: 每个用例开始前执行
正在执行----test_one
.teardown: 每个用例结束后执行
teardown_method:  每个用例结束后执行
setup_method:  每个用例开始前执行
setup: 每个用例开始前执行
正在执行----test_two
Fteardown: 每个用例结束后执行
teardown_method:  每个用例结束后执行
setup_method:  每个用例开始前执行
setup: 每个用例开始前执行
正在执行----test_three
.teardown: 每个用例结束后执行
teardown_method:  每个用例结束后执行
teardown_class:所有用例执行之前

2.从结果看出,运行的优先级:setup_class > setup_method > setup > 用例 > teardown > teardown_method > teardown_class

备注:这里 setup_method 和 teardown_method 的功能和 setup / teardown功能是一样的,一般二者用其中一个即可

五、函数和类混合

1.如果一个.py的文件里面既有函数用例又有类和方法用例,运行顺序又是怎样的呢?

# coding:utf-8
import pytest
# 类和方法

''' 程序员曦曦'''

def setup_module():
    print("setup_module:整个.py模块只执行一次")
    print("比如:所有用例开始前只打开一次浏览器")

def teardown_module():
    print("teardown_module:整个.py模块只执行一次")
    print("比如:所有用例结束只最后关闭浏览器")

def setup_function():
    print("setup_function:每个用例开始前都会执行")

def teardown_function():
    print("teardown_function:每个用例结束前都会执行")

def test_one():
    print("正在执行----test_one")
    x = "this"
    assert 'h' in x

def test_two():
    print("正在执行----test_two")
    x = "hello"
    assert hasattr(x, 'check')

class TestCase():

    def setup_class(self):
        print("setup_class:所有用例执行之前")

    def teardown_class(self):
        print("teardown_class:所有用例执行之前")

    def test_three(self):
        print("正在执行----test_three")
        x = "this"
        assert 'h' in x

    def test_four(self):
        print("正在执行----test_four")
        x = "hello"
        assert hasattr(x, 'check')

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

运行结果:

test_fixtclass.py setup_module:整个.py模块只执行一次
比如:所有用例开始前只打开一次浏览器
setup_function:每个用例开始前都会执行
正在执行----test_one
.teardown_function:每个用例结束前都会执行
setup_function:每个用例开始前都会执行
正在执行----test_two
Fteardown_function:每个用例结束前都会执行
setup_class:所有用例执行之前
正在执行----test_three
.正在执行----test_four
Fteardown_class:所有用例执行之前
teardown_module:整个.py模块只执行一次
比如:所有用例结束只最后关闭浏览器

2.从运行结果看出,setup_module / teardown_module 的优先级是最大的,然后函数里面用到的 setup_function / teardown_function 与类里面的 setup_class / teardown_class 互不干涉


          【下面是我整理的2023年最全的软件测试工程师学习知识架构体系图】


一、Python编程入门到精通

从0到1精通自动化测试,pytest自动化测试框架,测试用例setup和teardown(三)_第1张图片
二、接口自动化项目实战  

从0到1精通自动化测试,pytest自动化测试框架,测试用例setup和teardown(三)_第2张图片

三、Web自动化项目实战

从0到1精通自动化测试,pytest自动化测试框架,测试用例setup和teardown(三)_第3张图片
四、App自动化项目实战 

从0到1精通自动化测试,pytest自动化测试框架,测试用例setup和teardown(三)_第4张图片

五、一线大厂简历

从0到1精通自动化测试,pytest自动化测试框架,测试用例setup和teardown(三)_第5张图片
六、测试开发DevOps体系 

从0到1精通自动化测试,pytest自动化测试框架,测试用例setup和teardown(三)_第6张图片

七、常用自动化测试工具

从0到1精通自动化测试,pytest自动化测试框架,测试用例setup和teardown(三)_第7张图片
八、JMeter性能测试 

从0到1精通自动化测试,pytest自动化测试框架,测试用例setup和teardown(三)_第8张图片

九、总结(尾部小惊喜)

生命不息,奋斗不止。每一份努力都不会被辜负,只要坚持不懈,终究会有回报。珍惜时间,追求梦想。不忘初心,砥砺前行。你的未来,由你掌握!

生命短暂,时间宝贵,我们无法预知未来会发生什么,但我们可以掌握当下。珍惜每一天,努力奋斗,让自己变得更加强大和优秀。坚定信念,执着追求,成功终将属于你!

只有不断地挑战自己,才能不断地超越自己。坚持追求梦想,勇敢前行,你就会发现奋斗的过程是如此美好而值得。相信自己,你一定可以做到!

【软件测试技术交流(资料分享)】:320231853(备注C)icon-default.png?t=N5F7http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=eU1h9ykztGeBOGy_wSKn0v33ThZlM8Xh&authKey=3aLC55z%2F7ZglBlNu5uwQopOR2WZAlAuFDvJ6sqEnXLJP8y9fvuhBS0p%2FNOTaZyQG&noverify=0&group_code=320231853

你可能感兴趣的:(自动化测试,软件测试,技术分享,pytest,测试用例,软件测试,自动化测试,程序人生)