使用@pytest.mark.parametrize进行参数传递测试

摘自:https://blog.csdn.net/sunny_happy08/article/details/83658661

最近因工作需要用到@pytest.mark.parametrize()传多个参数,实现执行不同数据。

我的需求
数据源是excel,excel的每一行都是一条测试用例,已实现读取测试用例和处理测试用例的逻辑。接下来就是将这些测试数据通过pytest.mark.parametrize()传入测试函数,循环执行这些测试数据,每次执行时都需要assert用例结果, 以便将测试结果展示到pytest的结果文件中(通过pytest --html=./report/report.html)
     实现可行性  
上篇文章已经很详细的指出了用@pytest.mark.parametrize()传多个参数实现执行不同数据的情况。通过上篇文章的例子,我们发现,pytest会自动执行循环,且对用户是透明的,用户不需要自己去写循环逻辑。直接将测试的list丢进去,就会循环执行,这是我们所期望的。也是符合我的需求的。
      遇到问题
 安照这个逻辑,我只需要将excel读出来的所有数据当做一个list传到测试函数里就可以了,等着pytest自行调度执行,最后assert每条执行结果是True还是False就成了。实际是:pytest的确是执行了每条测试案例,虽然每条案例也写了assert,但是pytest把所有案例执行完了当做一个整体返回assert结果。pytest的执行记录里显示的也是只有一个案例。这个结果与我的预期是不一样的。怎么办?
       解决方案
  想不出原因,只好硬着头皮去写试验代码,由结果猜测原因了。
  难道不支持多个参数?不太可能,因为明明是写着多个参数的。那就是多个参数写法的问题咯。翻了代码发现,当传多个参      数时,第二个参数是多个元组组成的list。一一列出来写的。我是将这个元组参数化了,用一个形参穿进去的。有了这个猜        测,就写代码验证下,果然是这么个样子。
  通过执行试验代码发现,一一列出来写,是把每个元组的元素作为形参传进去的;按形参传是吧一个list传进去的,所以,一一列出会每个元素都会有一个结果,按形参传入就整个list执行完了才出结果。ok,问题解决。
       实验代码

执行结果

PS:当有多个参数都是list,且list的长度不一致时,要这样一一列出来就略尴尬了,记录一下pytest.mark.parametrize()的局限性的。另外,当@pytest.mark.parametrize()只一个参数时,是把list的每个元素当做形参传入的,会assert每次执行结果。

传一个参数时,两种写法都可以,具体看以下实例

写法一:

@pytest.mark.parametrize(‘name‘, [‘sunny‘, ‘kevinse‘, ‘jacky‘])

def test_name(name):

print name

写法二:

name_list = [‘sunny‘, ‘kevinse‘, ‘jacky‘]

@pytest.mark.parametrize(‘name‘, name_list)

def test_name(name):

print name

原文地址:https://www.cnblogs.com/fyly/p/11223287.html

时间: 2024-11-07 22:54:32

使用@pytest.mark.parametrize进行参数传递测试的相关文章

pytest.mark.parametrize()参数化的应用一

1 from page.LoginPage import Loginpage 2 import os, sys, pytest 3 4 base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 5 sys.path.append(base_dir) 6 7 8 class TestLogin(): 9 10 @pytest.mark.parametrize( 11 "name, password", 1

pytest.10.使用fixture参数化测试预期结果

From: http://www.testclass.net/pytest/test_api_with_expected_result/ 背景 接上一节v2ex网站的查看论坛节点信息的api. 我们在上一节的测试用例里只断言了返回值的name字段必须与我们传入的入参相同,但是返回值的id却没有进行判定.这一节里我们加强一下测试脚本,实现判断id的功能. 测试数据 python, id=90 java, id=63 nodejs, id=436 go, id=375 代码实现 在v2ex_api_

pytest 用 @pytest.mark.usefixtures("fixtureName")或@pytest.fixture(scope="function", autouse=True)装饰,实现类似setup和TearDown的功能

conftest.py import pytest @pytest.fixture(scope="class") def class_auto(): print("") print("class-begin") yield print("class-end") test_autouse.py 1 import pytest 2 3 4 @pytest.mark.usefixtures("class_auto"

标签不生效的处理方法:PytestUnknownMarkWarning: Unknown pytest.mark.wallet - is this a typo?...

今天在写代码的过程中遇到了这样一个warning:PytestUnknownMarkWarning: Unknown pytest.mark.test - is this a typo? 处理办法: 参考文档:https://docs.pytest.org/en/latest/mark.html 单个标签的话: 在contest里面添加代码: def pytest_configure(config): config.addinivalue_line( "markers", "

Pytest系列(12)- 测试结果生成HTML报告插件之pytest-html的详细使用

如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 环境前提 Python3.6+ 安装插件 pip3 install pytest-html -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com 快速入门 pytest --html=report.html 会在当前目录下创建一个report.html的测试

解决PytestUnknownMarkWarning: Unknown pytest.mark.welcome - is this a typo? You can register custom marks to avoid this warning

在项目下新建一个pytest.ini的配置文件,里面如下配置即可.markers=后面是标签名,如有多个,第二个开始要换行,且要缩进,不然会报错 [pytest] markers=welcome login 原文地址:https://www.cnblogs.com/my_captain/p/12704370.html

pytest文档9-参数化parametrize

前言 pytest.mark.parametrize装饰器可以实现测试用例参数化. parametrizing 1.这里是一个实现检查一定的输入和期望输出测试功能的典型例子 # content of test_expectation.py # coding:utf-8 import pytest @pytest.mark.parametrize("test_input,expected", [ ("3+5", 8), ("2+4", 6), (&

pytest 8 参数化parametrize

pytest.mark.parametrize装饰器可以实现用例参数化 1.以下是一个实现检查一定的输入和期望输出测试功能的典型例子 import pytest @pytest.mark.parametrize("test_input,expected",[("3+5",8),("2+4",6),("6*9",42)]) def test_add(test_input,expected): assert eval(test_i

用 pytest 测试 python 代码

Pytest 是一个比较成熟且功能完备的 Python 测试框架.其提供完善的在线文档,并有着大量的第三方插件和内置帮助,适用于许多小型或大型项目.Pytest 灵活易学,打印调试和测试执行期间可以捕获标准输出,适合简单的单元测试到复杂的功能测试.还可以执行 nose, unittest 和 doctest 风格的测试用例,甚至 Django 和 trial.支持良好的集成实践, 支持扩展的 xUnit 风格 setup,支持非 python 测试.支持生成测试覆盖率报告,支持 PEP8 兼容的