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: