python的装饰器

ps:这是本人的第一篇blog,记录一下学习生涯,从2021年的1月断断续续开始学习python,为了找工作从二月底开始从零学习软件测试,现在已经能通过python+selenium+unittest实现简单UI自动化测试项目,为了优化代码,又学习了一下装饰器,先简单应用到测试代码中。pps:明天找了个自动化测试的工作面试,我一个非计算机应届生,业务不足,代码也垃圾,真不知道他凭什么要我,打算之后学习精通自己的编程能力,祝自己明天好运。

'''
使用装饰器的步骤
1.底层自动将add_cookie(x)作为参数传给装饰器decorate
2.代码开始执行decorate,运行到wrapper,进行加载wrapper,但不执行
3.装饰器中实现闭包操作,return 内函数
4.此时返回值传给被装饰函数,相当于add_cookie=wrapper(可以将内函数看作外函数内部的一个参数,相当于局部变量)
5.需要调用函数才执行add_cookie,函数不调用不执行
6.但在unittest框架中,放在测试类中并run相当于执行了。
'''
from selenium import webdriver
import time
driver=webdriver.Chrome()
#创建一个装饰器
def decorate(func):
    def wrapper():
        #打开并登陆操作
        driver.get('http://39.105.34.27/project2/?/')
     
        driver.implicitly_wait(10)
        
        
        driver.maximize_window()
        driver.find_element_by_link_text('登录').click()
        time.sleep(2)
        driver.find_element_by_xpath('//*[@id="aw-login-user-name"]').send_keys('xiongyi9915')
        driver.find_element_by_xpath('//*[@id="aw-login-user-password"]').send_keys('xiongxy7211')
        driver.find_element_by_link_text('登录').click()
        time.sleep(1)
        #登陆后获取cookie
        c=driver.get_cookies()
        
        func(c)
    #一定要有返回内函数操作,且不要带括号    
    return wrapper    
@decorate
def add_cookie(x):
    driver.add_cookie(x[0])
    time.sleep(2)
    driver.refresh()
    time.sleep(5)
    driver.quit()

add_cookie()    

 这里笨蛋了,都登陆了还获取cookie再登陆一遍????

应该操作思路:

1.在登录测试模块中获取cookie

2.打开浏览器url作为case中的setUp层

3.创建一个装饰器,把add_cookie操作写在内函数的第一层,然后调用之后想要进行的操作。

 

 

2021-5-15更新

多层装饰器,万能装饰器以及带参数的装饰器

1.多层装饰器:谁离得进先装饰然后把装饰完的内置函数交给上一层装饰器再装饰

2.万能装饰器:内置函数及执行函数都添加参数*arg和**kwarg,这样传参是什么,都能参数拆表,适合一切传参

3.带参数的装饰器是三层装饰器,第一层负责接收装饰器参数,第二层负责接收函数,第三层负责接收函数的参数。

1:

2:

#多层装饰器,谁离得进谁先装饰
#万能装饰器

def decorate(func):
    def wrapper(*arg,**kwarg):
        
            print('校验中')
           
            func(*arg,**kwarg)
            
            print('校验完毕')
    return wrapper

@decorate
def funtion(student,clazz):
    for j in clazz:
        print('{}班'.format(clazz[j]))
        
    for i in student:
     
        print('姓名:{}'.format(i))
tuple1=('小熊','小谢','小狗')
clazz={'classs':1904,'classs1':1905}        
funtion(tuple1,clazz)        

 

3:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值