pytest是一个非常成熟的全功能的Python测试框架,主要有以下几个特点:
- 简单灵活,容易上手
- 支持参数化
- 能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytest+requests)
- pytest具有很多第三方插件,并且可以自定义扩展,比较好用的如pytest-selenium(集成selenium)、pytest-html(完美html测试报告生成)、pytest-rerunfailures(失败case重复执行)、pytest-xdist(多CPU分发)等
- 测试用例的skip和xfail处理
- 可以很好的和jenkins集成
- report框架----allure 也支持了pytest
1.pytest安装
1.1 安装
pip install -U pytest
1.2验证
pytest --version # 会展示当前已安装版本
2pytest断言
assert 'h' in 'hello'(判断h在hello包含中)
assert a==b(判断a=b)
assert a!=b(判断a!=b)
assert 5>6(判断5>6为真)
assert not xx(判断xx不为真)
assert {'0','1','3','8'}=={'0','3','5','8'}
assert a 判断a是否未true
assert res is none
assert res is not none
3.pytest方法级别fixture
pytest 方法级别的fixture是针对每个测试方法,在执行测试方法前执行fixtrue初始化的操作,在执行完测试方法后,执行fixtrue销毁操作。
初始化操作方法:def setup(self):方法来实现
销毁操作方法:def teardown(self):方式来实现
4.pytest类级别fixtrue
pytest类级别的fixtrue针对每个测试类的初始化和销毁操作,以下两个方法
类级别初始化方法:def setup_class(self):
类级别销毁方法:def teardown_class(self):
5.pytest之配置文件
5.1 pytest的配置文件有固定的三个名称
分别是 1、pytest.ini
2 、tox.ini
3、setup.cfg
5.2配置文件内容
参数详解:
addopts配置:参数详解
-s:表示输出调试信息,用于显示测试函数中print()打印的信息
-v:未加前只打印模块名,加v后打印类名、模块名、方法名,显示更详细的信息
-q:表示只显示整体测试结果
-vs:这两个参数可以一起使用
-n:支持多线程或者分布式运行测试用例(需安装:pytest-xdist插件)
pytest -vs test_login.py -n 2
pytest.main(['-vs', '-n=2'])
配置好配置文件 直接在terminal输入pytest就可以执行了
【pytest】 //标识当前文件为pytest配置文件
addopts= -s -v //配置参数
testpaths=./script //配置测试文件路径
python_files=test_*.py //测试文件匹配配置
python_classes=Test* //测试类名进行匹配配置
python_functions= test_* //测试方法进行匹配
5.2 pytest 使用main方法运行
if __name__ == '__main__':
//注意在括号里面用的是列表
pytest.main(["-s","-v","./test_lx_demo_o1.py"])
6pytest 之 跳过执行(skip)
场景:
1调试时不想运行这个用例
2标记无法在某些平台上运行的测试功能
3当前的外部资源不可用时跳过
4在某些版本执行,某些版本不执行
6.1介绍:
在自动化测试过程中经常会遇到功能阻塞、功能未实现、环境等一系列外部因素问题导致一些用例执行不了,这时就可以用到跳过skip
用例,如果我们注释掉或删除掉,后面还要进行恢复操作。
1、skip
跳过成功,标识为:
============================= 2 skipped in 0.04s ==============================
2、pytest.main(['-rs','test01.py']) 用 -rs 执行,跳过原因才会显示SKIPPED [1] test01.py:415:跳过 Test 类,会跳过类中所有方法。
3、skip跳过,无条件和原因@pytest.mark.skip()。
4、skip跳过,无需满足条件true、有跳过原因@pytest.mark.skipif(reason=‘无条件,只有跳过原因’)。
5、skip跳过,需满足条件true、且有跳过原因@pytest.mark.skipif(条件1==1,reason=‘跳过原因’)。
6、skip赋值变量,多处调用myskip=pytest.mark.skipif(1==1,reason=‘skip赋值给变量,可多处调用’)。
6.2 跳过测试类
跳过执行可以声明在 类、方法 上
@pytest.mark.skip()
和@pytest.mark.skipif()
两个标签,用它们装饰测试类:
-
被标记的类中所有方法测试用例都会被跳过。
-
被标记的类,当条件为ture时,会被跳过,否则不跳过。
'''
skip跳过类
'''
import pytest,sys
@pytest.mark.skip(reason='跳过Test类,会跳过类中所有方法')
class Test(object):
def test_one(self):
assert 1==1
def test_two(self):
print('test_02')
assert 1==2
if __name__=='__main__':
pytest.main(['-rs','test01.py'])
"C:\Program Files\P