Pytest是python的一种单元测试框架。
入门简单,文档丰富
支持单元测试,功能测试
支持参数化,重复执行,部分执行,测试跳过
@pytest.mark.skip(reason='忽略执行该测试点')
def test_login_002():
pass
兼容其他测试框架(nose,unittest 等)
支持生成html报告
可集成CI环境(Jenkins 等)
第三方插件丰富,良好的自定义扩展性
https://www.jianshu.com/p/75c27fe23b4e
直接使用@pytest.mark.parametrize(自定义命令参数名称,数据源) 装饰器
@pytest.mark.parametrize("sucess_data", ld.sucess_data)
def test_1_sucess_login(self, sucess_data, start_app):
MyLog().info("成功登录测试用例")
bl(start_app).click_now_to_login()
lp(start_app).Login(sucess_data["username"], sucess_data["password"])
如果先使用unittest单元测试框架,再使用pytest单元测试框架,就可以明显感觉到pytest比unittest真的简洁、方便很多。
def test_login_001():
assert 1==1
'''tests包名 test_login.py:文件名'''
class TestBaidu(object):
def test_baidu_001(self):
pass
def test_baidu_002(self):
pass
package级别:python -m pytest -v tests
model级别:python -m pytest -v tests/test_login.py::test_login_001
class级别:python -m pytest -v tests/test_login.py::TestBaidu
按分类执行测试用例
python3 -m pytest -v -k "profile or register"
添加分组:@pytest.mark.login(组名) 分组执行python -m pytest -v -m "login"
执行失败立刻停止:python3 -m pytest -v -x test_login.py
指定失败次数:--maxfail:pytest -v -x --maxfail=2 -m login
定位错误:--lf pytest --lf -m login
忽略执行: -rs
pytest -rs
参考链接:https://blog.csdn.net/suruoxun/article/details/118945607
测试文件必须先 import unittest
测试类必须继承unittest.TestCase
测试方法必须以“test_”开头
测试类必须要有unittest.main()方法
unittest只有setup/teardown装载测试用例
测试文件名必须以“test_”开头
测试类以Test开头,并且不能带有 init 方法
测试方法必须以“test_”开头
除了有setup/teardown,还能更自由的定义fixture装载测试用例
unittest | pytest | |
---|---|---|
继承 | 测试类里需要继承unitttest.TestCase类 | pytest不需要继承,可以是函数也可以是类 |
参数化 | 需要依赖第三方库eg. ddt | 无需继承,直接用内部的parametrize |
测试报告 | 测试报告是HTMLTestRunner | Pytest-html或allure |
插件 | 无 | 很丰富,eg. pytest-cov |
失败重试 | 不支持失败重试 | 支持失败重试 |
断言 | 提供assertEqual、assertIn、assertTrue、assertFalse | 直接使用assert表达式:eg. assert 1==2 |
用例分类执行 | 默认执行全部用例,可通过加载testsuite执行部分模块的用例 | 可以通过pytest.mark标记用例,执行命令前加上参数‘-m’即可运行标记的用例 |