前言 使用 pytest 执行 https 请求用例的时候,控制台会出现警告:InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. 当出现这个警告的时候,我们第一反应是加忽略警告:urllib3.disable_warnings(),然而并不管用. 问题描述 使用requests库发https请求,添加verify=F…
前言 上一篇pytest文档2-用例运行规则已经介绍了如何在cmd执行pytest用例,平常我们写代码在pycharm比较多 写完用例之后,需要调试看看,是不是能正常运行,如果每次跑去cmd执行,太麻烦,所以很有必要学习如何在pycharm里面运行pytest用例 pycharm运行三种方式 1.以xx.py脚本方式直接执行,当写的代码里面没用到unittest和pytest框架时,并且脚本名称不是以test_开头命名的,此时pycharm会以xx.py脚本方式运行 2.当脚本命名为test_x…
前言 pytest-HTML是一个插件,pytest用于生成测试结果的HTML报告.兼容Python 2.7,3.6 pytest-html 1.github上源码地址[https://github.com/pytest-dev/pytest-html] 2.pip安装 $ pip install pytest-html 3.执行方法 $ pytest --html=report.html html报告 1.打开cmd,cd到需要执行pytest用例的目录,执行指令:pytest --html=…
最近使用requests进行get请求的时候,控制台输出如下错误. InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. 最简单,不顾一切的解决办法.. import urllib3 urllib3.disable_warnings() 即可.测试,可行,而且对程序运行没有不良影响. 其实我也不明白这个错误是什么原因,…
InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings InsecureRequestWarning) 出现这个错误的原因是: requests 库其实是基于 ur…
前言 doctest从字面意思上看,那就是文档测试.doctest是python里面自带的一个模块,它实际上是单元测试的一种. 官方解释:doctest 模块会搜索那些看起来像交互式会话的 Python 代码片段,然后尝试执行并验证结果 doctest测试用例可以放在两个地方 函数或者方法下的注释里面 模块的开头 案例 先看第一个案例,将需要测试的片段,标准格式,需要运行的代码前面加>>> ,相当于进入cmd这种交互环境执行,期望的结果前面不需要加>>> >>…
前言 首先说下为什么要学pytest,在此之前相信大家已经掌握了python里面的unittest单元测试框架,那再学一个框架肯定是需要学习时间成本的. 刚开始我的内心是拒绝的,我想我用unittest也能完成自动化测试,干嘛要去学pytest呢?最近看到越来越多的招聘要求会pytest框架了,也有小伙伴出去面试说会unittest框架被鄙视的. 所以学此框架应该至少有以下2个理由,第一条已经足够: 学会了可以装逼 可以避免被面试官鄙视 python鄙视链:pytest 鄙视 > unittes…
前言 pytest 的插件完成之后,可以上传到 github,方便其他小伙伴通过 pip 源码安装.如果我们想通过 pip install packages 这种方式安装的话,需上传到 pypi 仓库 pypi仓库 pip,全称是:python install packages,它是一个通用的 Python 包管理工具,是easy_install的替代品, 主要是用于安装 PyPI 上的软件包. PyPI,全称是:Python Package Index,它是Python官方的第三方库的仓库,所…
前言 前面一篇已经学会了使用hook函数改变pytest运行的结果,代码写在conftest.py文件,实际上就是本地的插件了. 当有一天你公司的小伙伴觉得你写的还不错,或者更多的小伙伴想要你这个功能,于是你就想着放到github上,写成一个插件,方便小伙伴使用pip去安装. 插件开发 先新建一个工程,工程名称就是插件名称,一般以pytest-开头命名,目录结构如下 setup.py 在安装python的相关模块和库时,我们一般使用pip install 模块名或者python setup.py…
前言 pytest 运行完用例之后会生成一个 .pytest_cache 的缓存文件夹,用于记录用例的ids和上一次失败的用例. 方便我们在运行用例的时候加上--lf 和 --ff 参数,快速运行上一次失败的用例. --lf, --last-failed 只重新运行上次运行失败的用例(或如果没有失败的话会全部跑) --ff, --failed-first 运行所有测试,但首先运行上次运行失败的测试(这可能会重新测试,从而导致重复的fixture setup/teardown) --lf 和 --…
前言 什么是元数据?元数据是关于数据的描述,存储着关于数据的信息,为人们更方便地检索信息提供了帮助. pytest 框架里面的元数据可以使用 pytest-metadata 插件实现.文档地址https://pypi.org/project/pytest-metadata/ pytest-metadata 环境准备 使用 pip 安装 pytest-metadata pip install pytest-metadata 查看 pytest 元数据 使用pytest 执行用例的时候加上 -v 参…
前言 pytest-html报告中当用到参数化时候,获取用例的nodeid里面有中文时候,会显示[\u6350\u52a9\u6211\u4eec]这种编码(再次声明,这个不叫乱码,这是unicode编码) 关于python2和python3里面Unicode编码转化可以参考之前写的一篇[python笔记6-%u60A0和\u60a0类似unicode解码] 本篇以python3.6版本为例 遇到问题 官网文档https://github.com/pytest-dev/pytest-html上说…
前言: 虽然网上有很多邮件配置的文章,但还是想自己写一下配置的过程,因为在中间也碰到了不同坑.按照这个文档配置的话,99%都可以成功.   一.jenkins 配置邮箱 1.打开jenkins后进入点击Manage Jenkins-->configure system,找到Jenkins Location,系统管理员邮件地址要和下面的配置一致 2.下面以qq邮箱为例进行配置:点击高级之后,输入密码和邮箱的授权码   3.qq邮箱授权码的获取 然后点击账户-找到POP3/IMAP/SMTP/Exc…
前言 通常我们认为每个测试用例都是相互独立的,因此需要保证测试结果不依赖于测试顺序,以不同的顺序运行测试用例,可以得到相同的结果. pytest默认运行用例的顺序是按模块和用例命名的 ASCII 编码顺序执行的,这就意味着每次运行用例的顺序都是一样的. app 测试里面有个 monkey 测试,随机在页面点点点,不按常理的点点点能找到更多的不稳定性 bug.那么我们在写pytest用例的时候,既然每个用例都是相互独立的, 那就可以打乱用例的顺序随机执行,用到 pytest 的插件 pytest-…
前言 平常在做功能测试的时候,经常会遇到某个模块不稳定,偶然会出现一些bug,对于这种问题我们会针对此用例反复执行多次,最终复现出问题来. 自动化运行用例时候,也会出现偶然的bug,可以针对单个用例,或者针对某个模块的用例重复执行多次. pytest-repeat pytest-repeat是pytest的一个插件,用于重复执行单个用例,或多个测试用例,并指定重复次数,pytest-repeat支持的版本: Python 2.7, 3.4+ 或 PyPy py.test 2.8或更高 使用pip…
fixture作用范围 fixture里面有个scope参数可以控制fixture的作用范围:session > module > class > function fixture(scope="function", params=None, autouse=False, ids=None, name=None): """使用装饰器标记fixture的功能 ** 作者:上海-悠悠 QQ交流群:588402570** 可以使用此装饰器(带或…
前言 pytest.mark.skip可以标记无法在某些平台上运行的测试功能,或者您希望失败的测试功能 skip意味着只有在满足某些条件时才希望测试通过,否则pytest应该跳过运行测试. 常见示例是在非Windows平台上跳过仅限Windows的测试,或跳过测试依赖于当前不可用的外部资源(例如数据库). xfail意味着您希望测试由于某种原因而失败. 一个常见的例子是对功能的测试尚未实施,或尚未修复的错误. 当测试通过时尽管预计会失败(标有pytest.mark.xfail),它是一个xpas…
前言 上一篇讲到fixture通过scope参数控制setup级别,既然有setup作为用例之前前的操作,用例执行完之后那肯定也有teardown操作. 这里用到fixture的teardown操作并不是独立的函数,用yield关键字呼唤teardown操作 scope="module" 1.fixture参数scope="module",module作用是整个.py文件都会生效,用例调用时,参数写上函数名称就行 # 新建一个文件test_f1.py # codin…
前言 前面一篇讲到用例加setup和teardown可以实现在测试用例之前或之后加入一些操作,但这种是整个脚本全局生效的,如果我想实现以下场景: 用例1需要先登录,用例2不需要登录,用例3需要先登录.很显然这就无法用setup和teardown来实现了.这就是本篇学习的目的,自定义测试用例的预置条件 fixture优势 1.firture相对于setup和teardown来说应该有以下几点优势 命名方式灵活,不局限于setup和teardown这几个命名 conftest.py 配置里可以实现数…
前言 pytest-html测试报告默认是不展示用例描述Description内容,之前用unittest生成的报告是可以展示用例的描述,也就是test开头的用例下三个引号里面的注释(docstring)内容. pytest-html框架是可以修改生成的报告内容的,可以自己添加和删除html报告的table内容. 修改报告 pytest-html官方文档地址[https://pypi.org/project/pytest-html/] l可以通过为标题行实现自定义钩子来修改列,下面的示例在con…
前言 当我们自动化代码写完成之后,期望能在不同的环境测试,这时候应该把 base_url 单独拿出来,能通过配置文件和支持命令行参数执行. pytest-base-url 是 pytest 里面提供的一个管理 base-url 的一个非常实用的插件,参考文档https://pypi.org/project/pytest-base-url/ 环境准备 先安装 pytest-base-url 插件 pip install pytest-base-url 使用案例 直接在用例里面使用 base_url…
前言 为了提高代码的复用性,我们在写用例的时候,会用到函数,然后不同的用例去调用这个函数. 比如登录操作,大部分的用例都会先登录,那就需要把登录单独抽出来写个函数,其它用例全部的调用这个登陆函数就行. 但是登录的账号不能写死,有时候我想用账号1去登录,执行用例1,用账号2去登录执行用例2,所以需要对函数传参. 登录函数传参 把登录单独成立,写一个函数,传2个参数user和psw,写用例的时候调用登录函数,输入几组user,psw参数化登录用例 测试用例传参需要用装饰器@pytest.mark.p…
前言 allure是一个report框架,支持java的Junit/testng等框架,当然也可以支持python的pytest框架,也可以集成到Jenkins上展示高大上的报告界面. 环境准备 1.python3.6 2.windows环境 3.pycharm 4.pytest-allure-adaptor 5.allure2.7.0 6.java1.8 ** 作者:上海-悠悠 QQ交流群:588402570** pytest-allure-adaptor下载 pip安装pytest-allu…
前言 平常我们手工测试用例非常多时,比如有1千条用例,假设每个用例执行需要1分钟.如果一个测试人员执行需要1000分钟才能执行完,当项目非常紧急的时候, 我们会用测试人力成本换取时间成本,这个时候多找个小伙伴把任务分成2部分,于是时间缩减一半.如果是十个人一起执行,1000个用例理论上只需100分钟就能完成,时间缩短到了1/10.大大节省的测试时间,为项目节省了时间成本. 同样道理,当我们测试用例非常多的时候,一条条执行,很显然会比较慢,那么如何让测试用例并行执行呢,这就是我们接下来要讲的pyt…
前言 "80%的bug集中在20%的模块,越是容易出现bug的模块,bug是越改越多"平常我们做手工测试的时候,比如用100个用例需要执行,其中10个用例失败了, 当开发修复完bug后,我们一般是重点测上次失败的用例. 那么自动化测试也一样,当用例特别多时,为了节省时间,第一次部分用例失败了,修复完之后,可以只测上次失败的用例. pytest -h 命令行输入pytest -h,找到里面两个命令行参数: --lf 和 --ff --lf, --last-failed 只重新运行上次运行…
前言 一个测试工程下是可以有多个conftest.py的文件,一般在工程根目录放一个conftest.py起到全局作用. 在不同的测试子目录也可以放conftest.py,作用范围只在该层级以及以下目录生效. conftest层级关系 在web_conf_py项目工程下建两个子项目baidu.blog,并且每个目录下都放一个conftest.py和__init__.py(python的每个package必须要有__init__.py) web_conf_py是工程名称 ├─baidu │ │ c…
使用多个fixture 如果用例需要用到多个fixture的返回数据,fixture也可以return一个元组.list或字典,然后从里面取出对应数据. # test_fixture4.py import pytest @pytest.fixture() def user(): print("获取用户名") a = "yoyo" b = "123456" return (a, b) def test_1(user): u = user[0] p…
前言 fixture是pytest的核心功能,也是亮点功能,熟练掌握fixture的使用方法,pytest用起来才会得心应手! fixture简介 fixture的目的是提供一个固定基线,在该基线上测试可以可靠地和重复地执行.fixture提供了区别于传统单元测试(setup/teardown)有显著改进: 有独立的命名,并通过声明它们从测试函数.模块.类或整个项目中的使用来激活. 按模块化的方式实现,每个fixture都可以互相调用. fixture的范围从简单的单元扩展到复杂的功能测试,允许…
前言 pytest配置文件可以改变pytest的运行方式,它是一个固定的文件pytest.ini文件,读取配置信息,按指定的方式去运行. ini配置文件 pytest里面有些文件是非test文件 pytest.ini pytest的主配置文件,可以改变pytest的默认行为 conftest.py 测试用例的一些fixture配置 __init__.py 识别该文件夹为python的package包 tox.ini 与pytest.ini类似,用tox工具时候才有用 setup.cfg 也是in…
前言 平常写自动化用例会写一些前置的fixture操作,用例需要用到就直接传该函数的参数名称就行了.当用例很多的时候,每次都传这个参数,会比较麻烦. fixture里面有个参数autouse,默认是Fasle没开启的,可以设置为True开启自动使用fixture功能,这样用例就不用每次都去传参了 调用fixture三种方法 1.函数或类里面方法直接传fixture的函数参数名称 2.使用装饰器@pytest.mark.usefixtures()修饰 3.autouse=True自动使用 用例传f…