当前位置: 首页 > news >正文

Web自动化测试:UI自动化框架结构以及思路!

在学会使用unittest后,实际上UI自动化的基础骨架已经搭建起来了,剩下的就是利于这套框架,增添一些我们需要的功能,目前看来,我们已经可以使用此框架来批量运行用例,欠缺的是整体的思路以及一些其他功能细节,比如日志记录、封装webdriver、读取数据库等功能的实现。

一、框架结构

其中:

common:

一些基础的底层方法类,例如:测试报告类、数据配置读取类、日志类、封装webdriver类、数据库连接类、发送邮件类、公共方法类,只要是我们想要实现的一些功能,可以把基础方法的实现放在common文件夹。

config:

配置文件放在这里,比如:账号密码、数据库连接地址等。

log:

运行用例后,日志的存储文件夹。

report:

运行用例后,测试报告的存储文件夹。

page:

在POM设计模式下,关于具体UI页面操作的方法。

test_case:

具体存放编写的测试用例。

run_all:

用来批量运行测试用例。

二、一些设计的想法和理念

2.1数据分离

数据分离,顾名思义是指要把代码中的数据和代码分离开来,这样方便管理和维护。

在写用例以及框架时,会涉及到数据的处理,比如说:账号、密码、元素定位、测试数据等等,对于经常会用到,但是不会经常修改的数据,比如账号、密码等,可以写到配置文件里,然后再读取;而对于元素定位的话,我习惯统一放到类里,作为类的全局变量来进行维护调用,而不是写到代码逻辑中,之前尝试过把元素定位放到excel中,但是元素定位需要经常修改维护,其实放在excel里修改很不方便,所以我更习惯作为一个类变量来存储调用。

2.2 POM设计模式

POM简单来说,我的理解就是高内聚低耦合的一种实践,通过分层来使得代码更容易维护表达,同时把复用性极多的方法整合到一起统一调用。运用到UI自动化中,则是把一个UI测试用例的实现,分为了三层来实现;第一层是driver层,我们把常用的方法封装起来,比如查找元素的方法find_element()我们封装成一个定位元素的方法,然后在这个方法里加入元素等待;第二层是page层,也就是页面层,主要把一个页面中的操作写成一个方法,比如点击确定按钮,填写用户名等;第三层是case层,也就是测试用例层,通过把page中的操作像搭积木一样组合起来,实现测试流程。

封装的driver方法 ---> page:页面中的操作 ---> case调用page中的操作

2.3测试框架的完整性

就是加上一些我们需要的功能,比如测试报告、日志的打印记录、发送邮件等功能,当然不仅限于此,在基本搭建好框架后,可以对框架本身进行易用性的整改,比如我要查询数据库获取数据来入参或者断言,那就加入数据库连接的方法;比如为了项目更简单易用,可以加入UI页面的可视化功能,python本身三方库的种类很多,可以根据自己的需要或者想法来改造我们的框架。

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【机器学习之深度学习】深度学习和机器学习的关系以及深度学习的应用场景
  • PHP、JavaScript代码审计工具
  • 如何 让git commit 自动生成 submodules 改动的提交说明?
  • 基于Python中PyQt5实现简易浏览器的设计与实现
  • 项目管理者必读:全生命周期系统选择技巧
  • Python 3 集合(Sets)
  • 解析 Vue 中的app.version、 app.provide 与 app.runWithContext :原理、应用与实例剖析
  • Sol盗u、sol链上的USDT盗窃:警惕恶意智能合约
  • iOS ------ 事件响应链
  • 跨域:安全分步实施指南
  • 制作好的excel报表设置打开密码或忘记密码怎么办?
  • Visual Studio Code安装与C/C++语言运行(上)
  • 《乳腺密度高的女性中,使用AI辅助的乳腺X线筛查与补充筛查超声的比较研究》| 文献速递-基于深度学习的乳房、前列腺疾病诊断系统
  • WIFI多基站定位技术模拟
  • IDEA2023版本创建mavenWeb项目及maven的相关配置
  • angular2 简述
  • CAP理论的例子讲解
  • JavaScript标准库系列——Math对象和Date对象(二)
  • Java到底能干嘛?
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • linux安装openssl、swoole等扩展的具体步骤
  • nodejs:开发并发布一个nodejs包
  • Sass Day-01
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • windows-nginx-https-本地配置
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 记录:CentOS7.2配置LNMP环境记录
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 聊一聊前端的监控
  • 区块链技术特点之去中心化特性
  • 实现简单的正则表达式引擎
  • 使用Gradle第一次构建Java程序
  • 温故知新之javascript面向对象
  • 一个SAP顾问在美国的这些年
  • #define,static,const,三种常量的区别
  • #LLM入门|Prompt#3.3_存储_Memory
  • (1)虚拟机的安装与使用,linux系统安装
  • (function(){})()的分步解析
  • (Oracle)SQL优化基础(三):看懂执行计划顺序
  • (STM32笔记)九、RCC时钟树与时钟 第二部分
  • (回溯) LeetCode 40. 组合总和II
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (七)Java对象在Hibernate持久化层的状态
  • (数据大屏)(Hadoop)基于SSM框架的学院校友管理系统的设计与实现+文档
  • (四) 虚拟摄像头vivi体验
  • (一)Docker基本介绍
  • (转)http-server应用
  • . Flume面试题
  • ./configure,make,make install的作用
  • .net 4.0发布后不能正常显示图片问题
  • .net core使用ef 6
  • .net mvc 获取url中controller和action
  • .Net 应用中使用dot trace进行性能诊断
  • .Net 执行Linux下多行shell命令方法