当前位置: 首页 > 工具软件 > PyUnit > 使用案例 >

pytest简介 及 和unittest(pyunit)的区别

萧宏峻
2023-12-01

1、pytest简介

Pytest是python的一种单元测试框架。

1.1 pytest特点

入门简单,文档丰富
支持单元测试,功能测试
支持参数化,重复执行,部分执行,测试跳过

@pytest.mark.skip(reason='忽略执行该测试点')
def test_login_002():
   pass

兼容其他测试框架(nose,unittest 等)
支持生成html报告
可集成CI环境(Jenkins 等)
第三方插件丰富,良好的自定义扩展性

https://www.jianshu.com/p/75c27fe23b4e

1.2 pytest 参数化

直接使用@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真的简洁、方便很多。

1.3 pytest执行方法

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

2、用例识别规则

2.1 unittest

测试文件必须先 import unittest
测试类必须继承unittest.TestCase
测试方法必须以“test_”开头
测试类必须要有unittest.main()方法
unittest只有setup/teardown装载测试用例

2.2 pytest

测试文件名必须以“test_”开头
测试类以Test开头,并且不能带有 init 方法
测试方法必须以“test_”开头
除了有setup/teardown,还能更自由的定义fixture装载测试用例

3、pytest 和 unittest 区别

unittestpytest
继承测试类里需要继承unitttest.TestCase类pytest不需要继承,可以是函数也可以是类
参数化需要依赖第三方库eg. ddt无需继承,直接用内部的parametrize
测试报告测试报告是HTMLTestRunnerPytest-html或allure
插件很丰富,eg. pytest-cov
失败重试不支持失败重试支持失败重试
断言提供assertEqual、assertIn、assertTrue、assertFalse直接使用assert表达式:eg. assert 1==2
用例分类执行默认执行全部用例,可通过加载testsuite执行部分模块的用例可以通过pytest.mark标记用例,执行命令前加上参数‘-m’即可运行标记的用例
 类似资料: