pytest介绍
pytest的使⽤
环境安装
pip install pytest
⼀、pytest 对⽐ unittest
1、unittest是python中的官⽅库,兼容性更好,更稳定,pytest在安装的时候,可能会出现和python版本的兼容问题。
2、unittest编写⽤例⼀定要以类的形式去编写,⽽且必须要继承TestCase,
3、pytest编写⽤例,既可以使⽤类的形式,⼜可以使⽤函数的形式,并且⽆需继承
4、unittest要⾃⼰加载⽤例到套件,再去执⾏,pytest更加智能,会⾃动查⽤例
5、pytest可以对⽤例打便签做分类管理,可以通过便签筛选⽤例,执⾏⽤例更加的灵活
6、pytest有⽤例失败重运⾏机制,unittest没有。
7、pytest⽀持的插件⾮常丰富,功能扩展性强。
8、pytest⽤例执⾏的前置后置处理更加灵活
9、执⾏顺序不⼀样,unittest是按照ASCLL码顺序执⾏,pytest是从上到下的顺序执⾏
python处理xml文件10、unittest有好多种断⾔⽅法,pytest只有assert
11.unittest参数化需要结合ddt使⽤,pytest有⾃⼰的参数化⽅法 @pytest.mark.parametrize装饰器
⼆、pytest 运⾏的⽅式
⽅式⼀:命令⾏输⼊ pytest
⽅式⼆:使⽤pycahrm以pytest⽅式运⾏⽤例⽂件⽅式三:创建⼀个启动⽂件:
⽅式三:创建⼀个启动⽂件:
运⾏参数
pytest.main()
指定测试模块:
# pytest ⽂件名
pytest test_mod.py
指定测试⽬录:
# pytest ⽂件路径
pytest testcases
指定测试⽤例执⾏:
# 测试节点的组成:
# py模块名::类名::函数名
pytest test_dome.py::TestLogin::test_login_pass
# pytest py模块名::函数名
pytest test_dome.py::test_demo2
通过关键字表达式过滤执⾏:
# 这条命令会匹配⽂件名、类名、⽅法名匹配表达式的⽤例
pytest -k "MyClass and not method"
通过标记表达式执⾏
# 这条命令会执⾏被装饰器 @pytest.mark.smoke 装饰的所有测试⽤例
pytest -m smoke
三、测试⽤例的规范
1、发现⽤例的规则
1、测试⽂件以 *_test.py 开头或者结尾
2、Test开头的类中test开头的⽅法【并且不能带有__init__⽅法】
3、模块中test开头的函数注意点:
1、pytest 是以⽅法为单位发现⽤例的,你写不写测试类根本不重要。
2、在那个⽬录下执⾏pytest,就在哪个⽬录下按照上述规则去查
2、⾃定义查规则:pytest.ini
[pytest]
# ⽂件以test开头和test(check开头和check结尾)结尾都会当成测试⽤例
python_files =
test*.py
*基础版1.py
cheack_*.py
test_*.py
# ⽅法以test开头和test(check开头和check结尾)结尾都会当成测试⽤例
python_functions =
test*
*test
check*
*check
# 类以test开头和test(check开头和check结尾)结尾都会当成测试⽤例
python_classes =
Test*
*Test
Check*
*Check
四、⽤例打标记
需求:有⼀部分⽼的⽤例,⼀部分新⽤例,我只想运⾏对⽤例进⾏标注,打标签1、注册标签
mark 注册:创建 pytest.ini ⽂件
五、⽤例执⾏顺序
1、unittest⽤例执⾏排序:
根据ASCII码来排序
2、pytest⽤例执⾏的顺序:
⽂件名称按 ASCII 码排序
⽂件内根据定义的的⽅法的先后顺序,从上到下执⾏
六、断⾔
使⽤关键字:assert断⾔
assert a % 2 == 0
七、测试报告
pip install pytest-html
# 第⼀种:log 普通⽂本: TextTestRunner
--resultlog= 相对路径
# 第⼆种:xml, ⽣成 xml ⽂件
--junitxml=l
# 第三种:html HTMLTestRunner,
--html=report/demo.html
# 第四种:allure :
allure 是⼀个通⽤的测试报告的框架。python, java,php, ruby
⼋、参数化(数据驱动)
pytest写的⽤例,如何实现⽤例数据参数化?使⽤pytest.parametrize
@pytest.mark.parametrize("⽤例⽅法中接收的参数名",数据)
九、fixture
"""
fixture(scope="function") 根据⽅法运⾏
fixture(scope="class") 根据类运⾏
fixture(scope="module") 根据模块运⾏
fixture(scope="package") 根据包运⾏
fixture(scope="session") 根据会话对象运⾏
fixture(autouse="True") autouse="True"会⾃动加到所有⽤例前后置
定义:
1.@pytest.fixture(scope="function")
2.@pytest.fixture(scope="class")
调⽤:
1.在⽤例⽅法参数中,写上前后置的⽅法名
2.在定义前后置⽅法的
注意点:前后置⽅法可以统⼀放到congtest.py⽂件中(⽤例⽂件中直接使⽤,不需要导⼊)⽅式⼀:
⽅式⼆:
⽅式三:
不⽤获取前置条件返回值:
获取前置条件返回值:
⼗、重运⾏机制
安装插件:
pip install pytest-rerunfailures
重运⾏
pytest --reruns 3 --reruns-delay 5
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论