如何搭建自动化测试框架?资深测试整理的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性能测试

请添加图片描述

九、总结(尾部小惊喜)

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/27086.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis 报错 RedisConnectionException: Unable to connect to x.x.x.x:6379

文章目录 Redis报错类型可能解决方案 Redis报错类型 org.springframework.data.redis.connection. spingboot调用redis出错 PoolException: Could not get a resource from the pool; 连接池异常:无法从池中获取资源; nested exception is io.lettuce.core. 嵌套异常 RedisConn…

聊聊JDK动态代理原理

1. 示例 首先,定义一个接口: public interface Staff {void work(); }然后,新增一个类并实现上面的接口: public class Coder implements Staff {Overridepublic void work() {System.out.println("认真写bug……");…

一起学数据结构(3)——万字解析:链表的概念及单链表的实现

上篇文章介绍了数据结构的一些基本概念,以及顺序表的概念和实现,本文来介绍链表的概念和单链表的实现,在此之前,首先来回顾以下顺序表的特点: 1.顺序表特点回顾: 1. 顺序表是一组地址连续的存储单元依次存…

图像提示词攻略--基于 stable diffusion v2

Stable Diffusion 是一种潜在的文本到图像扩散模型,能够在给定任何文本输入(称为提示)的情况下生成逼真的图像。 在本文中,我将讨论和探索一些提高提示有效性的方法。从在提示中添加某些关键字和组合词、从更改单词顺序及其标点符…

24v转3.3v输出3A用什么芯片

问:客户需要一个能够将24V输入电压转换为3.3V输出电压,并且能够提供1-3A的电流输出的芯片。还希望它能够内置MOS管。有什么推荐的型号吗?(vin24v、5v,vout3.3v,Io1-3A) 答:推荐使用…

【福建事业单位-推理判断】08逻辑论证-加强-原因解释-日常总结

福建事业单位-推理判断】08逻辑论证-加强 一、加强题1.1 建立联系——搭桥1.2 补充论据必要条件(没它不行)补充论据(解释原因和举例论证) 总结 二、原因解释题三、日常结论复习建议 一、加强题 加强的题型,一般只加强…

替换开源LDAP,某科技企业用宁盾目录统一身份,为业务敏捷提供支撑

客户介绍 某高科技企业成立于2015年,是一家深耕于大物流领域的人工智能公司,迄今为止已为全球16个国家和地区,120余家客户打造智能化升级体验,场景覆盖海陆空铁、工厂等货运物流领域。 该公司使用开源LDAP面临的挑战 挑战1 开源…

详解Kafka分区机制原理|Kafka 系列 二

Kafka 系列第二篇,详解分区机制原理。为了不错过更新,请大家将本号“设为星标”。 点击上方“后端开发技术”,选择“设为星标” ,优质资源及时送达 上一篇文章介绍了 Kafka 的基本概念和术语,里面有个概念是 分区(Part…

高翔《自动驾驶中的SLAM技术》代码详解 — 第6章 2D SLAM

目录 6.2 扫描匹配算法 6.2.1 点到点的扫描匹配 6.2 扫描匹配算法 6.2.1 点到点的扫描匹配 // src/ch6/test_2dlidar_io.cc // Created by xiang on 2022/3/15. // #include <gflags/gflags.h> #include <glog/logging.h> #include <opencv2/highgui.hpp>…

解释器模式(Interpreter)

解释器模式是一种行为设计模式&#xff0c;可以解释语言的语法或表达式。给定一个语言&#xff0c;定义它的文法的一种表示&#xff0c;然后定义一个解释器&#xff0c;使用该文法来解释语言中的句子。解释器模式提供了评估语言的语法或表达式的方式。 Interpreter is a behav…

行业追踪,2023-08-07

自动复盘 2023-08-07 凡所有相&#xff0c;皆是虚妄。若见诸相非相&#xff0c;即见如来。 k 线图是最好的老师&#xff0c;每天持续发布板块的rps排名&#xff0c;追踪板块&#xff0c;板块来开仓&#xff0c;板块去清仓&#xff0c;丢弃自以为是的想法&#xff0c;板块去留让…

ros tf

欢迎访问我的博客首页。 tf 1. tf 命令行工具1.1 发布 tf1.2 查看 tf 2.参考 1. tf 命令行工具 1.1 发布 tf 我们根据 cartographer_ros 的 launch 文件 backpack_2d.launch 写一个 tf.launch&#xff0c;并使用命令 roslaunch cartographer_ros tf.launch 启动。该 launch 文件…

【Renpy】设置选项不满足条件禁止选择

【要求】如果某个属性不满足某个要求&#xff0c;则无法选择这个选项。 【版本】Renpy 8.1.1 【实现】 1.在options.rpy文件中添加 define config.menu_include_disabled True 2.在选项中增加if条件。 menu:"Yes" if money > 20: ##如果money小于20这个选项…

3.01 用户在确认订单页收货地址操作

用户在确认订单页面&#xff0c;可以针对收货地址做如下操作&#xff1a; 1. 查询用户的所有收货地址列表 2. 新增收货地址 3. 删除收货地址 4. 修改收货地址 5. 设置默认地址步骤1&#xff1a;创建对应用户地址BO public class AddressBO {private String addressId;private…

高抗干扰LCD液晶屏驱动芯片,低功耗的特性适用于水电气表以及工控仪表类产品

VK2C23是一个点阵式存储映射的LCD驱动器&#xff0c;可支持最大224点&#xff08;56SEGx4COM&#xff09;或者最大416点&#xff08;52SEGx8COM&#xff09;的LCD屏。单片机可通过I2C接口配置显示参数和读写显示数据&#xff0c;也可通过指令进入省电模式。其高抗干扰&#xff…

zookeeper+kafka

目录 Kafka概述 一、为什么需要消息队列&#xff08;MQ&#xff09; 二、使用消息队列的好处 三、消息队列的两种模式 四、Kafka 定义 五、Kafka 简介 六、Kafka 的特性 七、Kafka 系统架构 分区的原因 八、部署kafka 集群 1.下载安装包 2.安装 Kafka 3.修改…

风控安全产品系统设计的一些思考

背景 本篇文章会从系统架构设计的角度&#xff0c;分享在对业务安全风控相关基础安全产品进行系统设计时遇到的问题难点及其解决方案。 内容包括三部分&#xff1a;&#xff08;1&#xff09;风控业务架构&#xff1b;&#xff08;2&#xff09;基础安全产品的职责&#xff1…

mysql8查看执行sql历史日志、慢sql历史日志,配置开启sql历史日志general_log、慢sql历史日志slow_query_log

0.本博客sql总结 -- 1.查看参数 -- 1.1.sql日志和慢sql日志输出方式(TABLE/FILE)。global参数 SHOW GLOBAL VARIABLES LIKE log_output; -- 1.2.sql日志开关。global参数 SHOW GLOBAL VARIABLES LIKE general_log%; -- 1.3.慢sql日志开关。global参数 SHOW GLOBAL VARIABLE…

AWS Amplify 部署node版本18报错修复

Amplify env&#xff1a;Amazon Linux:2 Build Error : Specified Node 18 but GLIBC_2.27 or GLIBC_2.28 not found on build 一、原因 报错原因是因为默认情况下&#xff0c;AWS Amplify 使用 Amazon Linux:2 作为其构建镜像&#xff0c;并自带 GLIBC 2.26。不过&#xff0c;…

UNIX 入门

与 UNIX 建立连接启动会话登录命令提示符修改口令退出系统 简单的 UNIX 命令命令格式ls 命令who 命令虚拟终端 tty伪终端 ptywho am i 命令 cal 命令help 命令man 命令 shell 概述shell 命令更换 shell临时更改 shell永久更改 shell 登录过程 与 UNIX 建立连接 启动会话 要启…