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

如何搭建自动化测试框架?资深测试整理的PO模式,一套打通自动化...

目录:导读

    • 前言
    • 一、Python编程入门到精通
    • 二、接口自动化项目实战
    • 三、Web自动化项目实战
    • 四、App自动化项目实战
    • 五、一线大厂简历
    • 六、测试开发DevOps体系
    • 七、常用自动化测试工具
    • 八、JMeter性能测试
    • 九、总结(尾部小惊喜)


前言

Po模型介绍

1、简介
在自动化中,Selenium自动化测试中有一个名字经常被提及PageObject(思想与面向对象的特征相同),通常PO模型可以大大提高测试用例的维护效率

2、为什么要用PO
基于selenium2开始ui自动化测试脚本的编写不是多么艰巨的任务。只需要定位到元素,执行对应元素的操作即可。

我们所能做的就是元素的定位,然后进行键盘输入或鼠标动作。但随着时间的迁移,测试套件将持续的增长。脚本也将变的越来越多。如果我们需要维护10个页面,100个页面,甚至1000个呢?

那么页面元素的任何改变都会让我们的脚本维护变得繁琐复杂,而且变得耗时易出错。那怎么解决呢?

ui自动化中,常用的一种方式,引入Page Object(PO):页面对象模式来解决,po能让我们的测试代码变得可读性更好,可维护性高,复用性高。

3、PO的优势
PO提供了一种业务流程与页面元素操作分离的模式,这使得测试代码变得更加清晰。
页面对象与用例分离,使得我们更好的复用对象。
可复用的页面方法代码会变得更加优化
更加有效的命名方式使得我们更加清晰的知道方法所操作的UI元素。

重用,业务和对象分离,代码结构清晰,方便代码维护

Po的设计模式

31
33

PO的核心要素

1、在PO模式中抽离封装集成一个BasePage类,该基类应该拥有一个只实现webdriver实例的属性

2、每一个page都继承BasePage,通过driver来管理本page中元素,将page中的操作封装成一个个方法

3、TestCase继承unittest.Testcase类,并依赖page类,从而实现相应的测试步骤

PO设计模式中的BasePage基类对应案例中的BasePage.py文件
PO模式中的pages中的案例显示Search.py
PO模式设计中TestCase对应案例中的TestCase.py

32

非PO实现

# 代码展示
from selenium import webdriver
from time import sleep
driver = webdriver.Firefox()
driver.get("http://www.baidu.com")
driver.find_element_by_id("kw").send_keys("jack")
sleep(1)
driver.find_element_by_id("su").click()
sleep(2)
driver.quit()

代码分析:
不同的运行脚本环境,游览器不同:驱动webdriver.Firefox()可以剥离;
请求地址的变化(生产环境和测试环境):url = http://www.baidu.com可以剥离;

操作元素时,常常要等待元素加载完成方可进行操作:可以把webdriver提供的find_element*方法封装,在元素操作前,先判断元素是否可以操作;

实际测试场景中,可能有多个测试场景,如果每个测试场景都需要维护url,游览器驱动,元素定位等,效率会非常低;

因此基于以上分析,是否可以设计一个所有测试界面(selenium本身是B/S系统开展测试)的基类,来维护公共的方法,此处定义名字为BasePage.py,用于存放页面公共方法及webdriver原有方法二次封装等。

PO实现(多个 page界面)

1、Base基类(base.py)

from selenium.webdriver.common.action_chains import ActionChains  # 鼠标操作class BasePage():"""初始化方法"""def __init__(self, dir, url):self.dir = dir  self.url = url  """进入网址的方法"""def enter_url(self):self.dir.get(self.url)"""定位元素"""def find_element(self, *args):return self.dir.find_element(*args)"""点击"""def click_element(self, *args):ActionChains(self.dir).click(self.find_element(*args)).perform()"""输入"""def send_element(self, text, *args):self.dir.find_element(*args).send_keys(text)"""清除"""def clear_element(self, *args):self.dir.find_element(*args).clear()"""表单切换"""def switch_iframe(self, *args):self.dir.switch_to.frame(self.dir.find_element(*args))"""窗口切换"""def switch_window(self, n):self.dir.switch_to.window(self.dir.window_handles[n])

2、Pages查找页面元素类(hao.py和bddt.py)

# hao.py
from Base.base import BasePage
from selenium.webdriver.common.by import By
from selenium import webdriverclass SearchPage(BasePage):"""初始化"""def __init__(self, dir, url):BasePage.__init__(self, dir, url)"""进入百度"""def enter_bd(self):self.enter_url()"""输入搜索内容"""def ssnr(self, text):self.send_element(text, By.ID, "kw")"""点击百度一下按钮"""def clickff(self):self.click_element(By.ID, "su")
# bddt.py
from Base.base import BasePage
from selenium.webdriver.common.by import By
from selenium import webdriverclass SearchPage2(BasePage):"""初始化"""def __init__(self, dir, url):BasePage.__init__(self, dir, url)"""点击进入hao123"""def clickenter(self):self.click_element(By.CSS_SELECTOR, ".t>a")"""切换句柄hao123"""def qiehuan(self, n):self.switch_window(n)"""点击百度地图"""def clickbddt(self):self.click_element(By.CSS_SELECTOR, ".js_bd > li:nth-child(6) > div:nth-child(1) > a:nth-child(1)")

3、Case测试用例(test001.py)

import unittest
from selenium import webdriver
from Pages.hao import SearchPage
from Pages.bddt import SearchPage2
import timeclass Test01Class(unittest.TestCase):@classmethoddef setUpClass(cls) -> None:cls.dir = webdriver.Firefox()cls.dir.implicitly_wait(30)def test01(self):url = "http://www.baidu.com"s = SearchPage(self.dir, url)s.enter_bd()s.ssnr("123")s.clickff()# self.dir.switch_to.window(self.dir.window_handles[-1])def test02(self):url = ""b = SearchPage2(self.dir, url)b.clickenter()b.qiehuan(1)time.sleep(10)b.clickbddt()@classmethoddef tearDownClass(cls) -> None:cls.dir.quit()passif __name__ == '__main__':unittest.main()
下面是我整理的2023年最全的软件测试工程师学习知识架构体系图

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

燃起心中的火焰,努力奋斗不止,坚持才能超越自我。困难是成长的催化剂,挑战是前进的动力源。勇敢迈步,创造未来,在奋斗中绽放永不熄灭的光芒!

梦想是奋斗的起点,努力是成就的密码,不屈不挠是成功的基石。放飞心灵的翅膀,勇往直前,书写属于自己的辉煌传奇!坚守初心,超越极限,奋斗出荣耀,绽放出人生的绚丽篇章!

脚步不停,追逐梦想的轨迹,奋斗是拥抱未来的钥匙。信念如火,决心助力,只有拼搏才能绽放人生的辉煌。勇往直前,砥砺前行,执着奋斗,终将书写属于自己的壮丽传奇!

相关文章:

如何搭建自动化测试框架?资深测试整理的PO模式,一套打通自动化...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 Po模型介绍 1、简…...

软件外包开发的GO语言特点

Go语言(也称为Golang)是由Google开发的一种编程语言。它具有许多特点,使其成为许多项目范围的优秀选择。Go语言适用于需要高性能、并发和简洁易读的项目,特别是面向网络和分布式应用的项目。今天和大家分享项目的特点及适用的项目…...

【深度学习Week4】MobileNet_ShuffleNet

报错:unsafe legacy renegotiation disabled 解决方案: 尝试了更换cryptography36.0.2版本,以及更换下载链接的方法,都不行,最后采用了手动下载mat文件并上传到colab的方法 高光谱图像分类数据集简介Indian Pines&…...

649. Dota2 参议院

题目描述&#xff1a; 主要思路&#xff1a; 这是一个按照题意模拟的问题&#xff0c;利用队列模拟议员的投票顺序即可。 class Solution { public:string predictPartyVictory(string senate) {queue<int> r,d;int nsenate.length();for(int i0;i<n;i){if(senate[i…...

无人机管控平台,推动电力巡检管理水平提升

各地区无人机作业水平和管理水平存在参差不齐&#xff0c;电力巡检管理要求与业务发展水平不匹配的问题。同时&#xff0c;巡检数据的存储和管理分散&#xff0c;缺乏有效的整合与共享手段&#xff0c;使得内外业脱节&#xff0c;没有形成统一应用和闭环管理。这就导致巡检数据…...

阿里云平台WoSignSSL证书应用案例

沃通CA与阿里云达成合作并在阿里云平台上线WoSign品牌SSL证书。自上线以来&#xff0c;WoSignSSL证书成为阿里云“数字证书管理服务”热销证书产品&#xff0c;获得阿里云平台客户认可&#xff0c;助力阿里云平台政府、金融、教育、供应链、游戏等各类行业客户实现网站系统数据…...

服务器时钟同步

服务器时钟同步 文章目录 服务器时钟同步背景windows时钟同步Linux机器上的时钟同步Centos时钟同步Ubuntu系统时钟同步 查看是否同步的命令 背景 运维&#xff0c;XXX服务器慢了2秒&#xff0c;导致XXX业务没有正常执行&#xff0c;请立即排查为啥会有时钟不同步的问题。 首先…...

AMEYA360:瑞萨电子MCU和MPU产品线将支持Microsoft Visual Studio Code

全球半导体解决方案供应商瑞萨电子宣布其客户现可以使用Microsoft Visual Studio Code&#xff08;VS Code&#xff09;开发瑞萨全系列微控制器&#xff08;MCU&#xff09;和微处理器&#xff08;MPU&#xff09;。瑞萨已为其所有嵌入式处理器开发了工具扩展&#xff0c;并将其…...

JSP--Java的服务器页面

jsp是什么&#xff1f; jsp的全称是Java server pages,翻译过来就是java的服务器页面。 jsp有什么作用&#xff1f; jsp的主要作用是代替Servlet程序回传html页面的数据&#xff0c;因为Servlet程序回传html页面数据是一件非常繁琐的事情&#xff0c;开发成本和维护成本都非常高…...

07 Ubuntu中使用poetry工具管理python环境——巨详细!!!

由于conda和ros2的环境实在太容易冲突了。我真的不敢再使用conda&#xff0c;着实是有些搞不明白这解释器之间的关系。 conda的卸载和ros2的安装暂不赘述&#xff0c;下面着重来说如何在Ubuntu中使用poetry进行包管理及遇到的问题。 1 安装poetry 由于在有写入权限的限制&am…...

射影平面 与 射影变换

射影平面 与 射影变换 射影平面 与 齐次坐标 中心为O 的把 将与一个点O 关联的所有平面和直线构成的集合称为 中心为O的把O[\lambda, p]射影&#xff08;从平面\pi 到把O的一个对应关系&#xff09;O[P, l] [OP, OL] ...截影&#xff08;从把O 到平面\pi 的一个对应关系&…...

(202307)wonderful-sql:决胜秋招(task6)

教程链接&#xff1a;Datawhale - 一个热爱学习的社区 换硬盘重装了系统&#xff0c;后面应该也不会用到mysql&#xff0c;不装环境了&#xff0c;没有截图。 Section A 练习一: 各部门工资最高的员工&#xff08;难度&#xff1a;中等&#xff09; 创建Employee 表&#x…...

Scratch 教程:如何实现文本分割

在平时&#xff0c;我们通常会有分割文本的要求&#xff0c;但扩展却又无法使用scratch离线版打开&#xff0c;咋办呢&#xff1f;我们可以用原版做出来&#xff01; 没关系&#xff0c;我来教你&#xff01; 我们自定义一个函数&#xff0c;之后要分割调用就行了 创建三个变量…...

安全基础 --- 编码(02)+ form表单实现交互

浏览器解析机制和XSS向量编码 <!-- javascript伪协议不能被urlcode编码&#xff0c;但可以被html实体编码:也是js协议的一部分&#xff0c;不能被编码js协议被解码后&#xff0c;URL解析器继续解析链接剩下的部分unicode编码可识别实现解码但符号不能被编码&#xff0c;编码…...

华为OD机考真题--五子棋--带答案

2023华为OD统一考试&#xff08;AB卷&#xff09;题库清单-带答案&#xff08;持续更新&#xff09;or2023年华为OD真题机考题库大全-带答案&#xff08;持续更新&#xff09; 项目描述&#xff1a; 张兵和王武是五子棋迷&#xff0c;工作之余经常切磋棋艺。这不&#xff0c;这…...

把网站改为HTTPS访问方法

HTTPS是使用TSL/SSL加密超文本传输协议的扩展&#xff0c;用于跨网络的安全传输。网站更改为HTTPS&#xff0c;直接在网站形象上可以得到提升&#xff0c;更重要的是您的网站肯定会在排名和提升方面受益。机密信息的交换需要受到保护&#xff0c;以阻止未经授权的访问。 加密&a…...

【BASH】回顾与知识点梳理(四)

【BASH】回顾与知识点梳理 四 四. Bash Shell 的操作环境4.1 路径与指令搜寻顺序4.2 bash 的进站与欢迎讯息&#xff1a; /etc/issue, /etc/motd4.3 bash 的环境配置文件login与non-login shell/etc/profile (login shell 才会读)~/.bash_profile (login shell 才会读)source &…...

阿里云安全组设置

简介​ 云主机安全组必须打开如下端口&#xff1a; ssh&#xff1a;22http&#xff1a;80https&#xff1a;443ftp&#xff1a;21、20000&#xff5e;30000 阿里云安全组端口开放教程​ 腾讯云安全组端口开放教程​ 华为云安全组端口开放教程​...

QT图形视图系统 - 使用一个项目来学习QT的图形视图框架 - 终篇

QT图形视图系统 - 终篇 接上一篇&#xff0c;我们需要继续完成以下的效果&#xff1b; 先上个效果图&#xff1a; 修改背景&#xff0c;使之整体适配 上一篇我们绘制了标尺&#xff0c;并且我们修改了放大缩小和对应的背景&#xff0c;整体看来&#xff0c;我们的滚动条会和…...

代码随想录算法训练营第六十天|单调栈part03|● 84.柱状图中最大的矩形

84.柱状图中最大的矩形 Largest Rectangle in Histogram - LeetCode 单调栈这几题没过脑&#xff0c;感觉一团浆糊&#xff0c;要重新看一下 class Solution {public int largestRectangleArea(int[] heights) {Stack<Integer> stack new Stack<>();int[] newHeig…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由&#xff1a;大部分的转换软件需要收费&#xff0c;要么功能不齐全&#xff0c;而开会员又用不了几次浪费钱&#xff0c;借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

【SpringBoot自动化部署】

SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一&#xff0c;能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时&#xff0c;需要添加Git仓库地址和凭证&#xff0c;设置构建触发器&#xff08;如GitHub…...

如何配置一个sql server使得其它用户可以通过excel odbc获取数据

要让其他用户通过 Excel 使用 ODBC 连接到 SQL Server 获取数据&#xff0c;你需要完成以下配置步骤&#xff1a; ✅ 一、在 SQL Server 端配置&#xff08;服务器设置&#xff09; 1. 启用 TCP/IP 协议 打开 “SQL Server 配置管理器”。导航到&#xff1a;SQL Server 网络配…...

【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL

ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...

算法打卡第18天

从中序与后序遍历序列构造二叉树 (力扣106题) 给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵树的后序遍历&#xff0c;请你构造并返回这颗 二叉树 。 示例 1: 输入&#xff1a;inorder [9,3,15,20,7…...

DAY 26 函数专题1

函数定义与参数知识点回顾&#xff1a;1. 函数的定义2. 变量作用域&#xff1a;局部变量和全局变量3. 函数的参数类型&#xff1a;位置参数、默认参数、不定参数4. 传递参数的手段&#xff1a;关键词参数5 题目1&#xff1a;计算圆的面积 任务&#xff1a; 编写一…...