自动化测试框架unittest与pytest的区别!

这篇具有很好参考价值的文章主要介绍了自动化测试框架unittest与pytest的区别!。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

引言

  前面文章已经介绍了python单元测试框架,大家平时经常使用的是unittest,因为它比较基础,并且可以进行二次开发,如果你的开发水平很高,集成开发自动化测试平台也是可以的。而这篇文章主要讲unittest与pytest的区别,pytest相对unittest而言,代码简洁,使用便捷灵活,并且插件很丰富。

Unittest vs Pytest

  主要从用例编写规则、用例的前置和后置、参数化、断言、用例执行、失败重运行和报告这几个方面比较unittest和pytest的区别:

用例编写规则

自动化测试框架unittest与pytest的区别!,软件测试,pytest

用例前置与后置条件

自动化测试框架unittest与pytest的区别!,软件测试,pytest

断言

自动化测试框架unittest与pytest的区别!,软件测试,pytest

测试报告

自动化测试框架unittest与pytest的区别!,软件测试,pytest

失败重跑机制

自动化测试框架unittest与pytest的区别!,软件测试,pytest

参数化

自动化测试框架unittest与pytest的区别!,软件测试,pytest

用例分类执行

自动化测试框架unittest与pytest的区别!,软件测试,pytest

 如果不好看,可以看下面表格:

自动化测试框架unittest与pytest的区别!,软件测试,pytest

  总体来说,unittest用例格式复杂,兼容性无,插件少,二次开发方便。pytest更加方便快捷,用例格式简单,可以执行unittest风格的测试用例,无须修改unittest用例的任何代码,有较好的兼容性。pytest插件丰富,比如flask插件,可用于用例出错重跑,还有xdist插件,可用于设备并行执行,效率更高。

实例演示

  讲了七大区别,总要演示一下具体实例,用事实说话。

前后置区别

  这里抽用例前置与后置的区别来讲,先看unittest的前后置使用:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

import unittest

class TestFixtures01(unittest.TestCase):

    # 所有用例执行前执行

    def setUp(self) -> None:

        print("setUp开始")

    def tearDown(self) -> None:

        print("tearDown结束")

    # 每条用例执行前执行

    @classmethod

    def setUpClass(cls) -> None:

        print("setUpClass开始")

    @classmethod

    def tearDownClass(cls) -> None:

        print("tearDownClass结束")

    # 测试用例

    def test_001(self):

        print("测试用例001")

class TestFixtures02(unittest.TestCase):

    def test_002(self):

        print("测试类2")

# 每个模块执行前执行

def setUpModule():

    """

    在所有测试类在调用之前会被执行一次,函数名是固定写法,会被unittest框架自动识别

    """

    print('集成测试 >>>>>>>>>>>>>>开始')

def tearDownModule():

    print("集成测试 >>>>>>>>>>>>>>结束")

if __name__ == '__main__':

    unittest.main()

运行结果:

自动化测试框架unittest与pytest的区别!,软件测试,pytest

从结果上得知, 三个方法的逻辑优先级: setUp()&tearDown() < setUpClass()&tearDownClass() < setUpModule()&tearDownModule()

接下来看pytest的前后置:

1、我们都知道在自动化测试中都会用到前后置,pytest 相比 unittest 无论是前后置还是插件等都灵活了许多,还能自己用 fixture 来定义。

首先了解一下,用例运行前后置级别如下:

  1.模块级:全局的,整个模块开只运行一次,优先于测试用例。

  2.类级别:定义在类里面,只针对此类生效。类似unittest的cls装饰器

  3.函数级:只对函数生效,类下面的函数不生效。

  4.方法级:定义在类里面,每个用例都执行一次

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

def setup_module():

    print('\n整个模块 前 只运行一次')

def teardown_module():

    print('\n整个模块 后 只运行一次')

def setup_function():

    print('\n不在类中的函数,每个用例 前 只运行一次')

def teardown_function():

    print('\n不在类中的函数,每个用例 后 只运行一次')

def test_ab():

    b = 2

    assert b < 3

def test_aba():

    b = 2

    assert b < 3

class Test_api():

    def setup_class(self):

        print('\n此类用例 前 只执行一次')

    def teardown_class(self):

        print('\n此类用例 后 只执行一次')

    def setup_method(self):

        print('\n此类每个用例 前 只执行一次')

    def teardown_method(self):

        print('\n此类每个用例 后 执行一次')

    def test_aa(self):

        a = 1

        print('\n我是用例:a')       # pytest -s 显示打印内容

        assert a > 0

    def test_b(self):

        b = 2

        assert b < 3

运行结果:

自动化测试框架unittest与pytest的区别!,软件测试,pytest

2、这是原始用法,下面看使用Fixture,Fixture 其实就是自定义 pytest 执行用例前置和后置操作,首先创建 conftest.py 文件 (规定此命名),导入 pytest 模块,运用 pytest.fixture 装饰器,默认级别为:函数级:

自动化测试框架unittest与pytest的区别!,软件测试,pytest

 其它用例文件调用即可,如下定义一个函数,继承 conftest.py 文件里的 login 函数即可调用:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

# conftest.py配置需要注意以下点:

# conftest.py配置脚本名称是固定的,不能改名称

# conftest.py与运行的用例要在同一个pakage下,并且有__init__.py文件

# 不需要import导入 conftest.py,pytest用例会自动查找

import pytest

def test_one(login):

    print("登陆后,操作111")

# def test_two():

#   print("操作222")

#

# def test_three(login):

#   print("登陆后,操作333")

运行结果:

自动化测试框架unittest与pytest的区别!,软件测试,pytest

3、扩展用法,多个自定义函数和全局级别展示:(全局的比如用于登录获取到token其他用例模块就不需要再登录了)

1

2

3

4

5

6

7

8

9

10

import pytest

def test_one(login):

    print("登陆后,操作111")

def test_two(login,open_page):

    print("测试用例2")

def test_three(open_page):

    print("测试用例3")

运行结果:

自动化测试框架unittest与pytest的区别!,软件测试,pytest

细心的人应该可以知道,测试用例2并没有调用login函数,因为前置设置的是共享模式,类似全局函数。

  参数化区别

参数化应用场景,一个场景的用例会用到多条数据来进行验证,比如登录功能会用到正确的用户名、密码登录,错误的用户名、正确的密码,正确的用户名、错误的密码等等来进行测试,这时就可以用到框架中的参数化,来便捷的完成测试。

参数化 就是数据驱动思想,即可以在一个测试用例中进行多组的数据测试,而且每一组数据都是分开的、独立的。

unittest参数化其实是:ddt,叫数据驱动。

pytest数据驱动,就是参数化,使用@pytest.mark.parametrize

1.先看unittest如何进行参数化:

1

2

3

4

5

6

7

8

9

test_data = [1,2,3]

@ddt.ddt

class Testddt(unittest.TestCase):

    @ddt.data(*test_data)

    def test_001(self,get_data):

        print(get_data)

if __name__ == '__main__':

    unittest.main()

运行结果:

自动化测试框架unittest与pytest的区别!,软件测试,pytest

2.pytest中参数化的用法

在测试用例的前面加上:
@pytest.mark.parametrize("参数名",列表数据)
参数名:用来接收每一项数据,并作为测试用例的参数。
列表数据:一组测试数据。

@pytest.mark.parametrize("参数1,参数2",[(数据1,数据2),(数据1,数据2)])
示例:
@pytest.mark.parametrize("a,b,c",[(1,3,4),(10,35,45),(22.22,22.22,44.44)])
def test_add(a,b,c):
res = a + b
assert res == c

实例:

1

2

3

4

5

6

7

@pytest.mark.parametrize('data',[1,2,3])

class Testddt(object):

    def test_001(self,data):

        print(data)

if __name__ == '__main__':

    pytest.main(['-sv'])

运行结果:

自动化测试框架unittest与pytest的区别!,软件测试,pytest文章来源地址https://www.toymoban.com/news/detail-608520.html

正在学习测试的小伙伴可以通过点击下面的小卡片

到了这里,关于自动化测试框架unittest与pytest的区别!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 自动化测试——unittest框架(单元测试)

    目录 一、unittest框架解析 1.1unittest的5个重要概念 1.1测试用例的编写及代码 1.2断言 1.3用例的执行顺序 1.4测试用例综合管理框架 1.5HTML报告生成 参考博文 unittest 单元测试提供了创建测试用例,测试套件以及批量执行的方案, unittest 在安装pyhton 以后就直接自带了,直接import

    2024年01月17日
    浏览(77)
  • unittest自动化测试框架详解

    目录 一、单元测试的定义 二、unittest框架及原理 三、unittest的断言 四、TestCase测试用例 五、TestFixure测试夹具 六、TestSuite测试套件 七、TestRunner执行用例 ​ 单元测试是指,对软件中的最小可测试单元在与程序其他部分相隔离的情况下进行检查和验证的工作,这里的最小可测

    2024年02月04日
    浏览(67)
  • 自动化测试框架之unittest

    unittest 是python 的单元测试框架,它主要有以下作用: 提供用例组织与执行 :当你的测试用例只有几条时,可以不必考虑用例的组织,但是,当测试用例达到成百上千条时,大量的测试用例堆砌在一起,就产生了扩展性与维护性等问题,此时需要考虑用例的规范与组织问题了

    2024年02月01日
    浏览(44)
  • 【接口自动化测试项目2.0】unittest与pytest无缝穿插对接,可以像postman一样编写代码

    📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📢交流讨论:欢迎加入我们一起学习! 📢资源分享:耗时200+小时精选的「软件测试」资料包 📢 最困难的时候,也就是我们离成功不远的时候! 接口自动化测试项目2.0 本框架主要是基于

    2024年02月03日
    浏览(61)
  • Python自动化测试框架:unittest介绍

    Unittest是Python中最常用的测试框架之一,它提供了丰富和强大的测试工具和方法,可以帮助开发者更好地保证代码质量和稳定性,本文就来介绍下Unittest单元测试框架。 unittest是Python的单元测试框架,它提供了一套丰富的测试工具和方法,包括测试用例、测试套件、断言、测试

    2024年02月05日
    浏览(57)
  • (六)Selenium自动化测试实战—unittest框架

    上一篇:(五)Selenium自动化测试实战—PO模式_要开朗的spookypop的博客-CSDN博客 先看下代码的运行效果: 运行自动化测试代码 unittest是python单元测试框架,它提供了一组丰富的工具来构建和运行测试,可以满足日常做自动化测试的需求。 上一篇详细的介绍了如何用PO模式写登

    2023年04月14日
    浏览(47)
  • Python自动化测试框架之unittest使用详解

    unittest是Python自动化测试框架之一,提供了一系列测试工具和接口,支持单元测试、功能测试、集成测试等多种测试类型。unittest使用面向对象的思想实现测试用例的编写和管理,可以方便地扩展和定制测试框架,支持多种测试结果输出格式 unittest 是python 的单元测试框架,它

    2024年02月07日
    浏览(53)
  • Python自动化测试实战篇:unittest框架详解

    按照测试阶段来划分,可以将测试分为单元测试、集成测试、系统测试和验收测试。单元测试是指对软件中的最小可测试单元在与程序其他部分相隔离的情况下进行检查和验证的工作,通常指函数或者类,一般是开发完成的。 单元测试可以将测试工作前移,及早发现问题,降

    2024年02月06日
    浏览(45)
  • 自动化测试概念(以及部分框架,selenium,unittest)

      能够代替手工测试的方法和工具都可以称为自动化测试      例如   针对不同的测试对象   web自动化   app自动化  接口自动化      针对不同的测试类型   功能测试自动化   链接测试自动化   性能测试自动化   安全测试自动化      实施自动化测试的目的在于

    2024年03月14日
    浏览(57)
  • Selenium+Unittest自动化测试框架实战(框架源码都给你)

    目录 前言 项目框架 首先管理时间 !/usr/bin/env python3 -- coding:utf-8 -- 配置文件 conf.py config.ini# 读取配置文件 记录操作日志 简单理解POM模型 管理页面元素 封装Selenium基类 创建页面对象 熟悉unittest测试框架 编写测试用例 执行用例 生成测试报告 执行并生成报告 发送结果邮件 se

    2024年02月15日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包