在之前介绍pytest中的fixture用法的文章中https://zhuanlan.zhihu.com/p/87775743,提到了teardown的实现. 最近在翻pytest官方文档的时候,又发现了addfinalizer这个函数,跟yield一样,也可以实现在case结束后运行关键字之后的代码.那今天就来捋一下这2者的用法和区别. 一.yield 再来简单回顾下pytest里的setUp和tearDown的用法,我们可以看到,下方代码里有三个case用例,分别是test_开头. 而在de…
当我们运行测试函数时,我们希望确保测试函数在运行结束后,可以自己清理掉对环境的影响. 这样的话,它们就不会干扰任何其他的测试函数,更不会日积月累的留下越来越多的测试数据. 用过unittest的朋友相信都知道teardown这个函数,做的是一样的事情,那么下面姑且就把这种"善后"工作的代码 叫做teardown代码吧. 而pytest中的fixture,也提供了这样一个非常有用的系统,我们可以在里面定义teardown代码. 这里可以使用2种方式来实现,分别是yield和addfina…
前言: 1.前面讲的是在用例前加前置条件,相当于setup,既然有setup那就有teardown,fixture里面的teardown用yield来唤醒teardown的执行 看以下的代码: #!/usr/bin/env/python # -*-coding:utf-8-*- # authour:xiapmin_pei import pytest @pytest.fixture(scope="module") def open(): print("打开浏览器,并且打开百度首…
在上一章中,文末留下了一个坑待填补,疑问是这样的: 目前从官方文档中看到的是 We have to be careful though, because pytest will run that finalizer once it's been added, even if that fixture raises an exception after adding the finalizer. 一旦添加了终结器,pytest便会执行. 但是,当我尝试在setup代码中进行抛错,终结器的代码却并没…
今天看书的时候突然看到这个想起来一直没有怎么使用过send和next试了一下 发现了一个诡异的问题 import math def get_primes(start): while 1 : if is_prime(start) : start = yield start start += 1 def is_prime(number): if number > 1: if number == 2: return True if number % 2 == 0: return False for c…
前言 上一篇讲到fixture通过scope参数控制setup级别,既然有setup作为用例之前前的操作,用例执行完之后那肯定也有teardown操作. 这里用到fixture的teardown操作并不是独立的函数,用yield关键字呼唤teardown操作 scope="module" 1.fixture参数scope="module",module作用是整个.py文件都会生效,用例调用时,参数写上函数名称就行 # 新建一个文件test_f1.py # codin…
出处:https://www.cnblogs.com/yoyoketang/p/9401554.html 前言: 上一篇介绍了fixture通过scope参数控制setup级别,我们一起来温故下fixture的特点吧: fixture(scope = "function", params=None, autouse=False, ids=None, name=None) 1.  fixture使用装饰器标记功能 2.  arg scope:scope有四个等级参数----"f…
既然有 setup 那就有 teardown,fixture 里面的 teardown 用 yield 来唤醒 teardown的执行 在所有用例执行完后执行:yield import pytest @pytest.fixture(scope='module')def open(): print('打开浏览器=============') yield print('执行teardown!!!') print('最后关闭浏览器') def test_s1(open): print('用例11111…
上一篇讲到fixture通过scope参数控制setup级别,既然有setup作为用例之前前的操作,用例执行完之后那肯定也有teardown操作. 这里用到fixture的teardown操作并不是独立的函数,用yield关键字呼唤teardown操作 scope="module" 1.fixture参数scope="module",module作用是整个.py文件都会生效,用例调用时,参数写上函数名称就行 # coding:utf-8 import pytest…