Pytes测试框架的前后置处理

pytes框架实现一些前后置(固件,夹具)的处理,常用三种

为什么要用这些功能?

比如在做web自动化时,在做一个测试时总要有一个先必做的动作,或者是结束后要关闭的动作等。

以及如有些函数需要连接数据库,可以把连接数据库和断开数据的操作放在,指定的函数里.

这样每次测试函数的时候,都调取这个链接数据库的函数就行

一、setup/teardown,setup_class/teardown_class

1、setup/teardown:在每个用例的前后都会执行一次。

如图下,设置之后,运行

setup_class/teardown_class:在所有用例前后总共各执行一次。

*模块级(setup_module/teardown_module):开始于模块始末,作用于全局(总用各执行一次。)

*函数级(setup_function/teardown_function):仅对函数用例生效(即不在类中,每个函数执行一次)

*类级(setup_class/teardown_class):只在类中前后运行一次(在类中)

*方法级(setup_method/teardown_method):开始于方法始末(在类中,每个方法执行一次)

如下


二、使用@pytest.fixture()装饰器来实现部分用例的前后置

1、首先要理解unittest中setup、teardown的作用,可以实现在执行用例前或结束后加入一些操作,但这种都是针对整个测试类全局生效的

2、如果有以下场景:用例 1 需要先登录,用例 2 不需要登录,当每个测试用例的执行环境和条件都不一样时,显然无法用 setup 和 teardown 来实现

3、fixture可以使环境管理更灵活,每个测试用例可以有自己的fixture

装饰器

@pytest.fixture(scope="",params="",autouse="",ids="",name="")

---------------------------------------------------------------------------

(1)scope:表示的是被@pytes.fixture标记的方法的作用域

   function(默认),class,module,package/session

(2)params:参数化(支持,列表[],元祖(),字典列表[{},{},{}],字典元祖({},{},{}]) )

    测试用例参数化传入的参数被fixture调用,需要使用到request.param

params=['苹果','香蕉','梨'] 这里params是参数名,有s

    request.param这里是属性名,是没有s的

(3)autouse=True:自动使用,默认False

(4)ids:当使用params参数化时,给每一个值设置一个变量名,意义不大

(5)name:给表示的是被@pytes.fixture标记的方法取一个别名。同一模块的fixture相互调用建议写不同的name

    当取了别名之后,那么原来的名称就用不了了

测试用例如何调用fixture

1、将fixture名称作为测试用例函数的输入参数

2、加上装饰器:@pytest.fixtures()


fixture之yield实现teardown

用fixture实现teardown并不是一个独立的函数,而是用yield 关键字来开启teardown操作

注意

1、如果yield前面的代码,即setup部分已经抛出异常了,则不会执行yield后面的内容

2、如果测试用例抛出异常,yield后面的内容还是会正常执行

3、带有 yield 的函数在 Python 中被称之为 generator(生成器),生成器就是一边循环一边计算的机制,yield 的好处是显而易见的,把一个函数改写为一个 generator 就获得了迭代能力

4、与return的区别:return后面的代码不会执行,yield后面的代码继续执行


调用时,可以使用usefixtures

usefixtures与传fixture区别

 如果fixture有返回值,那么usefixture就无法获取到返回值,这个是装饰器usefixture与用例直接传fixture参数的区别。

当fixture需要用到return出来的参数时,只能讲参数名称直接当参数传入,不需要用到return出来的参数时,两种方式都可以。

如下,如果add方法加上“---------”+my_fixtrue,就会报错,不加就不会报错


三、通过conftest.py和@pytest.fixture()结合使用全局的前后置应用(如:项目的全局登录,模块的全局处理)

1、conftest.py文件是单独存放的一个夹具配置文件,名称是不能更改的

2、用处可以在不同的py文件中使用同一个fixture函数

3、原则上conftest.py需要和运行的用例放到统一层,并且不需要做任何的import导入的操作


总结:

1️⃣setup/teardown,setup_class/teardown_class 它的作用于所有的用例或者所有的类

2️⃣@pytest.fixture()它的作用是既可以部分也可以全局前后置

3️⃣conftest.py和@pytest.fixture()结合使用,作用于全局的前后置

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

推荐阅读更多精彩内容