pytest.mark.parametrize
2023-5-31
| 2024-3-23
Words 4038Read Time 11 min
type
status
date
slug
summary
tags
category
icon
password
URL

对于使用pytest.mark.parametrize的case,如何运行其中某一个case

如果使用 pytest.mark.parametrize 装饰器生成多个测试用例,但只想运行其中的某一个测试用例,可以使用 -k 选项和关键字表达式来筛选要运行的测试用例。
  • k 选项用于指定一个字符串表达式,表示要匹配哪些测试用例的名字。如果一个测试用例的名字中包含该字符串表达式,则该测试用例会被运行;否则,该测试用例会被忽略。关键字表达式可以是一个单独的关键字、一个用逗号分隔的关键字列表、一个用空格分隔的关键字列表、一个正则表达式等等。
下面是一个示例,演示如何使用 -k 选项和关键字表达式来运行 pytest.mark.parametrize 装饰器生成的某一个测试用例:
pytest -k "test2"
pytest -k "test1 or test3"
在上面的示例代码中,我们使用 @pytest.mark.parametrize 装饰器为 test_mytest 函数生成了三个参数组的测试用例。其中,第一个参数组为 (1, 2, 3),第二个参数组为 (4, 5, 6),第三个参数组为 (7, 8, 9)。我们还使用 ids 参数为这三个测试用例分别指定了名字。
如果想要运行特定的测试用例,可以在关键字表达式中使用该测试用例的名字或关键字。例如,如果想要运行名字为 test2 的测试用例,可以使用以下命令:
这样就会运行名字包含 test2 的测试用例,即 (4, 5, 6) 这个参数组生成的测试用例。补充一下前面的回答,如果要运行 pytest.mark.parametrize 生成的某一个测试用例,可以在关键字表达式中使用该测试用例的名字或关键字,例如:
如果想要运行名字为 test2 的测试用例,可以使用以下命令:
这样就会运行名字为 test2 的测试用例,即 (4, 5, 6) 这个参数组生成的测试用例。
需要注意的是,关键字表达式支持一些高级的语法和操作符,例如正则表达式、逻辑运算、比较运算等等。可以参考官方文档中的 关键字表达式 部分,了解更多关于关键字表达式的用法和示例。
 
如果使用 pytest.mark.parametrize 装饰器生成多个测试用例,但只想运行其中的某一组数据的测试用例,可以使用 -k 选项和关键字表达式来筛选要运行的测试用例,并使用 args 参数来指定要运行的参数组。
args 参数是一个元组或列表,用于指定要运行的参数组的位置或索引。如果指定了 args 参数,则只有指定的参数组会被运行,其他参数组会被忽略。需要注意的是,args 参数的索引从 0 开始。
下面是一个示例,演示如何使用 -k 选项、关键字表达式和 args 参数来运行 pytest.mark.parametrize 装饰器生成的某一组数据的测试用例:
在上面的示例代码中,我们定义了一个使用 pytest.mark.parametrize 装饰器生成的三个测试用例,分别是 (1, 2, 3)(4, 5, 6)(7, 8, 9) 这三组参数。
如果想要单独运行第二组参数 (4, 5, 6) 生成的测试用例,可以使用以下命令:
这样就会运行名字为 test2 的测试用例,并且只运行参数组 (4, 5, 6) 生成的测试用例,即 x=4, y=5, z=6。注意,args 参数中的元组 (1,) 指定了要运行的参数组的位置或索引,这里的 1 表示第二组参数。
如果想要运行多个参数组的测试用例,可以在 args 参数中指定多个位置或索引,以列表或元组的形式传递。例如,如果想要运行第一组和第三组参数生成的测试用例,可以使用以下命令:
这样就会运行名字为 test1test3 的测试用例,并且只运行参数组 (1, 2, 3)(7, 8, 9) 生成的测试用例,即 x=1, y=2, z=3x=7, y=8, z=9
需要注意的是,args 参数只能用于运行特定的参数组的测试用例,而不能用于指定其他参数值或组合。如果需要指定其他参数值或组合,可以使用其他方法,例如使用 ids 参数为测试用例指定名字,然后使用 -k 选项和关键字表达式来运行指定的测试用例。
 

pytest.mark.parametrize的args的格式是什么样的

args@pytest.mark.parametrize 装饰器的一个可选参数,用于指定要运行的参数组的位置或索引。args 的格式可以是一个元组、列表或可迭代对象,其中每个元素都是一个包含参数值的元组或列表。
每个元组或列表的长度必须与 @pytest.mark.parametrize 装饰器定义的参数数量相同,并且元素的顺序必须与装饰器中定义的参数顺序相同。例如,如果装饰器定义了三个参数 (x, y, z),那么 args 中的每个元素都必须包含三个参数值,例如 (1, 2, 3)[4, 5, 6] 或者 (7, 8, 9) 等等。
下面是一个示例,演示如何使用 args 参数为 @pytest.mark.parametrize 装饰器生成的测试用例指定要运行的参数组:
在上面的示例代码中,我们定义了一个使用 @pytest.mark.parametrize 装饰器生成的三个测试用例,分别是 (1, 2, 3)(4, 5, 6)(7, 8, 9) 这三组参数。
如果想要只运行第一组参数 (1, 2, 3) 生成的测试用例,可以使用以下命令:
这样就会只运行参数为 x=1, y=2, z=3 的测试用例。
如果想要运行多个参数组的测试用例,可以在 args 参数中指定多个元组或列表,以列表或元组的形式传递。例如,如果想要运行第一组和第三组参数生成的测试用例,可以使用以下命令:
这样就会只运行参数为 x=1, y=2, z=3x=7,8, z=9 的测试用例。
需要注意的是,args 参数只能用于运行特定的参数组的测试用例,而不能用于指定其他参数值或组合。如果需要指定其他参数值或组合,可以使用其他方法,例如使用 ids 参数为测试用例指定名字,然后使用 -k 选项和关键字表达式来运行指定的测试用例。
 

args类型

在使用 @pytest.mark.parametrize 装饰器时,参数只有一个和多个会有一些区别。
如果只有一个参数,可以直接使用一个列表或元组来指定要运行的参数值,例如:
在上面的示例代码中,我们定义了一个使用 @pytest.mark.parametrize 装饰器生成的三个测试用例,分别是 123 这三个参数值。此时,在测试函数中,参数 x 将会按顺序取到上述的三个值,分别运行三个测试用例。
如果有多个参数,则需要使用嵌套的列表或元组来指定要运行的参数组合。例如:
在上面的示例代码中,我们定义了一个使用 @pytest.mark.parametrize 装饰器生成的三个测试用例,其中每个测试用例都包含两个参数 xy。使用嵌套的列表或元组,我们可以指定所有可能的参数组合,例如 (1, 2)(3, 4)(5, 6)
需要注意的是,当有多个参数时,参数值的顺序必须与装饰器中定义参数的顺序一致。例如,在上面的示例代码中,我们先定义了参数 x,再定义了参数 y,因此在指定参数值时,也要先指定 x 的值,再指定 y 的值。
此外,当有多个参数时,可以使用多个列表或元组来指定每个参数的参数值。例如:
在上面的示例代码中,我们使用了两个 @pytest.mark.parametrize 装饰器,分别为参数 xy 指定了参数值。这样,我们可以指定每个参数的参数值,例如 (1, 4)(1, 5)(1, 6)(2, 4)(2, 5)(2, 6)(3, 4)(3, 5)(3, 6) 这九个参数组合,总共运行九个测试用例。
需要注意的是,当有多个参数时,使用多个 @pytest.mark.parametrize 装饰器指定参数值时,每个装饰器都必须指定参数的参数值,且参数值的顺序需要与参数在测试函数中的顺序一致。
 
 

pytest.mark.parametrize 里的argvalues 和ids怎么对应的

@pytest.mark.parametrize 装饰器可以使用 argvaluesids 参数来指定参数值和参数标识。argvalues 参数用于指定参数值,可以是一个列表、元组或生成器,每个元素代表一个参数组合。ids 参数用于指定参数标识,可以是一个列表、元组或生成器,每个元素代表一个参数组合的标识。
argvalues 参数和 ids 参数是按照索引位置进行对应的,即第一个元素表示第一个参数组合,第二个元素表示第二个参数组合,以此类推。如果 ids 参数未指定,则使用 argvalues 参数的每个元素作为默认的参数标识。如果 ids 参数与 argvalues 参数的元素个数不匹配,则会抛出 ValueError 异常。
下面是一个使用 argvaluesids 参数的示例:
 
 
Python 抽象类pytest中pytest_addoption用法
Loading...