后端开发工程师-测试与质量保证-PyTest_参数化测试用例.docx

后端开发工程师-测试与质量保证-PyTest_参数化测试用例.docx

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

PAGE1

PAGE1

PyTest参数化测试用例入门

1PyTest简介与安装

PyTest是一个强大的Python测试框架,它简化了测试的编写,提供了丰富的插件系统,可以轻松地扩展其功能。PyTest支持多种测试模式,包括单元测试、功能测试和集成测试,使得测试代码更加灵活和可读。

1.1安装PyTest

安装PyTest非常简单,可以通过pip命令进行安装:

pipinstallpytest

1.2PyTest的基本用法

创建一个简单的测试函数,以test_开头:

deftest_addition():

assert1+1==2

运行测试:

pytest

2参数化测试用例的基本概念

参数化测试允许你使用不同的数据集多次运行同一个测试函数,而无需为每组数据编写单独的测试函数。这不仅减少了代码重复,还提高了测试的覆盖范围和效率。

2.1使用pytest.mark.parametrize进行参数化

pytest.mark.parametrize是一个装饰器,用于指定测试函数的参数和对应的值列表。例如,测试一个函数add,我们可以使用参数化来测试不同的输入值:

importpytest

defadd(a,b):

returna+b

@pytest.mark.parametrize(a,b,expected,[

(1,1,2),#第一组数据

(0,0,0),#第二组数据

(-1,1,0),#第三组数据

])

deftest_add(a,b,expected):

assertadd(a,b)==expected

在这个例子中,test_add函数将被运行三次,每次使用不同的参数值。a,b,expected是参数列表,[(1,1,2),(0,0,0),(-1,1,0)]是对应的值列表。

2.2参数化测试的灵活性

参数化测试可以使用更复杂的数据结构,如字典或列表,来提供更丰富的测试场景。例如,测试一个函数multiply,我们可以使用字典来提供参数和预期结果:

importpytest

defmultiply(a,b):

returna*b

@pytest.mark.parametrize(params,[

{a:2,b:3,expected:6},

{a:-2,b:3,expected:-6},

{a:0,b:5,expected:0},

])

deftest_multiply(params):

assertmultiply(params[a],params[b])==params[expected]

在这个例子中,params是一个字典,包含了a、b和expected三个键。这样可以更方便地管理测试数据和预期结果。

2.3参数化测试的命名

为了提高测试的可读性,可以为参数化测试的每个实例命名。这可以通过ids参数来实现:

importpytest

defdivide(a,b):

returna/b

@pytest.mark.parametrize(a,b,expected,[

(10,2,5),

(10,0,None),

],ids=[normal_division,division_by_zero])

deftest_divide(a,b,expected):

ifb==0:

withpytest.raises(ZeroDivisionError):

divide(a,b)

else:

assertdivide(a,b)==expected

在这个例子中,我们为每组测试数据提供了一个描述性的名称。当测试失败时,这些名称将帮助我们更快地定位问题。

2.4参数化测试的边界条件

参数化测试特别适用于测试函数的边界条件。例如,测试一个函数is_even,我们可以使用参数化来测试边界值:

importpytest

defis_even(n):

returnn%2==0

@pytest.mark.parametrize(n,expected,[

(-2,True),

(-1,False),

(0,True),

(1,False),

(2,True),

(3,False),

],ids=[negative_even,negativ

文档评论(0)

kkzhujl + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档