自动化测试框架概念:
自动化测试框架是一个集成体系,这个体系中包含测试功能的函数、测试数据源、测试对以及重要的模块。
作用:用于解决或处理复杂的问题。
对于测试人员来说:
线性脚本的自动化脚本在维护性和可用性上较差,所以利用设计框架来实现自动化测试
框架设计的目标:
设计出来的框架是直接给测试人员或其他测试人员简单向里面不断补充用例,所以我们的框架设计必须
三简化:操作简单、维护简单、拓展简单
设计框架的同时要结合业务流程,不仅靠技术实现,还要对业务流程的理解和把握(重点和难点)
设计框架时要将基础的feng封装成公用的如:断言,定位方法,等
设计用例要与代码分开,便于用例管理,可以采用数据驱动框架实现。比如(ddt数据驱动)
==================================================================
po框架
(1)po(page object 缩写)
(2)业务流程与页面元素操作分离 ,可以简单理解为每个页面下都有一个配置class,配置类就是用来维护页面元素或操作方法
(3)提高测试用例的可维护性、可读性
======================================
po 自动化测试框架分层如下:
例如:
==================================================================
总:创建一个项目名(如bbs_framework)
**第一个config包:**
在创建一个cofing包==存放所有配置文件信息(比如项目路径和数据,用例的路径)
可以封装路径
**第二个包:data包**
在创建一个data包==放数据(测试数据) 测试环境的一些url地址和账号密码可以放在data中
存放数据方法:方法一:ini文件
在data包中创建一data.ini(放测试数据)
方法二:
**第三个包:public包** (公共公开的意思)
**#public包下: pages包和utils包**
在创建一个public公共公开的包(存放一些功能用例)
在public包中创建pages存放元素层流程层(封装所有页面的公共方法,基类在BasePage)
===============================================
coding=utf-8
'''
把所有页面公共公开的方法都封装在BasePage这个基类当中
'''
import unittest
from selenium import webdriver
dirver=webdriver.Chrome()
class BasePage(unittest.TestCase):
@classmethod #类方法,把driver对象传过来
def set_driver(cls,driver): #设置driver对象、保证所有的用例用的是同一个driver对象
cls.driver = driver
driver = webdriver.Chrome()
@classmethod
#有赋值就有取值
def get_driver(cls): #单例模式
return cls.driver #拿到driver对象、保证登录、发帖等等是同一个driver对象
baidu_input=('id','kw')====>page object
@classmethod
def find_element(cls,element):
type = element[0]
value = element[1]
if type == 'id':
elem = cls.driver.find_element_by_id(value) #cls都是类方法调用
elif type == 'class':
elem = cls.driver.find_element_by_class_name(value)
elif type == 'xpath':
elem = cls.driver.find_element_by_xpath(value)
elif type == 'link_text':
elem = cls.driver.find_element_by_link_text(value)
elif type == 'css':
elem = cls.driver.find_element_by_css_selector(value)
elif type=="name":
elem=cls.driver.find_element_by_name(value)
else:
raise NameError('please input correct params')
#手动触发异常,不是以上四个元素,就主动抛异常
return elem
@classmethod
def send_keys(cls,elem,text): #cls.driver.find_element_by_id(value)
# return cls.find_element(elem).send_keys(text)
return elem.send_keys(text)
@classmethod
def click(cls,elem):
elem.click()
@classmethod
def close(cls):
return cls.driver.close()
@classmethod
def get_text(cls,elem):
return BasePage.find_element(elem).text
@classmethod
def go_home(cls,elem):
'''回到首页'''
value = BasePage.find_element(elem)
BasePage.click(value)
if __name__ == '__main__':
m = BasePage()
baidu_input = ('id', 'kw') # ==>page object设计模式
elem = m.find_element(baidu_input)
在public包中创建utils包(处理公共类公共函数都存放在这个包中)
可以在utils中来读取pages中封装的登录的流程(封装读取ini文件或者EXCEL表格的工具类和工具函数
**第四个包:report 包**
在创建一个report包==存放测试报告
在report包中创建一个Testrepot目录(存放报告)
**第五个包:run包**
在创建一个run包用来运行
通过运行测试用例中封装好的用例在运行然后在report中生成测试报告
**第六个包 :testcase包**
在创建一个testcase用例包用来存放用例
编写测试用例
框架的思想:把整个用例进行拆分