pytest-13-其他

1、fixture之autouse=True

调用fixture三种方法

1)函数或类里面方法直接传fixture的函数参数名称

2)使用装饰器@pytest.mark.usefixtures()修饰

3)autouse=True自动使用(autouse,默认是Fasle没开启的)

2、配置文件pytest.ini

pytest里面有些文件是非test文件:

pytest.ini pytest的主配置文件,可以改变pytest的默认行为

conftest.py 测试用例的一些fixture配置

__init__.py 识别该文件夹为python的package包

tox.ini 与pytest.ini类似,用tox工具时候才有用

setup.cfg 也是ini格式文件,影响setup.py的行为

ini文件基本格式:

# 保存为pytest.ini文件

[pytest]

addopts = -rsxX

xfail_strict = true

--rsxX 表示pytest报告所有测试用例被跳过、预计失败、预计失败但实际被通过的原因

多个标签写入ini文件内:

markers =

webtest: Run the webtest case

hello: Run the hello case

标记好之后,可以使用pytest --markers查看到

禁用xpass

设置xfail_strict = true可以让那些标记为@pytest.mark.xfail但实际通过的测试用例被报告为失败

addopts:

addopts参数可以更改默认命令行选项,这个当我们在cmd输入指令去执行用例的时候,会用到,比如我想测试完生成报告,指令比较长

pytest -v --rerun 1 --html=./report/report.html --self-contained-html

3、doctest测试框架

文档测试:是单元测试的一种

doctest测试用例可以放在两个地方:

1)函数或者方法下的注释里面

2)模块的开头

import doctest

doctest.testmod(verbose=True)

verbose参数,设置为True则在执行测试的时候会输出详细信息

执行命令:python -m doctest -v xxx.py

m 参数指定运行方式doctest

-v参数是verbose,带上-v参数相当于verbose=True

pytest框架运行:

pytest -v --doctest-modules xxx.py

doctest独立文件

doctest内容也可以和代码抽离开,单独用一个.txt文件保存

在当前xxx.py同一目录新建一个xxx.txt文件,写入测试的文档,要先导入该功能,导入代码前面也要加>>>

cmd执行“python -m doctest -v xxx.txt”测试结果

fixture的目的是提供一个固定基线,在该基线上测试可以可靠地和重复地执行。fixture提供了区别于传统单元测试(setup/teardown)有显著改进:

(1)有独立的命名,并通过声明它们从测试函数、模块、类或整个项目中的使用来激活。

(2)按模块化的方式实现,每个fixture都可以互相调用。

(3)fixture的范围从简单的单元扩展到复杂的功能测试,允许根据配置和组件选项对fixture和测试用例进行参数化,或者跨函数 function、类class、模块module或整个测试会话sessio范围。

定义fixture跟定义普通函数差不多,唯一区别就是在函数上加个装饰器@pytest.fixture(),fixture命名不要用test_开头,跟用例区分开。用例才是test_开头的命名。

fixture是可以有返回值的,如果没return默认返回None。用例调用fixture的返回值,直接就是把fixture的函数名称当成变量名称

error和failed区别

测试结果一般有三种:passed、failed、error。(skip的用例除外)

如果在test_用例里面断言失败,那就是failed

如果在fixture里面断言失败了,那就是error (代码错误也是error)

4、使用多个fixture和fixture直接互相调用

  如果用例需要用到多个fixture的返回数据,fixture也可以return一个元组、list或字典,然后从里面取出对应数据;也可以分开定义成多个fixture,然后test_用例传多个fixture参数。

5、fixture的作用范围

scope参数可以控制fixture的作用范围:session > module > class > function(默认)

unction 每一个函数或方法都会调用

class 每一个类调用一次,一个类可以有多个方法

module,每一个.py文件调用一次,该文件内又有多个function和class

session 是多个文件调用一次,可以跨.py文件调用,每个.py文件就是module

6、pytest-html报告优化

(nodeid中文显示[\u6350\u52a9\u6211\u4eec]问题解决)

字符串变量.encode("utf-8").decode("unicode_escape")

7、conftest.py作用范围

一个测试工程下是可以有多个conftest.py的文件,一般在工程根目录放一个conftest.py起到全局作用。

在不同的测试子目录也可以放conftest.py,作用范围只在该层级以及以下目录生效。

8、运行上次失败用例(--lf和--ff)

命令行输入pytest -h,找到里面两个命令行参数: --lf 和 --ff

--lf, --last-failed 只重新运行上次运行失败的用例(或如果没有失败的话会全部跑)

--ff, --failed-first 运行所有测试,但首先运行上次运行失败的测试(这可能会重新测试,从而导致重复的fixture setup/teardown)

9、pytest分布式执行(pytest-xdist)

cmd里面使用pip安装分布式执行插件pytest-xdist:pip install pytest-xdist

pytest-xdist插件扩展了一些独特的测试执行模式pytest:

测试运行并行化:如果有多个CPU或主机,则可以将它们用于组合测试运行。会加快运行速度

--looponfail:在子进程中重复运行测试。每次运行之后,pytest会等待,直到项目中的文件发生更改,然后重新运行以前失败的测试。

重复此过程直到所有测试通过,之后再次执行完整运行。

多平台覆盖:您可以指定不同的Python解释器或不同的平台,并在所有平台上并行运行测试。

在远程运行测试之前,pytest有效地将您的程序源代码“rsyncs”到远程位置。报告所有测试结果并显示给您的本地终端。您可以指定不同的Python版本和解释器。

如果您想知道pytest-xdist如何在幕后工作,可以看

https://github.com/pytest-dev/pytest-xdist/blob/master/OVERVIEW.md

并行测试

多cpu并行执行用例,直接加个-n参数即可,后面num参数就是并行数量,比如num设置为3:pytest -n 3

用pytest-xdist插件生成html报告:pytest -n 3 --html=report.html --self-contained-html

10、重复执行用例(pytest-repeat)

使用pip安装pytest-repeat:pip install pytest-repeat

使用--count命令行选项指定要运行测试用例和测试次数:py.test --count=10 test_file.py

--repeat-scope

--repeat-scope类似于pytest fixture的scope参数,--repeat-scope也可以设置参数: session , module,class或者function(默认值)

function(默认)范围针对每个用例重复执行,再执行下一个用例

class 以class为用例集合单位,重复执行class里面的用例,再执行下一个

module 以模块为单位,重复执行模块里面的用例,再执行下一个

session 重复整个测试会话,即所有收集的测试执行一次,然后所有这些测试再次执行等等

使用--repeat-scope=session重复执行整个会话用例

pytest baidu/test_1_baidu.py -s --count=5 --repeat-scope=session

@pytest.mark.repeat(count)

如果要在代码中标记要重复多次的测试,可以使用@pytest.mark.repeat(count)装饰器

强制测试运行器在第一次失败时停止:py.test --count=1000 -x test_file.py

pytest-repeat无法使用unittest.TestCase测试类

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,542评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,596评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,021评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,682评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,792评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,985评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,107评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,845评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,299评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,612评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,747评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,441评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,072评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,828评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,069评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,545评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,658评论 2 350

推荐阅读更多精彩内容