前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >pytest这么多参数化用法,你用过几个?

pytest这么多参数化用法,你用过几个?

作者头像
软件测试君
发布2020-11-25 12:22:27
3.3K1
发布2020-11-25 12:22:27
举报
文章被收录于专栏:测试人生测试人生
一、前言

Pytest中装饰器@pytest.mark.parametrize('参数名',list)可以实现测试用例参数化,类似DDT

二、如何使用
  • 第一个参数是字符串,多个参数中间用逗号隔开
  • 第二个参数是list,多组数据用元祖类型;传三个或更多参数也是这样传。list的每个元素都是一个元组,元组里的每个元素和按参数顺序一一对应
  • 传一个参数 @pytest.mark.parametrize('参数名',list) 进行参数化
  • 传两个参数@pytest.mark.parametrize('参数名1,参数名2',[(参数1_data[0], 参数2_data[0]),(参数1_data[1], 参数2_data[1])]) 进行参数化
1、一个参数一个值

示例代码如下:

代码语言:javascript
复制
# 一个参数一个值
@pytest.mark.parametrize("input", ["输入值"])
def test_case1(input):
    print("\n" + input)
    assert input == "输入值"

运行结果如下图:

2、一个参数多个值

示例代码如下:

代码语言:javascript
复制
@pytest.mark.parametrize("input", ["输入值1", "输入值2", "输入值3", "输入值4", "输入值5"])
def test_case2(input):
    print("\n" + input)
    assert '输入值' in input

运行结果如下:

3、多参数多值

示例代码如下:

代码语言:javascript
复制
@pytest.mark.parametrize("userName","passWord",[("xiaoqiang","123456"),("rose","123456")("jone","123456")("Alex","123456")])
def test_login(userName,password):
    print(userName+" : "+password)
    assert userName =='rose'

运行结果如下:

4、多个参数化的混合使用

有点类似笛卡尔积的意思,示例代码如下:

代码语言:javascript
复制
data1 = [1, 2]
data2 = ["python", "java"]
data3 = ["软", "件", "测", "试", "君"]


@pytest.mark.parametrize("a", data1)
@pytest.mark.parametrize("b", data2)
@pytest.mark.parametrize("c", data3)
def test_case3(a, b, c):
    print(f"生成新的数据组合为:[{a} {b} {c}]")

运行结果如下:

5、参数化 ,传入字典数据

示例代码如下:

代码语言:javascript
复制
json=({"username":"alex","password":"123456"},{"username":"rongrong","password":"123456"})
@pytest.mark.parametrize('json', json)
def test_parametrize_1(json):
    print(f'字典为\n{json}')
    print(f'username : {json["username"]}, password : {json["password"]}')

运行结果如下:

6、参数化集合标记的使用

示例代码如下:

代码语言:javascript
复制
@pytest.mark.parametrize("user,pwd",
                         [("xiaoqiang", "123456"), ("rose", "123456"),
                          pytest.param("jone", "123456", marks=pytest.mark.xfail),
                          pytest.param("Alex", "123456", marks=pytest.mark.skip)])
def test_login(user, pwd):
    print(user + " : " + pwd)
    assert user == "rose"

运行结果如下:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-11-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 软件测试君 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、前言
  • 二、如何使用
  • 1、一个参数一个值
  • 2、一个参数多个值
  • 3、多参数多值
  • 4、多个参数化的混合使用
  • 5、参数化 ,传入字典数据
  • 6、参数化集合标记的使用
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档