内置marker本文先讲usefixtures 、filterwarnings 、skip 、skipif 、xfail这5个。参数化的marker我会写在《pytest参数化》中,hook的marker我会写在《pytest hook》中,插件的marker(pytest-ordering、allure等)我会写在《pytest插件》中。当前只需知道有以上这些分类的marker即可,更多内容请关注后续文章。
最近一段时间准备写一篇《自动化测试框架一键动态切换测试环境》的实践总结,但由于要涉及到pytest fixture相关知识,遂决定先写一篇pytest fixture的基础介绍。
要注意as出的error并不是实际上抛出的异常,不能使用自定义异常的方法和属性,一般只检查str(error)
固件的名称默认为定义时的函数名,如果不想使用默认,可以通过 name 选项指定名称:
在前文我们初步介绍了Pytest基础指南之介绍、环境及安装及Pytest与unittest如何选择的问题(Pytest基础指南之如何选择unitttest与pytest),本文将全面的对Pytest的API进行介绍,以便初学者能进一步全面了解Pytest的魅力。
用例之间不应相互依赖,如果部分用例拥有相同的业务流程,如都需要,打开登录页->登录->点击添加商品菜单->进入添加商品页面 不建议使用以下方式,并使其按顺序执行。
在Python语言系中,有很多可用的自动化测试框架,比如早期大多数人会选用 unittest+HTMLTestRunner、Nose等,最近几年比较常用的有Robot Framework,Robot Framework它是Python下一款非常通用的测试框架,采用扩展插件的机制可以帮助我们实现几乎任何类型的自动化测试工作,如接口自动化测试、App自动化测试、Web UI自动化测试等,而针对Robot Framework框架系统性的使用和讲解,笔者年初出版上市过一本《自动化测试实战宝典》一书,感兴趣的,可参阅此书:重磅消息 |《自动化测试实战宝典:从小工到专家》隆重上市!。
unittest和pytest是Python的2个强大的测试框架,经常用来做UI自动化或接口自动化。unittest是PyCharm的默认集成工具,也是我们大多数人入门自动化的首选框架。pytest提供了更丰富的功能,相对的上手难度也要高一点。如果学了pytest后,想快速用pytest写项目,用于工作实践,那么可以试试我写的这款测试工具:tep,try easy pytest。
很多初学者都是从写 Python 脚本开始的,从一个人写脚本,逐渐的和团队一起写工程。
unittest是python自带的单元测试框架,它封装好了一些校验返回的结果方法和一些用例执行前的初始化操作,使得单元测试易于开展,因为它的易用性,很多同学也拿它来做功能测试和接口测试,只需简单开发一些功能(报告,初始化webdriver,或者http请求方法)便可实现。
本文中,云朵君将和大家一起学习Python中最好用的测试模块--Pytest,主要学习如下:
pytest 的钩子函数有很多,通过钩子函数的学习可以了解到pytest在执行用例的每个阶段做什么事情,也方便后续对pytest二次开发学习。 详细文档可以查看pytest官方文档https://docs.pytest.org/en/latest/reference.html#hooks
pytest 自动捕获级别为 WARNING 或以上的日志消息,并以与捕获的 stdout 和 stderr 相同的方式在每个失败测试的各自部分中显示它们。
在上一篇文章《Pytest fixture及conftest详解》中,我们介绍了fixture的一些关键特性、用法、作用域、参数等,本篇文章将结合fixture及conftest实现一键动态切换自动化测试环境。在开始前,我们可以先思考几个问题:动态切换测试环境的目的是什么(能够解决什么问题)?该如何实现(实现方案)?具体步骤是什么(实现过程)?
https://www.cnblogs.com/poloyy/category/1690628.html
前面介绍了pytest传统的前后置处理方法,通过一些实例,知道了它对处理前后置的场景是有一定的局限性。所以才引入fixture装饰器函数,fixture是pytest的核心功能,也是亮点功能,它可以灵活的处理很多特殊的场景,利用pytest做接口测试,熟练掌握fixture的使用方法,pytest用起来才会得心应手!
https://docs.pytest.org/en/7.1.x/reference/reference.html#pytest.fixture
conftest.py中的fixture可以用在当前目录及其子目录,不需要import,pytest会自动找。
测试用例参数化的时候,使用 pytest.mark.parametrize 参数化传测试数据,如果我们想引用前面 不同fixture 返回的数据当测试用例的入参,前面一篇用fixture 参数化 prams 来间接解决这个问题。 接下来用 pytest-lazy-fixture 插件可以直接在测试用例中参数化时 pytest.mark.parametrize 中使用 fixture
写这篇文章,整体还是比较坎坷的,我发现有知识断层,理解再整理写出来,还真的有些难。
前面简单介绍了如何使用pytest, 感觉介绍得太泛泛了。个人感觉,pytest的精髓在fixture. 学pytest就不得不说fixture,fixture是pytest的精髓所在,就像unittest中的setup和teardown一样,如果不学fixture那么使用pytest和使用unittest是没什么区别的(个人理解)。
在之前的介绍中,我们已经介绍了fixture的简单用法,但其实fixture还提供了两种非常优雅高效的写法,来完成测试执行前的处理操作与执行后的处理操作,即使用yield或addfinalizer来实现。本文我们将介绍使用yield来实现操作。
按 scope 的优先级,按顺序执行 s1,p1,m1,c1,f1(优先执行f3,之后a1,最后f1),f0,f2
执行顺序:module --> class --> function --> 用例
上一篇带大家初步了解Pytest的核心知识点fixture,这一篇我们将继续对fixture进行介绍,我们会对fixture的调用方式进行一些补充,另外我们会介绍Pytest是如何进行参数化的。
Pytest的fixture相对于传统的xUnit的setup/teardown函数做了显著的改进:
点击上方蓝字“ITester软件测试小栈“关注我,每周一、三、五早上 07:30准时推送。
今天记录一下最近学习pytest的过程中对fixture功能的总结,学习pytest就要好好的了解下它的精髓所在—fixture,就像了解unittest中的setup和teardown一样。接下来开始正题:
pytest官网地址:https://github.com/pytest-dev/pytest/
f ixture翻译过来就是固件装置,主要来配置测试资源,fixture是通过装饰器标注的。
自动化测试用例一般编写完后且又执行通过,都会提交到 git 仓库里。但是每次新增用例后,希望只执行未提交到 git 仓库里的用例。
首先我们来学习下pytest的用来做前置工作和清理工作的setup和teardown方法。
fixture是pytest的一个闪光点,pytest要精通怎么能不学习fixture呢?跟着我一起深入学习fixture吧。其实unittest和nose都支持fixture,但是pytest做得更炫。 fixture是pytest特有的功能,它用pytest.fixture标识,定义在函数前面。在你编写测试函数的时候,你可以将此函数名称做为传入参数,pytest将会以依赖注入方式,将该函数的返回值作为测试函数的传入参数。 fixture有明确的名字,在其他函数,模块,类或整个工程调用它时会被激活。 fixture是基于模块来执行的,每个fixture的名字就可以触发一个fixture的函数,它自身也可以调用其他的fixture。 我们可以把fixture看做是资源,在你的测试用例执行之前需要去配置这些资源,执行完后需要去释放资源。比如module类型的fixture,适合于那些许多测试用例都只需要执行一次的操作。 fixture还提供了参数化功能,根据配置和不同组件来选择不同的参数。 fixture主要的目的是为了提供一种可靠和可重复性的手段去运行那些最基本的测试内容。比如在测试网站的功能时,每个测试用例都要登录和退出,利用fixture就可以只做一次,否则每个测试用例都要做这两步也是冗余。
上期内容说到了pytest装饰器中的跳过、预期失败、以及数据参数化;还有分布式执行的内容。其中数据参数化,更是在日常工作中,必用到的一个点。
fixture区别于unnitest的传统单元测试(setup/teardown)有显著改进:
之前学习了fixture的基本使用,其中参数scope类似作用域,就是fixture的使用范围,那么针对scope的这几个值,他的执行顺序是怎样的?
@pytest.mark.parametrize添加indirect=True参数是为了把login当成一个函数去执行,而不是一个参数,并且将data当做参数传入函数。
在上一篇文章中分享了 pytest 的基本用法,本文进一步介绍 pytest 的其他实用特性和进阶技巧。
上一篇我们介绍了Pytest的调用方式,这一篇我们将介绍 Pytest 的核心知识点fixture
在讲pytest与unittest的区别文章中,我们知道其中一个区别就是参数化,unittest框架使用的第三方库ddt来参数化的,而pytest框架就直接使用装饰器@pytest.mark.parametrize来对测试用例进行传参。这个是针对测试方法来参数化,还有一种是针对前置处理函数来传参。但往往这两种是可以结合使用。
1 引入 和setup、teardown的区别是:fixture可自定义测试用例的前置条件; setup、teardown针对整个脚本全局生效,可实现在执行用例前后加入一些操作; setup、teardown不能做到灵活使用,比如用例A先登陆,用例B不需要登陆,用例C需要登陆,这样使用fixture更容易实现功能。 2 fixture参数说明 2.1 fixture源码 部分源码如下: def fixture( fixture_function: Optional[_FixtureFunction]
添加了 @pytest.fixture,如果 fixture 还想依赖其他 fixture,需要用函数传参的方式,不能用 @pytest.mark.usefixtures() 的方式,否则会不生效。
一个用例是可以传多个fixture参数的,如果fixture之间用依赖关系,也可以互相调用。
fixture里面有个scope参数可以控制fixture的作用范围:session > module > class > function
fixture是pytest特有的功能,它用pytest.fixture标识,定义在函数前面。在编写测试函数的时候,可以将此函数名称做为传入参数,pytest将会以依赖注入方式,将该函数的返回值作为测试函数的传入参数。 fixture有明确的名字,在其他函数,模块,类或整个工程调用它时会被激活。 fixture是基于模块来执行的,每个fixture的名字就可以触发一个fixture的函数,它自身也可以调用其他的fixture。 我们可以把fixture看做是资源,在你的测试用例执行之前需要去配置这些资源,执行完后需要去释放资源。比如module类型的fixture,适合于那些许多测试用例都只需要执行一次的操作。 fixture还提供了参数化功能,根据配置和不同组件来选择不同的参数。 fixture主要的目的是为了提供一种可靠和可重复性的手段去运行那些最基本的测试内容。比如在测试网站的功能时,每个测试用例都要登录和退出,利用fixture就可以只做一次,否则每个测试用例都要做这两步也是冗余。
setup、teardown 可以实现在执行用例前或结束后加入一些操作,但这种都是针对整个脚本全局的。
领取专属 10元无门槛券
手把手带您无忧上云