pytest基本使用指南


注:关于pytest的基础要点个人已经总结好了,直接git clone即可,gitee:https://gitee.com/teark/pytest_exercise.git

 

启动:

在main下,pytest.main(['-q','test_demo.py'])

或者在终端,pytest ./test_demo.py

执行多个:pytest test_fixture1.py test_fixture2.py

 

启动参数说明:

-s: 显示程序中的print/logging输出

-v: 丰富信息模式, 输出更详细的用例执行信息

-q: 安静模式, 不输出环境信息,只给结果

-k:关键字匹配,用and区分:匹配范围(文件名、类名、函数名)

 

setup/teardown:

setup和teardown函数:运行在每个测试方法的始末

setup_class和teardown_class函数:运行在类的始末

 

pytest.ini:

参数最好都放配置文件里,不用再main里放

addopts配置pytest命令行运行参数

testpaths配置测试搜索的路径

python_files配置测试搜索的文件名

python_classes配置测试搜索的测试类名

python_functions配置测试搜索的测试函数名

配置文件里不要出现中文,需要gbk编码,但是改了gbk,控制台打印时会报错,无语。

 

pytest-html:

安装它

用法:配置文件里添加报告参数:addopts = -s --html=./report.html,若要生成xml文件改一下就行

 

pytest-ordering:

安装它

用法:函数上面加@pytest.mark.run(order=n)

优先级:order值全为正数或全为负数时, 值越小,优先级越高;正数和负数同时存在,正数优先级高

 

pytest-rerunfailures:

安装它

用法:命令行格式, pytest —reruns n # n为重试的次数;或添加失败重试参数,即:addopts = -s --reruns 2 --html=./report.html

记住命令行是reruns,最好配置参数

 

fixture:

功能:通常会被用于完成预置处理和重复操作。如在测试网站的功能时,每个测试用例都要登录和退出,利用fixture就可以只做一次;完成setup和

teardown操作,处理数据库或文件的打开、关闭操作;将数据提前写入数据库或通过params返回给测试用例。强大吧!

pytest.fixture(scope='function', params=None, autouse=False, ids=None, name=None)

 

常用参数解释:

"scope": 被标记方法的作用域;

"function": 默认值,表示每个测试方法都要执行一次

"class": 作用于整个类, 表示每个类的所有测试方法只运行一次

"module": 作用于整个模块, 每个module的所有测试方法只运行一次.

"session": 作用于整个session, 每次session只运行一次. ⚠️(此方法慎用!!)

params: list类型,默认None, 接收参数值,对于param里面的每个值,fixture都会去遍历执行一次.

autouse: 是否自动运行,默认为false, 为true时此session中的所有测试函数都会调用fixture

以上的所有参数也可以不传

 

使用:

把返回值作为参数使用:某个功能函数如before上面放@pytest.fixture(),然后before可以作为参数放在需要用的函数里,选这个没错了。

直接使用:某个功能函数如before上面放@pytest.fixture(),然后需要用的函数或类上面放@pytest.mark.usefixtures("before")

 

skipif:

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

参数解释:

condition: 跳过的条件,必传参数

reason: 标注原因,必传参数

 

xfail:

@pytest.mark.xfail(condition=None, reason=None, raises=None, run=True, strict=False)

常用参数:

condition:预期失败的条件,必传参数

reason:失败的原因,必传参数

 

parametrize:

@pytest.mark.parametrize(argnames,argvalues)

参数值为N个,测试方法就会运行N次

常用参数:

argnames:参数名

argvalues:

参数对应值,类型必须为list

当参数为一个时,参数格式:[value]

当参数个数大于一个时,格式为:[(param_value1,param_value2.....),(param_value1,param_value2.....)]

 

运行:

pytest.main("d:/pyse/pytest/") # 指定测试目录

pytest.main("-q test_main.py") # 指定测试文件

pytest.main("-v -s spec_001_modul_test.py::test_001_spec") #运行模块中指定用例

pytest.main("-v -s spec_001_modul_test.py::Test_Class::test_003_spec") #运行类中指定用例

#运行spec_001_modul_test模块中用例名称包含spec的用例

pytest.main("-v -s -k spec spec_001_modul_test.py")

#运行当前文件夹匹配Test_Class的用例,类文件下面的用例

pytest.main('-s -v -k Test_Class')

pytest 目录/文件::类名::函数名 或者 pytest 目录/文件::函数名

 

其他:

不需要在main里面写pytest.main,只要是符合命名,默认为pytest启动,都会自动调用pytest

如果两个测试函数体里面的内容一样,只会输出一次结果。

改了哪儿,直接运行后测的就是哪儿。需要重新定位鼠标,一般放最后。这条很重要!

 

断言对比

unittest(3种):

  assertIn(expect,result)断言包含(被包含的写前面)

  assertEqual(expect,result)断言相等

  assertTure(条件)断言是否为真。返回Ture或False

pytest(5种,即python里的断言)

  assert xx:判断xx为真

  assert not xx:判断xx不为真

  assert a in b:判断b包含a

  assert a == b:判断a等于b

  assert a !=b,"判断a不等于b"(加上括号后面有说明)

 

 

后记

如果哪里不明白可以留下你的评论,如果觉得对你有帮助,记得关注我哦!pytest基本使用练习地址:https://gitee.com/teark/pytest_exercise.git,欢迎mark!


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM