【pytest】(十二)参数化测试用例中的setup和teardown要怎么写?

简介: 【pytest】(十二)参数化测试用例中的setup和teardown要怎么写?

还是一篇关于pytest的fixture在实际使用场景的分享。


fixture我用来最多的就是写setup跟teardown了,那么现在有一个用例是测试一个列表接口,参数化了不同的状态值传参,来进行测试。


那么对于这个用例的setup跟teardown,我就要在setup里插入不同状态的测试数据,并且在测试完成后,在teardown里清除掉插入的数据。


一、setup


不过在插入数据的时候,我不想要一次性的把所有状态的数据都插入进去。比如1,2,3,4,5 有5个状态的参数,我想执行1的时候,插入状态

1的数据,测试完成后,删除刚才插入的这条数据,后面以此类推。


那么,这里还是要用到参数传递的一个效果了,这个在之前的文章里也讲过,有兴趣可以去看下,这里不再赘述。


@pytest.fixture(params=[1, 2, 3, 4, 5])
def init_allot_task_status(request):
    status = request.param
    db = DB()
    insert_allot_task_sql = """
    INSERT INTO purchase_allot (`id`, `allot_sn`... )
    """.format(10000086, status)
    db.exec_sql(insert_allot_task_sql)
    yield status #这里把参数给出去,供测试用例使用
    delete_sql = "DELETE from sm_purchase_allot WHERE id = {}".format(10000086)
    print("执行delete-sql:", delete_sql)
    db.exec_sql(delete_sql)
    db.close()


yield之前,其实做的就是插入数据,并且通过yield把request.param拿到的参数给出去,给测试用例使用。


二、teardown


yield之后,则就是删除之前插入的数据了,这里我为了方便,插入的测试数据id取了一个单独的,所以删除的时候直接删除这个id的数据即可。


再来看一下测试用例


def test_allot_list_query_by_status(init_allot_task_status):
    """
    测试不同状态的列表查询
    在fixture中做了参数化
    1-待处理、2-处理中、3-已发货、4-已完成、5已取消
    """
    payload = {"status": init_allot_task_status} # 因为fixture中的yield做了参数的返回,这里可以直接使用
    r = requests.post(QA_URL + API_URL, json=payload, headers=HEADER)
    result = r.json()
    assert result["result"] == "ok"
    assert result["errmsg"] == "success"
    assert result["row"]["taskListOfPage"]["resultData"][0]["status"] == init_allot_task_status # 因为fixture中的yield做了参数的返回,这里可以直接使用


将fixture init_allot_task_status传入测试case中,这样的话 在case执行的时候会先执行fixture方法,而fixture在执行的时候,则会进行参数化,并且把每次使用的参数

返回给测试case,供测试用例发起请求,断言等使用。


三、执行测试


执行测试用例,可以看到最终的运行过程:


1268169-20210126111952688-1975083522.png


参数分别执行,并且在对应测试用例的开始跟结尾做好测试数据的插入和删除工作。

相关文章
|
2月前
|
人工智能 测试技术 调度
写用例写到怀疑人生?AI 智能测试平台帮你一键生成!
霍格沃兹测试开发学社推出AI智能测试用例生成功能,结合需求文档一键生成高质量测试用例,大幅提升效率,减少重复劳动。支持自定义提示词、多文档分析与批量管理,助力测试人员高效完成测试设计,释放更多时间投入核心分析工作。平台已开放内测,欢迎体验!
|
26天前
|
人工智能 自然语言处理 测试技术
让AI帮你跑用例-重复执行,不该成为测试工程师的主旋律
测试不该止步于重复执行。测吧科技推出用例自动执行智能体,通过AI理解自然语言用例,动态规划路径、自主操作工具、自动重试并生成报告,让测试工程师从“点点点”中解放,专注质量思考与创新,提升效率3倍以上,节约人力超50%,重构测试生产力。
|
6月前
|
测试技术 数据库 Python
解释测试中setup和teardown函数的应用。
总结起来,`setup`和 `teardown`函数就像扔宴会的主人,他们保障了宴会的流畅进行。他们是准备环境和清理现场的重要工作人员,他们的工作直接影响着我们的测试效率和质量。我们可以把 `setup`和 `teardown`想象成隐藏在幕后,默默为我们服务的工作者,他们做着我们需要但是往往忽视的工作。所以,下次当你写测试的时候,别忘了给你的 `setup`和 `teardown`留出足够的位置,因为他们的作用可能是你成功的保证。
138 14
|
5月前
|
测试技术 Python
Python测试报告生成:整合错误截图,重复用例执行策略,调整测试顺序及多断言机制。
如何组织这一切呢?你可以写一本名为“Python测试之道”的动作指南手册,或者创建一个包含测试策略、测试顺序、多断言机制的脚本库。只要你的测试剧本编写得足够独到,你的框架就会像一位执行任务的超级英雄,将任何潜伏于代码深处的错误无情地揪出来展现在光天化日之下。这些整理好的测试结果,不仅有利于团队协作,更像冒险故事中的精彩篇章,带给读者无尽的探索乐趣和深刻的思考。
135 10
|
10月前
|
前端开发 JavaScript 测试技术
使用ChatGPT生成登录产品代码的测试用例和测试脚本
使用ChatGPT生成登录产品代码的测试用例和测试脚本
266 35
|
10月前
|
存储 测试技术 API
pytest接口自动化测试框架搭建
通过上述步骤,我们成功搭建了一个基于 `pytest`的接口自动化测试框架。这个框架具备良好的扩展性和可维护性,能够高效地管理和执行API测试。通过封装HTTP请求逻辑、使用 `conftest.py`定义共享资源和前置条件,并利用 `pytest.ini`进行配置管理,可以大幅提高测试的自动化程度和执行效率。希望本文能为您的测试工作提供实用的指导和帮助。
917 15
|
测试技术
自动化测试项目学习笔记(五):Pytest结合allure生成测试报告以及重构项目
本文介绍了如何使用Pytest和Allure生成自动化测试报告。通过安装allure-pytest和配置环境,可以生成包含用例描述、步骤、等级等详细信息的美观报告。文章还提供了代码示例和运行指南,以及重构项目时的注意事项。
1049 1
自动化测试项目学习笔记(五):Pytest结合allure生成测试报告以及重构项目
|
SQL JavaScript 前端开发
基于Python访问Hive的pytest测试代码实现
根据《用Java、Python来开发Hive应用》一文,建立了使用Python、来开发Hive应用的方法,产生的代码如下
198 6
基于Python访问Hive的pytest测试代码实现
|
测试技术 Python
自动化测试项目学习笔记(四):Pytest介绍和使用
本文是关于自动化测试框架Pytest的介绍和使用。Pytest是一个功能丰富的Python测试工具,支持参数化、多种测试类型,并拥有众多第三方插件。文章讲解了Pytest的编写规则、命令行参数、执行测试、参数化处理以及如何使用fixture实现测试用例间的调用。此外,还提供了pytest.ini配置文件示例。
581 2
|
测试技术 Python
自动化测试项目学习笔记(二):学习各种setup、tearDown、断言方法
本文主要介绍了自动化测试中setup、teardown、断言方法的使用,以及unittest框架中setUp、tearDown、setUpClass和tearDownClass的区别和应用。
385 0
自动化测试项目学习笔记(二):学习各种setup、tearDown、断言方法