pytest框架

特点:

  1. 容易上手, 入门简单, 文档丰富, 文档中有很多参考案例
  2. 支持简单的单元测试和复杂的功能测试
  3. 支持参数化
  4. 执行测试用例过程中, 支持跳过操作
  5. 支持重复失败的case
  6. 支持运行Nose, unittest编写测试用例
  7. pytest支持很多第三方插件
  8. 方便和持续集成工具集成

1. pytest断言

断言方法: assert result 

2. pytest方法级别的fixture

  • pytest方法级别的fixture是针对每个测试方法, 在执行测试方法前会执行fixxture初始化操作, 在执行完测试方法后, 执行fixture销毁操作
  • 初始化操作方法: def setup(self): 方法来实现
  • 销毁的操作方法: def teardown(self): 方法来实现

3. pytest类级别的实现

  • pytest类级别的fixture针对每一个测试类的初始化和销毁操作, 可以放在一下两个方法中
    • 类级别初始化的方法: def setup_class(self):
    • 类级别销毁的方法: def teardown_class(self):
    • 方法名称固定, 不能修改

4. pytest配置文件

pytest的配置文件有固定的三个名称:  pytest.ini     tox.ini

[pytest]  # 标识当前文件是pytest的配置文件
addopts = -s -v # 标识pytest执行时增加的参数
testpaths = ./scripts # 匹配搜索目录
python_files = test_*.py # 匹配测试文件
python_classes = Test* # 匹配测试类
python_functions = test_* # 匹配测试方法

5. 控制用例的执行顺序

  • unittest测试用例执行顺序是根据测试方法名称的assic码值大小来的, 值越小排在越前面
  • pytest正常情况下是根据测试方法的从上到下的顺序来执行
  • 可以通过pytest-ording插件来控制pytest测试方法执行的顺序
  • 使用
    • @pytest.mark.run(ordeer=x)    # x表示的是整数(既可以是整数也可以是负数)
    • 全为负数或者整数时, 值越小, 优先级越高
    • 既有正数, 又有负数, 那么正数优先级高
    • 没有确定执行顺序的用例优先于负数

6. 失败重试

  • 安装插件pytest-rerunfailures
  • 使用
    • 在addopts参数行中增加对应的参数配置项:    --reruns x(x为一个整数, 代表要执行几次)
    • 当重复执行成功时, 就不会再重复执行

7. 跳过

  • @pytest.mark.skipif(condition, reason=None)
    • condition表示的是跳过的条件
    • 这里的reason参数必填
  • @pytest.mark.skip(reason=None)
    • reason表示的是跳过的原因

8. 数据的参数化

  • pytest参数化的实现: @pytest.mark.parameterize(argnames, argvalues)
    • argnames表示的是参数的名字, 是一串字符, 多个参数之间由逗号隔开 "username, password"
    • argvales 表示的是参数化的数据, [("1111", '1234'), ("2222", '1111')]
    • argname订单参数个数要与argvalues例面的测试数据的个数要相同, 否则会报错