pytest的一些高阶用法

前言

之前一篇文章pytest的一些实用插件实践记录了一些实用的插件,这边记录一点pytest的高阶用法。

fixture

首先什么是fixture?

  • 1.为了测试用例的执行,进行一些初始化数据的操作
  • 2.实现了unittest中的setUp、tearDown功能

它的有点是什么?
实践下来,大致总结了几点:

  • 1.比unittest中的setUp、tearDown调用方便
  • 2.支持不同级别的fixture,默认是function级别
  • 3.调用方式灵活,支持直接函数名调用、装饰器调用、autouse

1.函数名直接调用

先看代码

@pytest.fixture()
def pre():
    print("beore test ")
    yield
    print("after test")

class Test1(object):
    def test_1(self,pre):
        print("tihs is test1")
        assert 1==1

    def test_2(self):
        //未传入pre
        print("this is test2")
        assert 1+2 ==3

其中test_2方法没有传入pre参数,执行脚本

pytest -sq demo_fixture.py

最终结果如下:


before.png

可以看出在test_1执行之前先执行 print("beore test ") ,结束后 执行 print("after test "),而test_2 由于没有传入pre参数,所以没有执行pre的方法

备注:

这边yield实现 setup和teardown的功能
即:
yield之前的语句,在class/function/module之前执行
yield之后的语句,在class/function/module执行完成之后执行

2.装饰器调用

代码如下:

import pytest

@pytest.fixture()
def pre():
    print("beore test ")
    yield
    print("after test")

class Test1(object):

    @pytest.mark.usefixtures('pre')
    def test_1(self):
        //装饰器调用
        print("tihs is test1")
        assert 1==1

    def test_2(selfs,pre):
        //函数名调用
        print("this is test2")
        assert 1+2 ==3

class Test2(object):
    def test_3(self):
        print("this is test3")
        assert  3+1 ==4

直接后结果如下:


image.png

可以看出,test_1 和 test_2 都执行了 pre里的方法,而test_3未调用,所以未执行

3.autouse调用

代码如下:

import pytest

@pytest.fixture(scope="class",autouse=True)
def preclass():
    print("beore class ")
    yield
    print("after class")

@pytest.fixture(scope="module",autouse=True)
def premodule():
    print("beore module ")
    yield
    print("after module")

@pytest.fixture(scope="function",autouse=True)
def pretest():
    print("beore function ")
    yield
    print("after function")

class Test1(object):

    def test_1(self):
        print("this is test1")
        assert 1==1

    def test_2(self):
        print("this is test2")
        assert 1+2 ==3

class Test2(object):
    def test_3(self):
        print("this is test3")
        assert  3+1 ==4

    def test_4(self):
        print("this is test4")
        assert  3+2 ==5

fixture默认的作用范围是function,同时也支持module/class/package/session级别


scope.png

上面我定义了三个级别的fixture,分别是module、class、function,可以预期的是 module方法只执行1次,class执行2次,function执行4次,结果如下:


autouse.png

这边对于平时接口测试或者UI自动化测试中,常用的login操作、数据库连接操作等非常实用。

4.fixture传入参数

需要注意的是,fixture传入参数,只能传入列表类型

params: an optional list of parameters which will cause multiple invocations of the fixture function and all of the tests using it.

代码如下:

import pytest

test_user_data = [{"user": "admin1", "passwd": "111111"},
                  {"user": "admin1", "passwd": "11234"}]

@pytest.fixture(scope="module",params=test_user_data)
def login(request):
    return request.param

def test_login(login):
    print(login["user"])

执行结果如下:


image.png

Demo代码地址请见github

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

推荐阅读更多精彩内容

  • 初次接触测试框架的你,肯定希望能更快速的编写自己的测试代码,那么我们开始吧! 1.Pytest介绍 pytest是...
    白习习_c942阅读 7,218评论 0 15
  • 在pytest中加入fixture的目的是提供一个固定的基准,使测试能够可靠、重复地执行,pytest的fixtu...
    何小有阅读 13,478评论 1 17
  • 一. fixture介绍 fixture是pytest的一个闪光点,pytest要精通怎么能不学习fixture呢...
    Yating_Yang阅读 33,399评论 6 39
  • 这篇文章接着上一篇《探索pytest的fixture(上)》的内容讲。 使用fixture函数的fixture 我...
    何小有阅读 2,177评论 0 4
  • Startup 单元测试的核心价值在于两点: 更加精确地定义某段代码的作用,从而使代码的耦合性更低 避免程序员写出...
    wuwenxiang阅读 10,033评论 1 27