实例方法、静态方法、类方法
1.参数的区别
实例方法:定义实例方法时最少有一个形参--实例对象,通常self
类方法:定义类方法时最少有一个形参--类的对象,通常用cls
静态方法:定义静态方法时可以不用定义形参
2.方法定义时添加装饰器的区别
实例方法:不需要添加装饰器
类方法:需要装饰器--》@classmethod
静态方法:需要添加装饰器--》@staticmethod
3.调用
实例方法:可以通过对象直接调用 ,需要用类名称创建一个对象
类方法:可以直接通过类名称调用,也可以通过对象来调用
静态方法:可以直接通过类名称调用,也可以通过对象来调用
补充:静态方法不可以继承
类方法不能访问实例变量,只能类变量
class Dog():#定义类
age=3#类变量(不能传值)
def __init__(self):
self.name="xiaobai"#实例变量
def run(self):#实例方法
print("{}岁的{}正在跑步!".format(self.age,self.name))
@classmethod
def eat(cls):#类方法
#print(cls.name)#类方法不能访问实例变量
print("xiaohei{}岁了".format(cls.age))#类方法只能访问类变量
@staticmethod
def sleep(name):#静态方法
#静态方法与类无关,只是类中的一个功能,静态方法不能访问实例变量和类变量
print("{}在睡觉".format(name))
d=Dog()#创建对象
d.run()#通过对象调用实例方法
Dog.run(d)#通过类名称调用实例方法,需要在方法中传入实例对象
Dog.eat()#通过类名称调用类方法
d.eat()#通过对象调用类方法
Dog.sleep("xiaohuang")#通过类名称调用静态方法
d.sleep("xiaohuang")#通过对象调用静态方法
单继承
1.父类和子类的方法不一样
class father():#定义类
def __init__(self,car):
self.car=car
def rich(self):
print("有很多钱,买了一辆{}".format(self.car))
def house(self):
print("有很多楼")
f=father("宝马")
f.rich()
class bigson(father):#bigson类继承father类,bigson类拥有了father类的所有属性和方法
def gir(self):
print("给女朋友买了一辆{}".format(self.car))
f=father("宝马")
f.rich()
b=bigson("奔驰")
b.gir()
2. 子类拥有和父类相同的方法
当子类拥有和父类相同方法时,通过子类实例调用该方法,执行的是子类下的方法
class Teacher():#定义父类
def Name(self):#实例方法
print("This is my mother!")
class Myself(Teacher):#定义子类继承父类
#对父类方法重写
def Name(self):#实例方法
print("my name is xiaoyang!")
M=Myself()
M.Name()
3.子类拥有和父类相同的方法(方法重写)
class Teacher():#定义父类
def __init__(self,name):
self.name=name#实例变量
def Name(self):#实例方法
print("my teacher name is {}!".format(self.name))
class Myself(Teacher):#定义子类继承父类
#对父类方法重写
def Name(self):#实例方法
print("my teacher name is {}!".format(self.name))
M=Myself("laowang")
M.Name()
多继承
就是一个子类继承多个父类
class Mother():
def bobby(self):
print("Mother love shopping!")
class Farther():
def work(self):
print("Farher work is test engineer!")
class Myself(Farther,Mother):#继承多个父类
pass#生成对象
M=Myself()
M.work()
M.bobby()
class Mother():
def __init__(self,something):
self.something=something
def bobby(self):
print("MOther love {}!".format(self.something))
class Farher():
def __init__(self,work):
self.work=work
def Work(self):
print("Farher work is {}!" .format(self.work))
class MYself(Farher,Mother):#继承多个父类
def __init__(self,work=None,something=None):
Farher.__init__(self,work)
Mother.__init__(self,something)
#想要调用特定父类的构造器只能使用"父类名称.__init__(self)"方式
M=MYself('test',"shopping")#生成对象
M.Work()
M.bobby()
#可以使用mro来查看顺序
print(MYself.mro())
如果不同的两个父类出现相同的属性或方法,子类会继承谁的属性或方法?
class Mother():
def __init__(self,work):
self.work=work
def bobby(self):
print("MOther love {}!".format(self.work))
class Farher():
def __init__(self,work):
self.work=work
def bobby(self):
print("Farher work is {}!" .format(self.work))
class MYself(Farher,Mother):#继承多个父类
pass
M=MYself('test')#生成对象
M.bobby()
#可以使用mro来查看顺序
print(MYself.mro())
UI自动化测试并不是测试页面ui,而是跑页面功能
python+selenium库
selenium原理:通过selenium中webdriver以及浏览器驱动,去驱动浏览器和捕捉页面元素进行操作元素,从而达到模拟人工操作的结果
安装selenium库
把chromedriver.exe文件放到C:\Python37\Scripts目录下面,且存放路径一定是配置环境变量path路径中
ui自动化的优点
1.解决重复性功能测试和验证
2.减少测试人员在回归测试时用例的漏测和验证点的漏测
3.减少冒烟/回归测试的人力成本,节省时间,提高测试效率
什么样的项目适合做自动化测试?
1.项目版本稳定
2.项目周期较长
自动化测试一般在什么阶段开始实施?
1.自动化脚本在什么阶段输出?
产品验收通过或项目上线后
2.脚本执行在什么阶段开始执行?
回归测试
自动化测试的目的:用于回归测试
自动化如何进行开展工作?
1.熟悉业务需求,筛选出需要实现自动化测试的一些业务需求,评审
2.筛选出业务需求的自动化场景,及找出这些场景的功能测试用例
3.选择自动化测试工具
3.1根据当前团队成员熟悉程度
3.2选取主流的
4.自动化测试框架设计搭建
5.自动化用例的输出及执行和维护
常用的定位方法有哪些?
id、name、class、xpath、js、css
项目中的常用的有哪些?
基本都会用到,看功能情况,如果说当前功能有id就优先使用id,没有id就优先使用name,如果id和name都没有再去使用其他的方法
from selenium import webdriver #导入selenium库引用webdriver
import time #导入时间模块
driver=webdriver.Chrome() #通过webdriver调用谷歌Chrome生成一个浏览器对象
driver.get("http://www.baidu.com") #通过浏览器对象调用get方法打开测试地址
time.sleep(3) #停顿3秒
#1.id定位方法
driver.find_element_by_id('kw').send_keys('python')
a=driver.find_element_by_id('kw') #调用填写页面里id的值
a.send_keys('python') #选择要输入的
#2.name定位方法
driver.find_element_by_name('wd').send_keys('mysql')
#3.class定位方法
driver.find_element_by_class_name('s_ipt').send_keys('linux')
#4.xpath定位方法
#相对路径定位—选择对应的数据右键copy—copyXpath
driver.find_element_by_xpath('//*[@id="kw"]').send_keys('武汉')
driver.find_element_by_xpath('//*[@name="wd"]').send_keys('武汉')
#两个“//”表示相对路径,* 通配符 匹配任意标签名
#组合定位
driver.find_element_by_xpath('//*[@id="kw" and @name="wd"]').send_keys('武汉')
driver.find_element_by_xpath('//*[@id="form"]/span[1]/input[1]').send_keys('武汉')
#先定位到它上一级,父级定位
#绝对路径定位
driver.find_element_by_xpath('html/body/div[1]/div[1]/div[5]/div/div/form/span[1]/input').send_keys('武汉')
|
|