pytest文档5-参数化parametrize】的更多相关文章

前言 参数化是自动化测试里面必须掌握的一个知识点,用过 unittest 框架的小伙伴都知道使用 ddt 来实现测试用例的参数化. pytest 测试用例里面对应的参数可以用 parametrize 实现,随着用例的增多,我们的需求也会越来越多,那么如何在 fixture 中使用参数呢? fixture 源码 先看下 fixture 源码,有这几个参数:scope,params,autouse,ids,name. def fixture(scope="function", params…
前言 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=…
前言 上一篇pytest文档2-用例运行规则已经介绍了如何在cmd执行pytest用例,平常我们写代码在pycharm比较多 写完用例之后,需要调试看看,是不是能正常运行,如果每次跑去cmd执行,太麻烦,所以很有必要学习如何在pycharm里面运行pytest用例 pycharm运行三种方式 1.以xx.py脚本方式直接执行,当写的代码里面没用到unittest和pytest框架时,并且脚本名称不是以test_开头命名的,此时pycharm会以xx.py脚本方式运行 2.当脚本命名为test_x…
参数化parametrize 先看一个简单的pytest参数化案例演示test_a.py # test_a.py import pytest import allure def login(username, password): '''登录''' print("输入账号:%s" % username) print("输入密码:%s" % password) # 返回 return {"code": 0, "msg": &qu…
前言 首先说下为什么要学pytest,在此之前相信大家已经掌握了python里面的unittest单元测试框架,那再学一个框架肯定是需要学习时间成本的. 刚开始我的内心是拒绝的,我想我用unittest也能完成自动化测试,干嘛要去学pytest呢?最近看到越来越多的招聘要求会pytest框架了,也有小伙伴出去面试说会unittest框架被鄙视的. 所以学此框架应该至少有以下2个理由,第一条已经足够: 学会了可以装逼 可以避免被面试官鄙视 python鄙视链:pytest 鄙视 > unittes…
前言 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上说…
前言 doctest从字面意思上看,那就是文档测试.doctest是python里面自带的一个模块,它实际上是单元测试的一种. 官方解释:doctest 模块会搜索那些看起来像交互式会话的 Python 代码片段,然后尝试执行并验证结果 doctest测试用例可以放在两个地方 函数或者方法下的注释里面 模块的开头 案例 先看第一个案例,将需要测试的片段,标准格式,需要运行的代码前面加>>> ,相当于进入cmd这种交互环境执行,期望的结果前面不需要加>>> >>…
前言 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 执行 https 请求用例的时候,控制台会出现警告:InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. 当出现这个警告的时候,我们第一反应是加忽略警告:urllib3.disable_warnings(),然而并不管用. 问题描述 使用requests库发https请求,添加verify=F…
前言 什么是元数据?元数据是关于数据的描述,存储着关于数据的信息,为人们更方便地检索信息提供了帮助. pytest 框架里面的元数据可以使用 pytest-metadata 插件实现.文档地址https://pypi.org/project/pytest-metadata/ pytest-metadata 环境准备 使用 pip 安装 pytest-metadata pip install pytest-metadata 查看 pytest 元数据 使用pytest 执行用例的时候加上 -v 参…
前言: 虽然网上有很多邮件配置的文章,但还是想自己写一下配置的过程,因为在中间也碰到了不同坑.按照这个文档配置的话,99%都可以成功.   一.jenkins 配置邮箱 1.打开jenkins后进入点击Manage Jenkins-->configure system,找到Jenkins Location,系统管理员邮件地址要和下面的配置一致 2.下面以qq邮箱为例进行配置:点击高级之后,输入密码和邮箱的授权码   3.qq邮箱授权码的获取 然后点击账户-找到POP3/IMAP/SMTP/Exc…
前言 pytest.mark.parametrize装饰器可以实现测试用例参数化. parametrizing 1.这里是一个实现检查一定的输入和期望输出测试功能的典型例子 # content of test_expectation.py # coding:utf-8 import pytest @pytest.mark.parametrize("test_input,expected", [ ("3+5", 8), ("2+4", 6), (&…
pytest.mark.parametrize装饰器可以实现测试用例参数化. parametrizing 1.这里是一个实现检查一定的输入和期望输出测试功能的典型例子 # content of test_expectation.py # coding:utf-8 import pytest @pytest.mark.parametrize("test_input,expected", [ ("3+5", 8), ("2+4", 6), (&quo…
前言 为了提高代码的复用性,我们在写用例的时候,会用到函数,然后不同的用例去调用这个函数. 比如登录操作,大部分的用例都会先登录,那就需要把登录单独抽出来写个函数,其它用例全部的调用这个登陆函数就行. 但是登录的账号不能写死,有时候我想用账号1去登录,执行用例1,用账号2去登录执行用例2,所以需要对函数传参. 登录函数传参 把登录单独成立,写一个函数,传2个参数user和psw,写用例的时候调用登录函数,输入几组user,psw参数化登录用例 测试用例传参需要用装饰器@pytest.mark.p…
前言 当用例a失败的时候,如果用例b和用例c都是依赖于第一个用例的结果,那可以直接跳过用例b和c的测试,直接给他标记失败xfail 用到的场景,登录是第一个用例,登录之后的操作b是第二个用例,登录之后操作c是第三个用例,很明显三个用例都会走到登录. 如果登录都失败了,那后面2个用例就没测试必要了,直接跳过,并且标记为失败用例,这样可以节省用例时间. 用例设计 1.pytest里面用xfail标记用例为失败的用例,可以直接跳过.实现基本思路 把登录写为前置操作 对登录的账户和密码参数化,参数用ca…
前言 pytest 结合 allure 描述用例的时候我们一般使用 @allure.title 和 @allure.description 描述测试用例的标题和详情. 在用例里面也可以动态更新标题和详情,使用allure.dynamic方法实现. allure.dynamic 动态属性 feature 模块 allure.dynamic.feature(feature_name) 功能点 story allure.dynamic.story(case_story) 用例标题 title allu…
前言 使用 pytest.mark.parametrize 参数化的时候,加 ids 参数用例描述有中文时,在控制台输出会显示unicode编码,中文不能正常显示. 使用 pytest_collection_modifyitems 钩子函数,对输出的 item.name 和 item.nodeid 重新编码. 问题描述 参数化 ids 用例描述有中文 import pytest # test_ids.py import pytest # 作者:上海-悠悠 def login(username,…
前言 平常在做功能测试的时候,经常会遇到某个模块不稳定,偶然会出现一些bug,对于这种问题我们会针对此用例反复执行多次,最终复现出问题来. 自动化运行用例时候,也会出现偶然的bug,可以针对单个用例,或者针对某个模块的用例重复执行多次. pytest-repeat pytest-repeat是pytest的一个插件,用于重复执行单个用例,或多个测试用例,并指定重复次数,pytest-repeat支持的版本: Python 2.7, 3.4+ 或 PyPy py.test 2.8或更高 使用pip…
前言 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通过scope参数控制setup级别,既然有setup作为用例之前前的操作,用例执行完之后那肯定也有teardown操作. 这里用到fixture的teardown操作并不是独立的函数,用yield关键字呼唤teardown操作 scope="module" 1.fixture参数scope="module",module作用是整个.py文件都会生效,用例调用时,参数写上函数名称就行 # 新建一个文件test_f1.py # codin…
用例设计原则 文件名以test_*.py文件和*_test.py 以test_开头的函数 以Test开头的类 以test_开头的方法 所有的包pakege必须要有__init__.py文件 help帮助 1.查看pytest命令行参数,可以用pytest -h 或pytest --help查看 C:\Users\admin>pytest -h usage: pytest [options] [file_or_dir] [file_or_dir] [...] positional argument…
前言 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…
前言 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…