面试,其实你说到Python,那些经典或者抽象的问题无非就是那么多,所以大家如果面试会问到Python的时候,在面试之前如果给你一份面试题,你去把这些问题总结一遍,基本上面对这个Python编程方面的问题,你就会胸有成竹,很有把握!
比如我们上期讲的浅拷贝深拷贝,绝对是一个经典面试问题,在往期的文章中也讲到不少,那我们今天再来看一个新的问题。
装饰器,其实也是一个经典必问题!
因为这个装饰器我们在自动化测试中会用到,并且会用到很多。那更别说你去搭建测试框架。
我们先来看这个装饰器,它的一个概念和原理。
装饰器的最基本原理是什么?
(Python里面万物皆对象,那我们的函数它也是一个对象,一个类也是对象,)
在面试的时候,首先这个最简单的原理,你肯定要马上能回答出来,因为它非常明显,非常清晰,如果这个原理都不知道,那你肯定就是没有用过。
不修改原函数可能是它的概念,你要说到关键点。
一个函数的返回值或者一个函数的参数都可以是一个函数。
就是说本身一个函数它可以有参数有返回值
函数有参数和返回值:
那装饰器的原理,函数的参数和返回值都可以是一个函数本身目的高阶函数,这就是一个装饰器。
那当然这个概念,说出来可能很多朋友还不是很理解,所以这个装饰器大家一定要自己去写,装饰器的几种类型都去敲一下就明白了。
(学编程还是要自己扎扎实实的去把代码上手敲)
那装饰器的写法和概念大家明白了之后,我们就要看它一般在项目中应用到哪些地方。
就算我面试的时候问你,装饰器的原理你回答出来了,那之前你在项目中是怎么用的?这个时候不知道的话就头皮发麻了,我在项目中怎么用的?我没有用到啊,因为你确实没有用到啊,基本上很难用得到,那是因为你之前没有真实的去做自动化,没有自己去写过框架。没有做过测试开发,没有去写过一些后端,确实不会用到。
那我们来看一下装饰器在实际项目中的应用,因为我们可能写了很多的函数,或者写了很多的接口,那每个函数它的运行日志,每个函数它的运行时间其实作为一个开发或者我们专业的自动化测试工程师,都应该去知道的。每个函数运行的时间,你不可能在每个函数去加一行或几行代码。
装饰器在Python里面

运行的时间,运行的日志,谁运行的,都会在这里封装好
假设这里封装了一个装饰器,这个装饰器多少地方用到了


你看,起码几百个方法,会用到我这个装饰器,只要用到我这个装饰器。只要在这个方法前面加一个@timer就行了,所以这个方法不需要去写什么运行时间,日志,那些代码了,你只需要@一下我就行了。

需要办的事情,我在这里也封装好了。
比如很多人要找正规中介去办一个事情,比如说找房子,装饰器就好像一个正规中介,怎么去租房子这个事情交给我了,你把你的需求告诉我就行了。
刚刚这里用到的就是我们的日志,在日志里面用得比较的多,每个函数运行日志,函数运行时间,那当然这是属于框架里面的,在我们自动化项目中到处可见,特别多,所以说如果大家回答不出来,我觉得应该要好好去思考一下。
我一说出来,是这么回事,好像之前我自己都用到过,熟不熟悉?
在Unittest里面,是不是有一个@classmethod
在Pytest里面,或者你用到@Pytest
你如果用到数据驱动,@ddt
还有很多,在自动化代码里面。
随处可见,但凡有一点自动化基础,自己玩过自动化,就算没有写过也至少见过吧,这,就是装饰器。
所以你把装饰器的原理理解清楚之后,装饰器自己会写了,那这个ddt的用法你再去看一下它的源代码,那这个不就很简单了。
测试环境可以操作数据库,生产环境不能操作数据库,可以用装饰器控制,这个就是参数化。
网友评论