在python安装目录的lib/site-packges下,分为pytest.py 和_pytest目录
https://www.cnblogs.com/poloyy/category/1690628.html
python自动化的脚本开发完成后需提交到git代码仓库,接下来就是用Jenkins拉取代码去构建自动化代码了
The pytest framework makes it easy to write small, readable tests, and can scale to support complex functional testing for applications and libraries. 这段话很好地阐述了Pytest的设计思想与强大的特性。之前详细地阐述了Pytest测试框架搜索规则、Pytest测试框架执行方式、Pytest测试框架参数化与Pytest测试框架Fixture详解,本文章主要详细地阐述下Pytest测试框架中Conftest.py特性。
pytest提供的很多钩子(Hooks)方法方便我们对测试用例框架进行二次开发,可以根据自己的需求进行改造。 先学习下pytest_runtest_makereport这个钩子方法,可以更清晰的了解用例的执行过程,并获取到每个用例的执行结果。
前面讲 request 是pytest的一个内置 fixture ,作用是获取测试的上下文,可以通过request.config 获取配置对象。 pytestconfig 的作用跟 request.config 是一样的,都是获取配置对象
pytest-html报告中当用到参数化时候,获取用例的nodeid里面有中文时候,会显示[\u6350\u52a9\u6211\u4eec]这种编码(再次声明,这个不叫乱码,这是unicode编码) 关于python2和python3里面Unicode编码转化可以参考之前写的一篇pytest文档20-pytest-html报告优化 本篇以python3.6版本为例
freeze_includes: 返回包括 cx_freeze 提供的 pytest 使用的模块名称列表。 源码:
在Python的编程语言中,单元测试框架主要是pytest,unittest,和nose,其中应用最广泛的是unittest和pytest测试框架,unittest测试框架是内置的模块,安装完Python的解释器后,就可以直接导入使用,但是使用它的时候必须是继承TestCase类,才可以调用里面的方法,但是缺陷也是很明显的,它只能应用于面向对象的编程方式,无法应用于函数式的编程方式,Python语言它的优势的是可以是面向对象的编程方式,也可以是函数式的编程方式。pytest就显得自由,它把每一个以test_开头或者是_test结尾的都看成是一个测试对象,同时它的断言是Python的原生断言assert,这样使用起来更加的自由,只要编写的不管是模块还是类,符合它的要求,都是可以执行的。但是前提是需要安装pytest,它是属于第三方的库,安装的命令为:
1 引入 和setup、teardown的区别是:fixture可自定义测试用例的前置条件; setup、teardown针对整个脚本全局生效,可实现在执行用例前后加入一些操作; setup、teardown不能做到灵活使用,比如用例A先登陆,用例B不需要登陆,用例C需要登陆,这样使用fixture更容易实现功能。 2 fixture参数说明 2.1 fixture源码 部分源码如下: def fixture( fixture_function: Optional[_FixtureFunction]
前面一篇已经学会了使用hook函数改变pytest运行的结果,代码写在conftest.py文件,实际上就是本地的插件了。 当有一天你公司的小伙伴觉得你写的还不错,或者更多的小伙伴想要你这个功能,于是你就想着放到github上,写成一个插件,方便小伙伴使用pip去安装。
pytest-HTML是一个插件,pytest用于生成测试结果的HTML报告。兼容Python 2.7,3.6
有一点首先需要确认的的是,pytest中的fixture是pytest用于将测试前后进行预备,清理工作的代码分离出核心测试逻辑的一种机制。但是我们更加希望的是在一个测试套件中,能够共享fixture的机制,这样所一个测试套件里面的所有测试点都能够共同使用,和我在早期介绍的分离测试固件的思想有点雷同。在pytest中通过conftest.py来共享fixture,如果希望多个测试文件共同使用一个fixture时候,可以在该目录下创建conftest.py文件,但是切记该文件绝对不能倒入使用,这点一定要注意,创建conftest.py文件后,把需要的fixture加入到里面,就可以使用了。先来一个简单的案例,在一个包中,有三个测试模块,每个测试点都显示开始前执行和结束后执行,也就是说,每个测试点执行的时候,先打印测试开始,然后执行测试点,然后最后打印测试结束,见案例代码:
在上一篇Pytest系列文章:Pytest之收集用例及命令行参数,主要介绍Pytest用例收集规则及常用的命令行参数。
fail:翻译过来大致意思为 执行测试输出给定的消息并将结果显示为失败。 源码:
param: 在 pytest.mark.parametrize 中可以作为一个指定的参数进行调用。 源码:
在PyCharm中打开examples/httpbin/basic_test.py:
之前装的插件是 pytest-allure-adaptor,但是新的 pytest 以及 allure 当中,插件的名字改名了,现在叫做allure pytest。
最近好多小伙伴后台留言询问关于playwright的一些问题,在这里我大概说一下我自己的感受。
在上篇Pytest基础指南之介绍、环境及安装我们已经初步的介绍了Pytest的概念、环境安装及特色,在本文中,我们将介绍如何利用Pytest来兼容基于unittest所编写的测试代码。
在前面对Pytest做了大概的概述,本节中主要总结Pytest在编写测试用例方面的的知识体系。在实际的工作中,并不是所有的测试用例都是需要执行的,某些测试用例不想被执行,可以添加一个忽略执行,这地方就会使用到装饰器,如果对装饰器不熟悉的同学可以看看我的函数知识体系
2. 掌握Windows下Anaconda的简单使用,包括IDLE、Jupyter Notebook、Spyder工具的使用。
在之前的文章中主要分享了 pytest 的实用特性,接下来讲 Pytest 参数化用例的构建。
pytest 使用 parametrize 参数化的时候,有多组测试数据,需要对其中的一些测试数据加标记跳过,可以用pytest.param实现。
pytest.main 其实 就是将 命令行执行命令使用 ide 工具在运行函数中进行了操作。
会遇到在很多用例当中,它的前置条件是长得一样的。用例写的越来越多的时候,肯定会遇到前置条件都差不多,大家差距不是很大。这样的话,如果每个py文件都写个setUp和tearDown,就重复率挺高的。要是能拎取出来做个公共的就好了。
raises: 在断言一些代码块或者函数时会引发意料之中的异常或者其他失败的异常,导致程序无法运行时,使用 raises 捕获匹配到的异常,可以继续让代码正常运行。 源码:
warns: 使用 pytest.warns 可以检查代码是否发出特定的警告信息,使用方法与 raises 类似。 源码:
参数化是自动化测试里面必须掌握的一个知识点,用过 unittest 框架的小伙伴都知道使用 ddt 来实现测试用例的参数化。 pytest 测试用例里面对应的参数可以用 parametrize 实现,随着用例的增多,我们的需求也会越来越多,那么如何在 fixture 中使用参数呢?
小编在搭建组内接口自动化框架过程中使用过两个HTML报告框架,Pytest-HTML和Allure,本文主要介绍下Pytest-HTML。
前面介绍了Pytest-html的插件,今天主要介绍Pytest生成Allure的测试报告。Allure的官方地址为:https://docs.qameta.io/allure/。在Allure的的框架里面可以指定测试报告的Title以及其他的信息,可以依据自己的需求来自定义测试报告。首先需要安装插件allure-pytest,安装的命令为:
不管是UI自动化测试用例还是API的自动化测试用例,在编写的使用都需要注意每个测试用例执行的独立性,也就是说编写的每个测试用例都是互相不依赖的,这样就不会因为A执行失败了导致B也执行失败,具体参考API测试用例编写规范的文章。当编写的测试用例很多的时候,就需要考虑它的执行效率。在Pytest测试框架中提供了pytest-xdist可以并发执行测试用例,来提升测试用例的执行速度。通常的情况下,测试用例的执行都是依据一定的规则来按顺序进行执行,这样的结果是每次执行的时候有的资源就只能被一个测试用例占用,而达不到测试用例执行的时候资源的共享,插件pytest-xdist插件可以很好的解决这个问题,一方面资源达到共享,基于第一点的考虑,也就达到了第二点的提升了测试执行的效率。
在前面的文章中介绍了Pytest中使用conftest.py来共享fixture,事实上我们可以通过Pytest中的配置文件pytest.ini来改变Pytest的执行方式,如指定pytest执行的最低版本,明确规定什么目录下的测试点是不可以执行的,那些目录下的测试点是可以执行的,以及执行过程中它的搜索规则,我们可以依据自己的需求来进行自定义。下面就依据这些来分别介绍这些的应用。不得不说,Pytest真的很自由,没有unittest那么多的拘束,这点比较自由。
前一篇文章《Python 中如何实现参数化测试?》中,我提到了在 Python 中实现参数化测试的几个库,并留下一个问题:
如果我们在执行自动化测试的时候,希望能在失败的时候保存现场,方便事后分析。 对于UI自动化,我们希望截图在测试报告中。 对于api自动化,我们希望截取出错的log在测试报告中。 我开始自己蛮干,写了两个出错截图的方法。
在使用pytest-assume的时候,它会等待测试函数执行结束才会抛出错误,这样我们可以执行更多,在最终的时候统一查看错误。
pytest登场!本文将在Django中引入pytest,原理是先执行tep startproject命令创建pytest项目文件,然后从数据库中拉取代码写入文件,最后调用pytest命令运行用例。为了提高运行效率,用例运行是并行的,采用了多线程和多进程,两个都有,这在最后有个单独小结进行比较完整的说明。因为用例运行是异步的,所以前端并不知道什么时候执行完才能拿到运行结果,可以发多个HTTP请求轮询,但这种方式并不优雅,本文将采用WebSocket来实现用例结果查询。具体内容为:
pytest 默认执行用例是根据项目下的文件夹名称按 ascii 码去收集的,module 里面的用例是从上往下执行的。
pytest 的插件完成之后,可以上传到 github,方便其他小伙伴通过 pip 源码安装。如果我们想通过 pip install packages 这种方式安装的话,需上传到 pypi 仓库
前面讲 pytestconfig 的时候,可以获取到 pytest.ini 里面的配置参数。 我们在写项目自动化用例的时候,有一些配置参数希望能加到配置里面,如configid, productid,以及测试环境的base_url地址,和账号相关信息。
本文将介绍如何使用Python、Pytest、Allure、Playwright和Jenkins实现测试自动化集成。通过将这些工具结合使用,可以实现自动化测试、测试结果报告、持续集成等功能,提高测试效率和质量。
pytest 是基于 unittest 实现的第三方测试框架,比 unittest 更加的简洁、高效,并且可以完美兼容 unittest 的测试代码,无需对其做任何的修改。
Pytest是基于python的一种单元测试框架,与python自带的unittest测试框架类似,但是比unittest框架使用起来更简洁,效率更高。
本文将介绍如何使用Python、Pytest、Allure、Selenium和Jenkins实现测试自动化集成。通过将这些工具结合使用,可以实现自动化测试、测试结果报告、持续集成等功能,提高测试效率和质量。
在Pytest的测试框架中,有很丰富的插件,还是接着之前的案例继续延伸来说这部分,今天主要介绍基于Pytest测试框架的测试报告部分,其实在Pytest测试框架里面,测试报告可以使用html的插件,也可以使用allure来生成测试报告,关于allure在使用会在下一个文章中详细的介绍它的使用。
领取专属 10元无门槛券
手把手带您无忧上云