今天总结下pytest,pytest简直就是python自动化中的高富帅,各种操作,哈哈

这次总结主要涉及到了以下几点:

1、unittest中的setUp、tearDown、setUpClass、tearDownClass

2、pytest中的前置后置如何表达

3、如何将前置后置和用例关联

4、pytest中的前置后置的级别如何区分

5、pytest中的前置后置“继承”关系,如何继承

简单总结下pytest的前置后置吧,pytest的前置后置非常简单,但是不同于unittest的前置后置,首先回顾下

1、unittest中的setUp、tearDown、setUpClass、tearDownClass

  在unittest中的前置后置有明确的格式,看如下代码

import unittest

class MyTestCase(unittest.TestCase):

    def setUp(self):
print("我是set_up") def tearDown(self):
print("我是teardown") def test_1(self):
print("我是测试用例1") def test_ha(self):
print("我说测试用例2") if __name__ == '__main__':
unittest.main()

可以得出结论,以下是运行结果:

unittest的前置必须是放在setUp里面,后置必须是放在tearDown里面,这个是有明确的格式的

当然了,setUp、tearDown是用例级别的,unittest还有类界别 的,请看如下代码

import unittest

class MyTestCase(unittest.TestCase):

    @classmethod
def setUpClass(cls):
print("我是setupclass") @classmethod
def tearDownClass(cls):
print("我是teardownclass") def test_1(self):
print("我是测试用例1") def test_ha(self):
print("我说测试用例2") if __name__ == '__main__':
unittest.main()

结果如下:

可以看出setUpClass和tearDownClass都是在这个测试类只运行一次的

说了这么多,还是言归正传,说下pytest的前置后置

2、pytest中的前置后置如何表达

  pytest的前置后置只用一个函数就可以解决

import pytest

@pytest.fixture
def iniy():
print("我是前置")
yield
print("我是后置") @pytest.mark.usefixtures("iniy")
class TestCase: def test_1(self):
print("我是测试用例1") def test_ha(self):
print("我说测试用例2") if __name__ == '__main__':
pytest.main(["test.py"])

上面代码中的iniy函数就是一个前置后置,只需要加上一个装饰器(pytes.fixture)即可,

3、如何将用例与前置后置关联

  设置了前置后置之后,用例如何引用?

 @pytest.mark.usefixtures("init_driver")
def test_name_null_login(self, init_driver):
"""
用户名为空 """
init_driver[1].login(test_login_datas.login_name_null_data["name"], test_login_datas.login_name_null_data["passwd"])
assert(init_driver[1].error() == test_login_datas.login_name_null_data["expect"])

上面代码中标记的部分就是引用前置后置的方式,置于为什么用例需要传递参数?

r

4、pytest中的前置后置的级别如何区分

  查看源码可以看出这个fixture函数存在scope这个参数,这个参数是确定这个前置后置的级别,pytest中前置后置的界别分为函数级别、类级别、模块级别、会话级别,当然我们常用的还是类级别和函数级别

5、pytest中的前置后置“继承”关系,如何继承

  pytest中的前置后置还可以共用,类似于类的“继承”,当然这个也是需要固定的用法

如果要实现公用的前置后置,那么需要将这个前置后置放到指定的文件中去------conftest.py

当然这个继承关系也是有要求的:低级别可以继承高级别,高级别不能继承低级别

  举个栗子:函数级别的可以继承函数级别及更高的级别,但是类级别不能继承函数级别

# -*- coding:utf-8 -*-
"""
File Name: conftest
"""
import pytest @pytest.fixture(scope="class")
def ini():
print("我是类前置")
yield 2
print("我是类后置") @pytest.fixture
def init(ini):
pass

以上脚本可以看出init这个前置后置继承了ini这个类级别的前置后置,那么我们在下面脚本中直接调用这个init前置后置看看结果如何

import pytest

@pytest.fixture()
def iniy():
print("我是前置")
yield
print("我是后置") @pytest.mark.usefixtures("init")
class TestCase: def test_1(self):
print("我是测试用例1") def test_ha(self):
print("我说测试用例2") if __name__ == '__main__':
pytest.main(["test.py"])

pytest_前置后置的更多相关文章

  1. spring 切面 前置后置通知 环绕通知demo

    环绕通知: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http:// ...

  2. AOP 环绕通知 集成了前置 后置 返回通知等功能

    AOP 环绕通知 集成了前置 后置 返回通知等功能

  3. Spring Bean前置后置处理器的使用

    Spirng中BeanPostProcessor和InstantiationAwareBeanPostProcessorAdapter两个接口都可以实现对bean前置后置处理的效果,那这次先讲解一下B ...

  4. unittest的前置后置,pytest的fixture和共享机制conftest.py

    Unittest setUp/tearDown setUp当中得到的变量,用self.xxx = value传递给测试用例 setUpClass/tearDownClass setupClass当中得 ...

  5. C: printf参数执行顺序与前置后置自增自减的影响

    起源: 今天在了解副作用side-effect的过程中,看到了下面的网页,把我带到了由printf引起的一系列问题,纠结了一整天,勉强弄懂. 第一个代码没什么好解释的.而第二个printf(" ...

  6. Spring -- aop(面向切面编程),前置&后置&环绕&抛异常通知,引入通知,自动代理

    1.概要 aop:面向方面编程.不改变源代码,还为类增加新的功能.(代理) 切面:实现的交叉功能. 通知:切面的实际实现(通知要做什么,怎么做). 连接点:应用程序执行过程期间,可以插入切面的地点. ...

  7. android实现前置后置摄像头相互切换

    首先自定义一个继承自SurfaceView并且实现了SurfaceHolder.Callback接口的组件: public class CameraView extends SurfaceView i ...

  8. thinkphp5使用前置后置操作

    下面举个例子,前置删除的例子   模型事件只可以在调用模型的方法才能生效,使用查询构造器通过Db类操作是无效的   控制器中实例化类   $cate=model('cate'); $cate-> ...

  9. vue路由导航守卫及前置后置钩子函数参数详解

    首先构建一个测试demo如下图: 接着来探讨路由配置界面 import Vue from 'vue' import Router from 'vue-router' // import HelloWo ...

随机推荐

  1. 6.Java基础_Java自增自减/关系/逻辑/三元运算符

    /* 自增自减运算符 关系运算符 逻辑运算符 三元运算符 (同C++) */ public class OperatorDemo01 { public static void main(String[ ...

  2. linux学习(三)系统目录结构

    登录系统后,在当前命令窗口下输入命令: ls / 你会看到如下图所示: 树状目录结构: 以下是对这些目录的解释: /bin:bin是Binary的缩写, 这个目录存放着最经常使用的命令. /boot: ...

  3. base46+url编码

    base64解密+unquote url编码 html = ''' JTdCJTIyc3RvcmUlMjIlM0ElN0IlMjJnYW1lTGlicmFyeSUyMiUzQSU3QiUyMmRpc2 ...

  4. django-订单并发处理--悲观锁和乐观锁

    冲突比较少的时候,使用乐观锁. 冲突比较多的时候,使用悲观锁. (1)     悲观锁 select * from df_goods_sku where id=17 for update; 悲观锁获取 ...

  5. mybatis之<trim prefix="" suffix="" suffixOverrides="" prefixOverrides=""></trim>

    1.<trim prefix="" suffix="" suffixOverrides="" prefixOverrides=&quo ...

  6. layui实现分页

    一 准备工作 首先必须先引入layui的完整目录,也就是你下载下来的整个layui的目录都要放在你的资源文件夹下,也就是这个文件目录 刚开始接触layui的时候,以为和jquery,vue等框架一样, ...

  7. Node.js 获取本机Mac地址

    首先我们要先加载一个包用于获取mac地址 npm install getmac 加载完毕会在node_modules文件夹下发现一个getmac文件夹,我们把对应的路径加载到程序中 源码如下: var ...

  8. Idea Intellij 终生破解版

    关于Idea Intellij 2018.3.2 破解问题,之前采用 jetbrains-agent.jar  破解,目前该插件已经失效,为了永久终生破解使用Idea,本篇文章提供JetbrainsI ...

  9. ndt算法学习

    NDT算法原理: NDT算法的基本思想是先根据参考数据(reference scan)来构建多维变量的正态分布, 如果变换参数能使得两幅激光数据匹配的很好,那么变换点在参考系中的概率密度将会很大. 因 ...

  10. git操作记录(如何回退到某个历史版本,如何提交部分文件等方法)

    当前项目使用git管理代码,在使用的过程中会遇到一些问题,这里记录下 1.合并代码后 在合并组员的代码后会出现下面的界面,开始的时候都会关闭,重新打开,乐此不疲到忍无可忍 解决方法: 出现这种界面是要 ...