pytest

简单用法

运行规则

  • 运行同目录下test_开头的文件

    • Test开头的类
    • test_*开头方法
    • *_test结尾方法
    • 注意:Test开头的类不能有__init__方法
  • 执行参数

    • -q 显示简单运行结果

      • pytest -q test.py
    • -s 详情打印运行日志

      • pytest -s test.py
    • -v 显示详情运行信息

      • pytest -v test.py
    • :: 运行模块下的类或方法

      • pytest -v test.py::TestClass::test_method
    • -m 标记装饰器

      • @pytest -m login
    • -k 匹配测试用例关键词

      • pytest -k test test.py

assert断言

常用断言

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

异常断言

  • pytest.raise(typeError):判断是否异常,保证用例可以继续执行

setup和teardown

类级别:setup_class与teardown_class

方法级别:setup_method与teardown_method

模块级别:setup_module与teardown_module

fixture

fixture的作用

  • conftest.py配置里实现数据共享,不需要import就能自动找到fixture

fixture参数

  • scope范围默认:function

    • @pytest.mark.userfixtures(fixture_name)
    • 还有class、module、package、session常用
  • autouse默认:False

  • name装饰器名称

fixture参数request使用

  • 作用:登录场景需要登录不同测试账号
  • @pytest.fixture() 传参使用@pytest.mark.parametrize(“装饰函数名”,参数,indrect=True),直接会运行装饰函数

conftest

conftest的作用

  • fixture的配置文件

    • 使用场景:所有用例都需要登录作为前置条件
    • pytest会默认读取conftest的所有fixture
    • conftest只对当前package生效,一个项目可有多个conftest
    • 不需要导包,pytest会自动寻找conftest配置文件

conftest类型

  • def func(scope=session)适用driver初始化
  • def func(sscope=module) 使用单独某个模块
  • def func(sscope=module) 适用类

调用方式:@pytest.mark.fixture(scope="session") def fun() print("这是初始化driver") def login(fun)

skip

skip的作用

  • 标题无法在某些平台运行的测试功能,或者满足某些条件才会执行

skip的运行方式

  • 针对整个测试用例或类@pytest.mark.skip(reason="不执行的原因")
  • 测试方法中跳过,pytest.skip("不执行的原因")
  • 跳过整个模块级别,pytest.skip=(msg="跳过原因"),all_module_level=True
  • 满足某些条件跳过@pytest.mark.skipif(条件表达式,reason=“”)

count

count的作用

  • 重复执行某个测试用例

count的运行方式

  • count=2 或者 count 2
  • 运行到第一次失败停止,-x与pytest -repeat结合使用,命令行运行:pytest --count=10 -x test_file.pyt
  • 装饰器@pytest.mark.repeat(10)该用例重复执行10次
  • --repeat-scope设置覆盖的测试用例执行顺序,例如pytest -s --count=2 --repeat-scope=class test.py 作用:test.py文件中的类重复执行5次