pytest之fixture前置后置设置、打标记、重运行

首先来看看设置unittest前置后置的方法:

unittest:

          setup/teardown

          setup当中得到的变量,怎么传递给测试用例的:self.XXX = value

          setupClass,tearDownClass

          setupClass当中得到的变量,怎么传递给测试用例的:cls.XXX = value

fixture前置后置的方法:

原则上:先定义再调用、共享。

定义:

1、用函数实现,函数名称不固定。--- 如何知道它是前置还是后置?

@pytest.fixture

def fix():

    pass

2、前置操作和后置操作,写在一个函数里。 --用yeild 关键字区分前置后置

  @pytest.fixture

def fix():

    前置代码

    yeild  #分隔线

    后置代码

3、4个作用域,即给到这4个类型的语句试用的前置后置,4选一,默认是测试函数类型。测试函数(function)、测试类(class)、测试模块文件(module)、测试会话(session)

@pytest.fixture(scope=function(默认值)/class/module/session)

def fix():

        前置代码

        yeild  #分隔线

        后置代码

4、不跟测试类/测试函数放在一起。 ---如果说有测试类要用的话,怎么办?需要的时候再调用。

5、前置操作得到的一些数据,如何传递给测试用例?

yeild返回值

在测试用例当中:以fixture函数名作为用例参数。用例参数接收返回值。

测试函数的参数:1、fixture  2、参数化

6、共享机制:conftest.py

conftest.py定义fixture,可以定义多个。

7、调用:

用例/类 主动调用fixtures.

  哪儿需要哪儿调:

@pytest.mark.usefixtures("fixture的函数名称")

  测试类/测试函数

如果fixture有返回值,那么,将它作为测试函数的参数时,则可以不用使用:@pytest.mark.usefixtures("fixture的函数名称")

参考代码:

conftest.py共享

原则上:

1、所在目录下全面共享

2、支持嵌套

conftest.py规则:

1、放的都是fixture

2、fixtures可以对外共享。

3、共享的范围:

  当前conftest.py所在目录下的(含子孙目录),所有用例共享

4、conftest.py,是可以创建多个,在不同的包下。可以层级创建的。

5、优先级:就近原则!!

    发现fiXture:用例自己的模块 -》用例所在目录下的conftest.py -》目录的父级目录下的conftest.py

6、嵌套方式:

  6.1什么时候嵌套?  一个fixture,想完全使用另外一个fixture,并在人家的基础上新增一些代码。

  6.2怎么嵌套?

@pytest.fixture

def fix1():

           pass

@pytest.fixture

def fix2(fix1):

            #新增的代码

            pass

6.3嵌套后的执行顺序?

      fix1的前置

      fix2的前置

      fix2的后置

      fix1的后置

  6.4可以任意fixture级别嵌套吗?

      fix1 >= fix2的级别

数据驱动实现:

@pytest.mark.parametrized()

在测试用例的前面加上:

@pytest.mark.parametrize("参数名",列表数据)

参数名:用来接收每一项数据,并作为测试用例的参数。

列表数据:一组测试数据。

@pytest.mark.parametrize("参数1,参数2",[(数据1,数据2),(数据1,数据2)])

示例:

@pytest.mark.parametrize("a,b,c",[(1,3,4),(10,35,45),(22.22,22.22,44.44)])

def test_add(a,b,c):

          res = a + b

          assert res == c

组合参数化:多组参数,依次组合。

使用多个@pytest.mark.parametrize

示例:用例有4个:0,2/0,3/1,2/1,3 迪卡尔积

@pytest.mark.parametrize("x", [0, 1])

@pytest.mark.parametrize("y", [2, 3])

def test_foo(x, y):

          pass

打标记:mark功能

对用例打标记,运行的时候,只运行打标记的用例。

300个回归用例。-- 打标记50个,作为冒烟测试。

1、得先注册标记名

pytest.ini

[pytest]

markers=

       标签名:说明(只能是英文)

        标签名

        标签名

图示:

2、给测试用例/测试类打标记

  @pytest.mark.已注册的标记名

3、运行时设置只运行标记的用例

 使用方法-1: pytest命令行:-m标记名

  在收集到的所有用例当中,只运行有标记名的用例。

另外一种方式:

打标记范围:测试用例、测试类、模块文件

使用方法-2:

在测试类里,使用以下申明(测试类下,所有用例都被打上该标签):

class TestClass(object):

         pytestmark = pytest.mark.已注册标签名

         pytestmark = [pytest.mark.标签1, pytest.mark.标签2]  #多标签模式

在 模块文件里,同理(py文件下,所有测试函数和测试类里的测试函数,都有该标签):

import pytest

pytestmark = pytest.mark.webtest

pytestmark = [pytest.mark.标签1, pytest.mark.标签2]  #多标签模式


失败重运行机制  :

用例失败的情况下,可以重运行用例。

一旦用例失败,马上重运行。重运行的次数?

Pytest提供了失败重试机制:

插件名称:rerunfailures

    安装方法:pip install pytest-rerunfailures

使用方式:

命令行参数形式:

命令:pytest --reruns 重试次数

比如:pytest --reruns 2 表示:运行失败的用例可以重新运行2次。

命令:pytest --reruns 重试次数--reruns-delay 次数之间的延时设置(单位:秒)

Pytest --reruns 2 --reruns-delay 5

    表示失败的用例可以重新运行2次。第一次和第二次的间隔时间为5秒钟。

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