首页 > 其他分享 >肖sir__ui自动化测试框架__pom框架

肖sir__ui自动化测试框架__pom框架

时间:2022-09-25 15:11:32浏览次数:58  
标签:__ sir 框架 driver elem element path os cls

动化测试框架概念:
自动化测试框架是一个集成体系,这个体系中包含测试功能的函数、测试数据源、测试对以及重要的模块。
作用:用于解决或处理复杂的问题。
对于测试人员来说:
线性脚本的自动化脚本在维护性和可用性上较差,所以利用设计框架来实现自动化测试

框架设计的目标:
设计出来的框架是直接给测试人员或其他测试人员简单向里面不断补充用例,所以我们的框架设计必须
三简化:操作简单、维护简单、拓展简单

设计框架的同时要结合业务流程,不仅靠技术实现,还要对业务流程的理解和把握(重点和难点)

设计框架时要将基础的feng封装成公用的如:断言,定位方法,等

设计用例要与代码分开,便于用例管理,可以采用数据驱动框架实现。比如(ddt数据驱动)


==================================================================
po框架
(1)po(page object 缩写)
(2)业务流程与页面元素操作分离 ,可以简单理解为每个页面下都有一个配置class,配置类就是用来维护页面元素或操作方法
(3)提高测试用例的可维护性、可读性

======================================
po 自动化测试框架分层如下:
例如:

 

 

 

 

 

 

 ==================================================================

总:创建一个项目名(如cms_ui)

**第一个config包:**

在创建一个cofing包==存放所有配置文件信息(比如项目路径和数据,用例的路径)
可以封装路径

在cofing包下面,我们在建一个config .py的配置文件,也可以说全局配置(gloadconfig)

 

 

 

上面这个包:配置所有的包的绝对路径,

第一个,我们要拿到当前项目的路径:

(1) 获取项目包的所在路径

project_path=os.path.dirname(os.path.dirname(__file__))  固定写法,前面我们讲os的时候有讲过

我们得到了项目路径,我们怎么拿到data包,repeport包 的路径,我们要或取可以使用join 拼接路径

#先定义下config的路径

Config_path=os.path.join(project_path,'Config')
print(Config_path)#结果:D:/pycharm/UI_AUTO_PO\Config
在打印下下路径,是不是可以了
图片案例

 

 


源码:
# 此模块用来放项目中所有python package的绝对路径

import os
# 获取项目包的所在路径
project_path=os.path.dirname(os.path.dirname(__file__))
#项目包中的python package的路径有:
Config_path=os.path.join(project_path,'Config')
print(Config_path)
Data_path=os.path.join(project_path,'Data') #Data包路径
print(Data_path)
Data_file=os.path.join(Data_path,'data.ini') #Data包中的文件名
print(Data_file)
public_path=os.path.join(project_path,'Public')
print(public_path)
Pages_path=os.path.join(project_path,'Public','Pages')
print(Pages_path)
Utils_path=os.path.join(project_path,'Public','Utils')
print(Utils_path)
Report_path=os.path.join(project_path,'Report')
print(Report_path)
Run_path=os.path.join(project_path,'Run')
print(Run_path)
Testcase_path=os.path.join(project_path,'Testcase')
print(Testcase_path)

**第二个包:data包**

在创建一个data包==放数据(测试数据) 测试环境的一些url地址和账号密码可以放在data中

在data数据包中:放ini文件存放数据,xlsx表格拿数据,yalm文件拿数据

存放数据方法:方法一: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用例包用来存放用例
编写测试用例

框架的思想:把整个用例进行拆分

标签:__,sir,框架,driver,elem,element,path,os,cls
From: https://www.cnblogs.com/xiaolehong/p/16727887.html

相关文章

  • 三、编程与编程语言
    目录一、编程与编程语言的关系1.什么是编程语言2.什么是编程二、编程语言发展史1.机器语言2.汇编语言3.高级语言三、编程语言分类1.编译型语言(c/c++)2.解释型语言(python)一......
  • html换行的方法
     1、使用<br>1<html>2<body>3<p>4春眠不觉晓,<br/>处处闻啼鸟。<br/>夜来风雨声,<br/>花落知多少。5</p>6</body>7</html> 2、使用<P><P>是空白行,......
  • history 对象
    history对象window对象给我们提供了一个history对象,与浏览器历史记录进行交互。该对象包含用户(在浏览器窗口中)访问过的URL。......
  • Codeforces Round #822
    目录写在前面ABCDEF写在最后写在前面比赛地址:https://codeforces.com/contest/1734。复健后第一场div2,感觉有19年水平了。哈哈。A\(t\)组数据,每组数据给定一长......
  • Web自动化_元素操作+元素信息
    元素操作学习原因需要让脚本模拟用户给指定元素输入值需要让脚本模拟人为删除元素的内容需要让脚本模拟点击操作方法send_keys#输入方法click()#点击方法......
  • Java_笔记总结(二)
    十、继承1、只能单继承:一个子只能一个父2、可以多层继承:爷-父-孙3、关键字:extends (public class dog extends  Animal)4、成员变量访问特点:(1)就近原则......
  • Java学习数组
    ​Java中的数组​ ​一、数组定义格式​1、数组概述:一次性声明大量的用于存储数据的变量,要存储的数据通常都是同类型数据,例如:考试成绩 2、什么是数组:是用于......
  • RCNN
    RCNN(Region-basedConvolutionalNeuralNetworks)是将CNN引入目标检测的开山之作,大大提高了目标检测效果。RCNN算法介绍R-CNN是一种最先进的视觉目标检测系统,它将自底......
  • Invalid bound statement (not found)出现原因和解决方法
    Invalidboundstatement(notfound)出现原因和解决方法前言:想必各位小伙伴在码路上经常会碰到奇奇怪怪的事情,比如出现Invalidboundstatement(notfound),那今天我就......
  • Request应用
    Request请求一般Request和Response都是对应的简单的一个demo:输出前端请求过来的数据值得注意的是请求转发:req.getRequestDispatcher()请求不需要ApplicationContext/应......