Pytest测试框架

特点:

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

Pytest的安装:

  • 在线安装  :pip install pytest
  • 离线安装  :离线安装方式 下载pytest离线安装包,并解压,然后再DOS下进入到解压的目录,然后执行Python setup.py install
  • pycharm

判断是否安装成功:

  • pip show pytest
  • pycharm

pytest类定义的及方法定义及运行

  • Pytest测试类的定义:类名必须是以Test开头
  • pytest测试方法的定义:方法名必须是以test开头
  • 执行:在pycharm中右击方法名或者雷鸣可以直接执行对应测试类或者测试方法

Pytest断言:assert 表达式

  • assert  result == x  判断是否相等
  • assert result != x 判断是否不相等
  • assert result 判断为TRUE
  • assert false 判断为FALSE
  • assert "a"in "abc" 判断包含
  • assert "a"not in "abc" 判断不包含
  • assert request is None 判断是为空
  • assert request is not None 判断不是为空

Pytest方法级别的fixture

 Pytest方法级别是fixture是针对每个测试方法,在执行测试方法前会执行fixture初始化的操作,在执行完成测试方法后,执行fixture销毁操作。

初始化的操作方法:def setup(self):方法来实现。

销毁的操作方法:def teardown(self):方法来实现。

Pytest类法级别的fixture

  • pytest类级别的fixture针对每个测试类的初始化和销毁的操作,可以放在一下两个方法中
  1. 类级别初始化的方法:def setup_class(self):
  2. 类级别销毁的方法:def teardown_class(slef):

方法名称固定,不能修改。

 Pytest配置文件

pytest的配置文件有固定的三个名称:pytest.ini、 tox.ini、setup.cfg,配置文件是存在于项目根目录下

[pytest]  # 标识pytest执行时增加的参数

addopts= -s -v #标识pytest执行是增加的参数

testpaths=./scripts #匹配收搜的目录

Python_files =test_*.py #匹配测试文件

Python_classes=Test*#匹配测试类

Python_functions =test_*匹配测试方法

pytest测试报告插件的使用

pytest-html :通过使用pycharm进行安装

使用:在配置文件addopts选项中增加一项就可以了

addopts= -s -v --html=report/report.html

pytest常用插件

控制用例执行顺序

  • unittest测试用例执行顺序根据测试方法名称的assicc码值的发小来的,值越小拍债前面(a-z)
  • pytest正常情况下是根据测试方法的从上到下的顺序来执行,可以通过pytest-ordering插件来控制pytest测试方法执行的顺序。
  • 安装:
  1. 在线安装:pip install pytest -ordering
  2. 离线安装:下载对应的离线安装包,解压后,并进入到对应的目录,执行Python setup_py install
  3. pycharm
  •  使用:@pytest.mark.run(order=x) #X表示的是整数(既可以是负数也可以是正数)
  1. 全为负数或者正数时,值越小,优先级越高
  2. 既有正数,又有负数,那么正数优先级高
  3. 没有确定执行顺序的用例优先于负数
  4. pytest.mark.trylast #设置用例最后执行

 失败重置插件

  • 安装:
  1. 在线安装:pip install pytest -rerunfailures安装
  2. 离线安装:下载对应的离线安装包,解压后,并进入到对应的目录,执行Python setup_py install
  3. pycharm
  • 使用:在addopts参数行中增加对应的参数项:--reruns 3 当重复执行成功是,就不会再重复执行。

pytest高级用法

跳过:

@pytest.mark.skipif(condition,reason=None) 

condition 表示是跳过的条件,这里reason参数名称必填

@pytest.mark.skip(reason=none)

reason表示的是跳过的原因

数据参数化:

  •  pytest参数化实现:@pytest.mark.parameterize(argnames,argvalues)
  1. argnames表示是参数名字,是一串字符串,多个参数之间由逗号隔开“username,password”
  2. argvalues表示的是参数化的数据[("13700001111","12345"),("13700001111","12345")]

 argnames的参数个数要与argvalues里面的测试数据的个数要相同,否则会报错。