• python-pytest学习(十五)-fixture详解


    一、前言

      fixture是pytest的核心功能,也是亮点功能,熟练掌握fixture的使用方法,pytest用起来才会得心应手!

    二、fixture简介

      fixture的目的是提供一个固定基线,在该基线上测试可以可靠地和重复地执行。fixture提供了区别于传统单元测试(setup/teardown)有显著改进:

    (1)有独立的命名,并通过声明它们从测试函数、模块、类或整个项目中的使用来激活;

    (2)按模块化的方式实现,每个fixture都可以相互调用;

    (3)fixture的范围从简单的单元扩展到复杂的功能测试,允许根据配置和组件选项对fixture和测试用例进行参数化,或者跨函数function,类class,模块module或整个测试会话session范围。

    三、fixture作为参数传入

      定义fixture跟定义普通函数差不多,唯一区别就是在函数上加个装饰器@pytest.fixture(),fixture命名不要用test_开头,跟用例区分开。用例才是test_开头的命名。

      fixture是可以有返回值的,如果没return默认返回None。用例调用fixture的返回值,直接就是吧fixture的函数名称当成变量名称,如下案例

    import pytest
    
    @pytest.fixture()
    def user():
        print("获取用户名")
        a = "admin"
        return a
    
    def test_1(user):
        assert user == "admin"
    
    if __name__ == "__main__":
        pytest.main(["-s","test_fixture1.py"])

    运行结果:

     四、error和failed区别

    测试结果一般有三种:passed、failed、error。(skip的用例除外)

    如果在test_用例里面断言失败,那就是failed

    import pytest
    
    @pytest.fixture()
    def user():
        print("获取用户名")
        a = "admin"
        return a
    
    def test_1(user):
        assert user == "admin111"
    
    if __name__=="__main__":
        pytest.main(["-s","test_fixture2.py"])

    如果在fixture里面断言失败了,那就是error

    import pytest
    
    @pytest.fixture()
    def user():
        print("获取用户名")
        a = "admin"
        assert a == "admin123"
        return a
    
    def test_1(user):
        assert user=="admin"
    
    if __name__=="__main__":
        pytest.main(["-s","test_fixture3.py"])

    参考文章:https://www.jianshu.com/p/8b21deb27262

  • 相关阅读:
    力扣(LeetCode)922. 按奇偶排序数组 II
    力扣(LeetCode)1002. 查找常用字符
    力扣(LeetCode)15. 三数之和
    Java == 和 equals 区别
    力扣(LeetCode)125. 验证回文串
    力扣(LeetCode) 905. 按奇偶排序数组
    力扣(LeetCode)832. 翻转图像
    力扣(LeetCode) 771. 宝石与石头
    Sticks
    荷马史诗
  • 原文地址:https://www.cnblogs.com/zhaocbbb/p/12856970.html
Copyright © 2020-2023  润新知