pytest

86 阅读2分钟

pytest是python的一种单元测试框架,与python自带的unittest测试框架类似

三个基本要求

  • 文件名必须以test_ 开头
  • 测试类必须以Test开头,并且不能有 init 方法
  • 测试方法必须以test开头
import pytest

#  单独的测试用例方法创建
def  test_case1():
    print("aaaa")

# 以类的形式创建单元测试用例,类名Test_开头
class Test_demo2():
    # 测试用例方法以test_开头
    def test_case02(self):
        print("bbbbb")

    def test_case03(self):
        print("bbbbb")
        assert 12==12

if __name__ == "__main__":
      pytest.main()

断言

assert关键字后面可以接一个表达式,只要表达式的最终结果为True,那么断言通过,用例执行成功,否则用例执行失败。

assert xx:判断xx为真
assert not xx:判断xx不为真
assert a in b:判断b包含a
assert a == b:判断a等于b
assert a !=b:判断a不等于b

执行

main()

if __name__ == "__main__":
    # 默认加载配置文件中的参数
    pytest.main(["-s"])

用例执行状态

  • passed:测试通过,一般使用  .  来表示
  • failed:断言失败,一般使用 F 来表示
  • error:代码错误,一般使用 E 来表示

pytest常用的Fixture方法

  • setup():每个测试方法执行之前会执行
  • teardown():每个测试方法执行之后会执行
  • setup_class():在每个类执行之前会执行
  • teardown_class():在每个类执行后会执行
class TestFixture():
    @staticmethod
    def setup_class():
        print("整个测试类开始前只执行一次setup_class")

    @staticmethod
    def teardown_class():
        print("整个测试类结束后只执行一次teardown_class")

    def setup():
        print("类里面的每个用例执行前都会执行setup")

    def teardown():
        print("类里面的每个用例执行后都会执行teardown")

    def test_login_success(self):
        print("登录成功")
        assert True

    def test_login_error(self):
        print("登录失败")
        assert False

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