
pytest测试框架
文章平均质量分 72
把苹果咬哭的测试笔记
喜欢分享软件测试、开发相关的各种知识。
展开
-
【pytest官方文档】解读- 开发可pip安装的第三方插件
在上一篇的 hooks 函数分享中,开发了一个本地插件示例,其实已经算是在编写插件了。今天继续跟着官方文档学习更多知识点。一个插件包含一个或多个钩子函数,pytest 正是通过调用各种钩子组成的插件,实现了配置、搜集、运行和报告的所有方面的功能。内置插件_pytest外部插件setuptools第一个内置插件的路径在这里,有兴趣的可以看下。第三个我们也很熟悉了,像之前写fixture函数以及本地hooks函数插件,都是在中。第二个外部插件中提到的setuptools是什么呢?原创 2022-10-26 20:17:56 · 677 阅读 · 0 评论 -
【pytest官方文档】解读- 插件开发之hooks 函数(钩子)
简单来说,在 pytest 的代码中,预留出了一些函数供我们修改,以便来改变pytest工作方式,这些函数就是hooks函数,我们可以直接重写函数里的内容。比如,在 pytest代码路径中,可以看到 pytest 定义好的 hook 规范,方便我们在开发插件的时候参考规范来调用对应的hooks函数。原创 2022-10-14 09:28:57 · 890 阅读 · 0 评论 -
【pytest官方文档】解读- 如何安装和使用插件
本节讨论安装和使用第三方插件。关于编写自己的插件,我们下一章继续。原创 2022-09-13 11:31:51 · 516 阅读 · 0 评论 -
【pytest官方文档】解读- 如何自定义mark标记,并将测试用例的数据传递给fixture函数
回到示例代码,我们可以先直接执行一下代码。测试是通过的(warning先忽略,因为没有注册自定义的mark),也就是说中的42是成功的带到了fixture函数中,经过函数中的处理后最后返回出来。其中的方法,是返回与名称fixt_data匹配的第一个mark,从最近的级别到更远的级别,比如从函数到模块级别。所以在这里,被找到的mark就是我们自定义的这个标记了。标记是使用工厂对象动态创建的,用于装饰器,所以我们可以用语法糖@直接使用即可。mark对象被创建之后,就被会收集起来,然后可以通过。原创 2022-09-06 09:44:22 · 738 阅读 · 0 评论 -
【pytest】使用parametrize将参数化变量传递到fixture
分享一个关于在pytest中,如何将测试用例文件中的变量传递到fixture函数。一、交代应用场景目前组内的项目,在根目录下是有一个conftest.py文件的,这里有个生成api token的fixture函数,就叫它gen_token()吧。每个case包下,也会有个conftest.py,用于存放适用于本模块下测试用例的fixture函数,比如有个叫setup_before()。...原创 2021-06-05 10:49:00 · 334 阅读 · 0 评论 -
【pytest官方文档】解读-fixtures函数和测试函数的参数化
Pytest会在以下几个级别启用测试参数化:pytest.fixture(),可以对fixture函数进行参数化。@pytest.mark.parametrize,可以在测试函数或类中定义多组参数和fixture。pytest_generate_tests,可以自定义参数化方案或扩展。一、@pytest.mark.parametrize:参数化测试函数1. 常规用法对测试函数的参...原创 2021-05-02 08:48:00 · 462 阅读 · 0 评论 -
【pytest官方文档】解读fixtures - 11. fixture的执行顺序,3要素详解(长文预警)...
当pytest要执行一个测试函数,这个测试函数还请求了fixture函数,那么这时候pytest就要先确定fixture的执行顺序了。影响因素有三:scope,就是fixture函数的作用范围,比如scope='class'。dependencies,可能会存在fixture请求了别的fixture,所以产生了依赖关系,也要考虑进去。autouse,如果autouse=True,那么在...原创 2021-04-26 00:03:00 · 431 阅读 · 0 评论 -
【pytest官方文档】解读fixtures - 10. fixture有效性、跨文件共享fixtures
一、fixture有效性fixture有效性,说白了就是fixture函数只有在它定义的使用范围内,才可以被请求到。比如,在类里面定义了一个fixture,那么就只能是这个类中的测试函数才可以请求。但是,如果一个fixture定义的范围是整个模块,那么这个模块下的每个测试函数都可以去请求。这里还有另一个影响fixture有效性的参数autouse=True,默认为False,等于True的...原创 2021-04-24 17:09:00 · 161 阅读 · 0 评论 -
【pytest官方文档】解读Skipping test functions,跳过测试用例详解
有时候,为了满足某些场景的需要,我们知道有些测试函数在这时候肯定不能执行,或者执行了也会失败。那么我们可以选择去跳过这个测试函数,这样也就不会影响整体的测试函数运行效果,不至于在你运行的众多绿色通过的测试用例中,给你加点红色的failed或者error。举个例子,有些测试函数只能在windows上运行,那么换了个Linux平台就不可以,就需要跳过这个测试函数。再比如,有些测试用例会有一些...原创 2021-04-21 08:50:00 · 323 阅读 · 0 评论 -
【pytest】case多执行慢?pytest-xdist分布式测试,了解一下
随着自动化项目开展逐步深入,case也会越写越多。那么随之而来的问题,就是case的运行时长越来越久了。此问题属于必须解决的那种,本着拿来主义思想,有现成的绝不自己造(其实我也不费造),我们自然能搜索到解决办法,而pytest-xdist就是其中之一,先附上地址。pytest-xdist是一个pytest分布式测试插件,通过它的拓展,我们的pytest又有了新的能力:并行运行测试:当你...原创 2021-04-16 00:07:00 · 331 阅读 · 0 评论 -
【pytest官方文档】解读fixtures - 8. yield和addfinalizer的区别(填坑)
在上一章中,文末留下了一个坑待填补,疑问是这样的:目前从官方文档中看到的是We have to be careful though, because pytest will run that finalizer once it’s been added, even if that fixture raises an exception after adding the finalizer....原创 2021-03-07 17:53:00 · 117 阅读 · 0 评论 -
【pytest官方文档】解读fixtures - 7. Teardown处理,yield和addfinalizer
当我们运行测试函数时,我们希望确保测试函数在运行结束后,可以自己清理掉对环境的影响。这样的话,它们就不会干扰任何其他的测试函数,更不会日积月累的留下越来越多的测试数据。用过unittest的朋友相信都知道teardown这个函数,做的是一样的事情,那么下面姑且就把这种“善后”工作的代码叫做teardown代码吧。而pytest中的fixture,也提供了这样一个非常有用的系统,我们可以在...原创 2021-03-06 19:42:00 · 404 阅读 · 0 评论 -
【pytest官方文档】解读fixtures - 6. Fixture errors,当fixtures抛错后
既然fixtures函数也是咱们自己写的,那难免会发生异常,当fixture函数异常后,pytest中如何处理呢?首先,在pytest中,如果一个测试函数中传入了多个fixture函数,那么pytest会尽可能的按线性顺序先后执行。如果,先执行的fixture函数有问题引发了异常,那么pytest将会停止执行这个测试函数的fixture,并且标记此测试函数有错误。但是,当测试被标记为有错误...原创 2021-03-04 11:14:00 · 141 阅读 · 0 评论 -
【pytest官方文档】解读fixtures - 5. fixtures的autouse
现在我们已经知道了,fixtures是一个非常强大的功能。那么有的时候,我们可能会写一个fixture,而这个fixture所有的测试函数都会用到它。那这个时候,就可以用autouse自动让所有的测试函数都请求它,不需要在每个测试函数里显示的请求一遍。具体用法就是,将autouse=True传递给fixture的装饰器即可。import pytest@pytest.fixtured...原创 2021-03-03 19:24:00 · 245 阅读 · 0 评论 -
【pytest官方文档】解读fixtures - 4. 一次请求多个fixtures、fixtures被多次请求
跟着节奏继续来探索fixtures的灵活性。一、一个测试函数/fixture一次请求多个fixture在测试函数和fixture函数中,每一次并不局限于请求一个fixture。他们想要多少就可以要多少。下面是另一个简单的例子:import pytest# Arrange@pytest.fixturedef first_entry(): return "a"# Ar...原创 2021-03-03 17:13:00 · 204 阅读 · 0 评论 -
【pytest官方文档】解读fixtures - 3. fixtures调用别的fixtures、以及fixture的复用性
pytest最大的优点之一就是它非常灵活。它可以将复杂的测试需求简化为更简单和有组织的函数,然后这些函数可以根据自身的需求去依赖别的函数。fixtures可以调用别的fixtures正是灵活性的体现之一。一、Fixtures调用别的Fixtures直接看一个简单示例:import pytest# Arrange@pytest.fixturedef first_entry():......原创 2021-03-03 13:59:00 · 270 阅读 · 0 评论 -
【pytest官方文档】解读fixtures - 2. fixtures的调用方式
既然fixtures是给执行测试做准备工作的,那么pytest如何知道哪些测试函数 或者 fixtures要用到哪一个fixtures呢?说白了,就是fixtures的调用。一、测试函数声明传参请求fixture测试函数通过将fixture声明为参数来请求fixture。def test_my_fruit_in_basket(my_fruit, fruit_basket): # ......原创 2021-03-03 10:11:00 · 221 阅读 · 0 评论 -
【pytest官方文档】解读fixtures - 1.什么是fixtures
在深入了解fixture之前,让我们先看看什么是测试。一、测试的构成其实说白了,测试就是在特定的环境、特定的场景下、执行特定的行为,然后确认结果与期望的是否一致。就拿最常见的登录来说,完成一次正常的登录场景,需要可用的测试环境,可以正常登录的账号和密码。然后,用这个账号密码进行登录操作,结果登录成功,符合这次正常登录场景的预期结果,测试完成。这样看来,通常就可以把测试分为4个步骤:......原创 2021-03-02 21:32:00 · 251 阅读 · 0 评论 -
【pytest】(十二)参数化测试用例中的setup和teardown要怎么写?
还是一篇关于pytest的fixture在实际使用场景的分享。fixture我用来最多的就是写setup跟teardown了,那么现在有一个用例是测试一个列表接口,参数化了不同的状态值传参,来进行测试。那么对于这个用例的setup跟teardown,我就要在setup里插入不同状态的测试数据,并且在测试完成后,在teardown里清除掉插入的数据。一、setup不过在插入数据的时候,我不......原创 2021-01-26 11:22:00 · 596 阅读 · 0 评论 -
【pytest】(十一)fixture参数化-巧用params和ids的真接口自动化实战
在上一篇文章中聊到了fixture的一些用法,利用params和ids这2个参数来实现对于测试数据初始的一些需求。【pytest】(十)fixture参数化-巧用params和ids优雅的创建测试数据但是文中的示例代码并不是真正的接口测试,只是用了一些print描述了下我的设想,以及一定的验证,缺乏实际应用。刚好最近抽空在写一些接口自动化,正好拿一个接口实践下。这个接口是一个列表接口,根据......原创 2020-11-10 20:57:00 · 261 阅读 · 0 评论 -
【pytest】(十)fixture参数化-巧用params和ids优雅的创建测试数据
我们都知道参数化。比如我要测试一个查询接口/test/get_goods_list,这个接口可以查询到商品的信息。在请求中,我可以根据请参数goods_status的不同传值,可以查询到对应状态的商品数据,比如:1-未销售、2-销售中、3-已售罄。那么在编写自动化测试case的时候,在断言里就要分别验证到这3种状态的商品数据。通常,在执行case之前,会去数据库分别插入对应状态的商品数据......原创 2020-11-02 19:59:00 · 756 阅读 · 0 评论 -
【pytest】(九)conftest.py是什么?
如果第三方插件满足不了自己的需求,那么就需要你自己定制化开发自己的插件了。正因如此,pytest的插件生态非常的丰富,一般的常规性需求基本上都可以找到现成的第三方插件。说到开发插件的话,还是要引入一个新的名词hook functions ,对于钩子函数是要另起一篇介绍的,那也是真正开发插件的开始。一个插件里包含了一个或者多个钩子函数,编写钩子函数可以实现功能丰富的插件,所以pytest框架......原创 2020-09-12 17:26:00 · 266 阅读 · 0 评论 -
【pytest】teardown里的yield和addfinalizer
在之前介绍pytest中的fixture用法的文章中https://zhuanlan.zhihu.com/p/87775743,提到了teardown的实现。最近在翻pytest官方文档的时候,又发现了addfinalizer这个函数,跟yield一样,也可以实现在case结束后运行关键字之后的代码。那今天就来捋一下这2者的用法和区别。一、yield再来简单回顾下pytest里的setUp......原创 2020-06-08 10:37:00 · 796 阅读 · 0 评论 -
【pytest】(八) pytest中plugin是什么?
惭愧惭愧,其实这个知识点吧,是我2年前就埋下的,结果到今天都。。。那时隔2年,咱今天就好好掰扯掰扯(其实就是逼着自己再好好阅读下英文文档o(╥﹏╥)o)。其实插件对大家来说很熟悉了,比如现在用的代码编辑器,你想要用其他额外的功能,那需要装个XX插件;你用谷歌浏览器,想要更便捷的查看页面元素,也可以装个XXX插件。。。所以pytest的插件也是用来增强这个框架功能的。一、第三方插件对于......原创 2018-10-27 22:20:00 · 452 阅读 · 0 评论 -
【pytest】(六) pytest中fixture的使用
上篇文章中提到了,在pytest中的fixture可以完成unitest中setUp、tearDown。今天就来详细看一下。一、pytest中的fixture是什么为可靠的和可重复执行的测试提供固定的基线(可以理解为测试的固定配置,使不同范围的测试都能够获得统一的配置),fixture提供了区别于传统单元测试(setup/teardown)风格的令人惊喜的功能,而且pytest做得更炫。二......原创 2018-09-10 22:05:00 · 314 阅读 · 0 评论 -
【pytest】(七) pytest的一些你爱不释手的插件
1. pytest-html安装:pip install pytest-html # 通过pip安装pytest-html运行测试文件的时候,命令行加上对应参数即可比如:pytest test_class.py --html=./report.html, (./report.html表示在当前目录下,创建名称叫report的html文件)效果大概就是酱紫的2. pytest-......原创 2018-09-10 17:16:00 · 122 阅读 · 0 评论 -
【pytest】(五) pytest中的断言
一、pytest 支持Python自带的标准断言def f(): return 3def test_function(): assert f() == 4pytest 的断言报告,也很丰富,和详情,比如:import pytestdef test_set_comparison(): set1 = set("1308") set2 = set("8035") a......原创 2018-09-10 13:45:00 · 191 阅读 · 0 评论 -
【pytest】(四) pytest的一些其他的运行用法
1. 可以设置当失败N个后停止测试pytest -x 是当第一个失败产生后,停止pytest --maxfail=2, 这里就是当失败2个用例后,停止测试2.pytest 在命令行模式下支持多种方式运行和选择运行pytest test_mod.py 运行这个文件(模块)pytest testing/ 运行指定目录下的测试文件3. 指定运行文件下具体类下的具体方法,用:: ......原创 2018-09-05 22:46:00 · 178 阅读 · 0 评论 -
【pytest】(三) pytest运行多个文件
1.运行多个测试文件pytest 会运行 test_ 开头 或者 _test 结尾的文件,在当前目录和子目录中2. 一个类下的多个用例的运行, pytest会找到 test_ 开头的方法import pytestclass TestClass(object): def test_one(self): x = "this" assert 'h' in x def test......原创 2018-08-28 08:55:00 · 2913 阅读 · 0 评论 -
【pytest】(二) pytest与unittest的比较
一、 为什么我用了pytest后就会喜欢上它pytest的框架规范更自由在使用unittest编写测试用例的时候,需要遵循先创建testclass,测试类继承unittest.TestCase的固定格式。例如:而pytest不需要,可以直接写def test_XXX()即可,写法是python原生。二、setUp与tearDown(pytest中的fixture)个人觉得fixtur......原创 2018-08-27 13:22:00 · 185 阅读 · 0 评论 -
【pytest】(一) 初识pytest
一、关于pytest的简介以前自己学习使用unittest测试框架的时候,在使用过程中,会遇到些疑惑。在查询资料解决问题的过程中,了解到了Python下的第三方单元测试框架:pytest。那么pytest有什么优点呢?简单总结下:pytest 是一个非常成熟的全功能的Python测试框架可以胜任unittest能做到的各种场景,比如:单元测试、接口测试、web测试等等pytest更是.........原创 2018-08-27 13:11:00 · 141 阅读 · 0 评论