Unittest

setUp/tearDown

setUp当中得到的变量,用self.xxx = value传递给测试用例

setUpClass/tearDownClass

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

pytest

pytest有两种前置后置,一种是沿用unittest风格setup/teardown, setup_class/teardown_class

另一种测试fixture

定义fixture

@pytest.fixture    #定义fixture必须用这个装饰器

def fix():
        print(“前置代码”)

yield                # yield为前置后置的分割线

print(“后置代码”)

fixture有4个作用域。

测试函数(function)、测试类(class)、测试模块文件(module)、测试会话(session)

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

def xxxx():

pass

设置fixture的返回值

@pytest.fixture
def init():
print("测试函数的前置")
yield "test","abc" #fixture的返回值放在yield旁
print("测试函数的后置")

调用fixture返回值

@pytest.mark.usefixtures("init")  #调用函数名为init的fixture
def test_bbb(init): #把函数名为init的fixture的返回值作为参数传入这个测试函数里
print(init)

如果fixture有返回值,那么,将它作为测试函数的参数时,可以不用装饰器,如下图

fixture的共享机制conftest.py

1.放的都是fixture
2.文件名不能更改。不同包下,可以创建多个
3.对外共享
4.共享范围:
同级共享
向下共享
5.优先级:就近原则。如调用fixture后如何知道定义在哪个文件,查找路线:自己模块 > 同级 > 往上
都找不到,报错

共享是定义好fixture后,被测试函数调用
就近原则,是测试用例调用的fixture,向上查找放在哪个conftest文件里

6.嵌套 
  如下代码,init2里嵌套这init的代码
@pytest.fixture
def init():
print("* init before *")
yield "i am init"
print("* init after *")

@pytest.fixture
def init2(init): # 继承init的前置后置,再它的基础上增加一些内容
print("* init2 before *")
yield init # 继承init的返回值
print("* init2 after *")

测试函数调用init2

@pytest.mark.usefixtures("init2")
def test_data1():
assert True

运行结果:先运行init前置,再运行init2的前置,接着运行init2的后置,最后运行init的后置
什么时候嵌套? 一个fixture想完全使用另一个fixture,并在人家的基础上新增一些代码

当测试过程需要连接DB时,可以在conftest.py定义好如下代码,在需要用的测试函数调用这个fixture就好。

这个fixture定义scope为session,是一旦运行main模块,就立即启动db,运行完后则关闭db,autouse是自动使用这个fixture的开关,module、class、function的不建议开启autouse

@pytest.fixture(scope="session",autouse=True)
def db_fixture():
db = HandleDB() # 实例化DB
yield db
db.close() # 关闭连接
												

最新文章

  1. FineUI小技巧(5)向子窗口传值,向父窗口传值
  2. android4.4源码下载简介
  3. Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project LogTest: Compilation failure -> [Help 1]
  4. Silverlight 调用自托管的wcf 报跨域异常的处理
  5. typedef 和 const
  6. busybox inetd tftpd
  7. linux大于2T的磁盘使用GPT分区方式
  8. javascript创建自定义对象和prototype
  9. ORA-03113: 通信通道的文件结尾 进程 ID: 764 会话 ID: 125 序列号: 5
  10. java实现解析二进制文件(字符串、图片)
  11. FreeMarker 入门
  12. Spark Scheduler内部原理剖析
  13. CodeForces 916C Jamie and Interesting Graph (构造)
  14. 快速把项目部署到webLogic上
  15. 安装informatic过程中的错误
  16. 关于Matlab里面的四个取整(舍入)函数:Floor, Ceil, Fix, Round的解释(转)
  17. sql server中分布式查询随笔(链接服务器(sp_addlinkedserver)和远程登录映射(sp_addlinkedsrvlogin)使用小总结)
  18. idea compare功能 之一次bug修复
  19. 5.如何调节ubuntu的分辨率
  20. ThinkPHP 分页功能梳理

热门文章

  1. IDEA 2021版新建Maven、TomCat工程
  2. netcore获取配置文件的内容
  3. .NET 中的 Worker Service 入门介绍
  4. 手动绕过百度加固Debug.isDebuggerConnected反调试的方法
  5. hdu4909 状态压缩(偶数字符子串)
  6. Winrar漏洞复现(CVE-2018-20250)
  7. 7个IntelliJ IDEA必备插件,提高编码效率
  8. thinkphp 5中的混合查询
  9. linux命令解压压缩rar文件
  10. 封装了一些sqlsugar的常用方法 用来动态切换数据库和依赖注入 支持泛型