自动化测试架构设计必会知识点——对核心业务进行封装复用(附Java源码)

f0ee9905a1974571b8856eee59e658b3.png

随着UI自动化测试工具可选性越来越多,工具也越来越稳定,前几年关于自动化测试架构设计的概念逐渐淡化,但是做自动化测试最重要的两点—— PO设计模式和核心业务的封装复用大家还是必须掌握的,前面的文章我已经介绍了什么是PO设计模式,链接如下:

无论您用selenium、appium还是playwright都必须使用PO设计模式-CSDN博客

今天我们就来讲讲什么是核心业务的封装复用。

核心业务的封装复用

相信写过自动化测试的同学都编写过登录的脚本,我们来回忆一下大概的登录流程:

1.访问登录地址

2.输入用户名(手机号码)

3.输入密码(短信验证码)

4.输入校验码(有的系统有,有的系统没有)

5.点击登录按钮

在这个场景中不同的用户,使用的登录地址(一般不会变化)、用户名和密码这些数据是变化的,但是点击,输入这些动作不会变化。我们就可以把登录这个业务封装成方法,便于大家复用!实现的java伪代码如下,这是java多态重载的用法。

 public static void login(String p_url,String p_user,String p_pwd) {driver =new ChromeDriver();driver.get(p_url);driver.manage().window().maximize();driver.findElement(By.id("")).sendKeys(p_user);driver.findElement(By.id("")).sendKeys(p_pwd);driver.findElement(By.id("login_button")).click();}public static void login(String p_url,String p_user,String p_pwd,String p_captcha) {driver =new ChromeDriver();driver.get(p_url);driver.manage().window().maximize();driver.findElement(By.id("")).sendKeys(p_user);driver.findElement(By.id("")).sendKeys(p_pwd);driver.findElement(By.id("")).sendKeys(p_captcha);driver.findElement(By.id("login_button")).click();}

备注:如果有第四步需要研发给万能校验码,否则如果通过图像识别破译了校验码,那这就是个bug!

大家想一想封装业务代码进行复用最重要的是什么呢?重要的事情说三遍!

很显然就是业务中把可变数据进行参数抽取!!!

很显然就是业务中把可变数据进行参数抽取!!!

很显然就是业务中把可变数据进行参数抽取!!!

百度业务封装

在实际工作中我们可以结合自己产品中可复用的业务进行封装,提升封装业务代码的复用度,这里以百度的搜索场景为例进行演示,正常代码如下:

        driver =new ChromeDriver();String url = "http://www.baidu.com";driver.get(url);driver.manage().window().maximize();driver.findElement(By.id("kw")).sendKeys("selenium");driver.findElement(By.id("su")).click();try {Thread.sleep(3000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}driver.quit();

我们可以把搜索业务进行封装,只需要把driver.findElement(By.id("kw")).sendKeys("selenium");

中的selenium作为参数即可,创建一个类BaiduBusinessLib 来保存封装方法,代码如下:

public class BaiduBusinessLib {public static void searchKey(WebDriver p_driver,String p_key) {p_driver.findElement(By.id("kw")).sendKeys(p_key);p_driver.findElement(By.id("su")).click();try {Thread.sleep(3000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}

这里重点解释一下参数WebDriver p_driver,设计的目的就是把用例中使用的driver传入进来,否者运行代码时就会重新new 一个 driver,即重新启动一个浏览器,在新启动的浏览器中执行业务封装部分的代码,这显然会直接导致脚本执行失败!

封装后的用例代码如下:

@Testpublic void test() {driver =new ChromeDriver();String url = "http://www.baidu.com";driver.get(url);driver.manage().window().maximize();BaiduBusinessLib.searchKey(driver, "selenium");assertTrue(isElementPresent(By.partialLinkText("selenium"))); //验证有selenium 相关搜索链接	driver.quit();}private boolean isElementPresent(By by) {try {	driver.findElement(by);return true;}catch(NoSuchElementException e) {return false;}}

测试用例部分在封装了业务代码后是不是看起来简洁了很多呢?那么大家就按照这个思路结合自己的业务写写业务封装吧。

我的每一篇文章都希望帮助读者解决实际工作中遇到的问题!如果文章帮到了您,劳烦点赞、收藏、转发!您的鼓励是我不断更新文章最大的动力!

 

 

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

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

相关文章

交叉熵损失(Cross Entropy Loss)学习笔记

在分类任务中,我们通常使用交叉熵作为损失函数,首先给出交叉熵的计算公式: 二分类中: L 1 N ∑ i L i 1 N ∑ i − [ y i l o g ( p i ) ( 1 − y i ) ⋅ l o g ( 1 − p i ) ] \mathcal{L}\frac1{N}\sum_{i}L_i\frac1{N}\sum…

基于 Sentry 的前端监控系统搭建(Linux)

一、前言 随着技术这几年的发展与沉淀,线上数据指标监控也变得尤为重要,研发人员和运营人员需要对线上的产品指标有所感知,同时风险也需要及时暴露,很多公司开始自建监控系统,但对于一些定制化要求不是特别高的团队&a…

【PHP】Yii2 使用validate规则验证

目录 提交验证 声明规则 特殊验证 一个特殊验证的示例 内联验证器 一个完整示例 参考文档 提交验证 根据经验,您永远不应该相信从最终用户那里收到的数据,并且应该在很好地使用这些数据之前对其进行验证。 给定一个model模型,用户输入填…

网络爬虫之Ajax动态数据采集

动态数据采集 规则 有时候我们在用 requests 抓取页面的时候,得到的结果可能和在浏览器中看到的不一样,在浏览器中可以看到正常显示的页面教据,但是使用 requests 得到的结果并没有,这是因为requests 获取的都是原始的 HTML 文档…

前端跨页面交互信息或传递信息都有这么几种方式,总有一个满足你的使用场景

同源页面通信&#xff1a; 方法&#xff1a;Broadcast Channel 【广播】 这个可以查看我另一篇文章有使用案例 同一来源的不同文档&#xff08;在不同的窗口、选项卡、框架或 iframe 中&#xff09;之间进行通信 // page1<!DOCTYPE html> <html lang"en"…

(1)(1.9) MSP (version 4.2)

文章目录 前言 1 协议概述 2 配置 3 参数说明 前言 ArduPilot 支持 MSP 协议&#xff0c;可通过任何串行端口进行遥测、OSD 和传感器。这样&#xff0c;ArduPilot 就能将遥测数据发送到 MSP 兼容设备&#xff08;如大疆护目镜&#xff09;&#xff0c;用于屏幕显示&#x…

(C)一些题15

1.下列关于 C 语言程序结构的说法中&#xff0c;不正确的是&#xff08;D) A &#xff0e;一个程序由一个或多个源程序文件组成 B &#xff0e;函数是 C 程序的主要组成部分 C &#xff0e;程序总是从 main 函数开始执行的 D . C 语言本身提供了许多输入输出语句 解析&…

【Java基础】01- 基础概念

注释和关键字 注释 定义&#xff1a;代码中需要一些解释说明性的文字&#xff0c;通常称为注释。 单行注释&#xff1a; // 注释信息多行注释&#xff1a;/* 注释信息 */文档注释&#xff1a;/** 注释信息 */ 文档注释可以利用Java中自带的DOC工具&#xff0c;自动生成相关代…

银河麒麟v10 安装mysql 8.35

银河麒麟v10 安装mysql 8.35 1、卸载mariadb2、下载Mysql安装包3、安装Mysql 8.353.1、安装依赖包3.2、安装Mysql3.3、安装后配置 1、卸载mariadb 由于银河麒麟v10系统默认安装了mariadb 会与Mysql相冲突&#xff0c;因此首先需要卸载系统自带的mariadb 查看系统上默认安装的M…

MyBatis动态SQL中if,where,set,trim四种标签的使用和联系

目录 MyBatis动态SQL中if&#xff0c;where&#xff0c;set&#xff0c;trim四种标签的使用和联系1、先介绍trim标签以下是trim标签中涉及到的属性&#xff1a; 2、使用trim标签或where标签去除多余的and关键字3、使用trim标签或set标签去除多余的逗号 MyBatis动态SQL中if&…

前端常用的开发工具

前端常用的开发工具&#x1f516; 文章目录 前端常用的开发工具&#x1f516;1. Snipaste--截图工具2. ScreenToGif--gif图片录制3. Typora--Markdown编辑器4. notepad--文本代码编辑器5. uTools--多功能工具6. EV录屏--录屏软件7. Xmind--思维导图8. Apifox -- 接口调试9. Tor…

【大数据】NiFi 中的 Controller Service

NiFi 中的 Controller Service 1.Service 简介1.1 Controller Service 的配置1.1.1 SETTING 基础属性1.1.2 PROPERTIES 使用属性1.1.3 COMMENT 页签 1.2 Service 的使用范围 2.全局参数配置3.DBCPConnectionPool 的使用样例4.在 ExcuseGroovyScript 组件中使用 Service 1.Servi…

记一次 Nginx 调参的踩坑经历

最近在基于SSE&#xff08;Server Sent Events&#xff09;做服务端单向推送服务&#xff0c;本地开发时一切顺利&#xff0c;但是在部署到预发环境时就碰到1个很诡异的问题&#xff0c;这里需要简单介绍下我们的整体架构&#xff1a; 整体架构 可以看到所有的请求都会先到统一…

2024 年 22 款顶级免费数据恢复软件比较 [Windows 和 Mac]

适用于 Windows 和 Mac 用户的最佳数据恢复软件下载列表和比较&#xff0c;可快速恢复丢失的数据、已删除的文件、照片或格式化的分区数据&#xff1a; 数据恢复软件是一种从任何存储介质恢复丢失文件的应用程序。它可以恢复由于病毒攻击、硬盘故障或任何其他原因而意外删除或…

NIO的实战教程(简单且高效)

1. 参考 建议按顺序阅读以下三篇文章 为什么NIO被称为同步非阻塞&#xff1f; Java IO 与 NIO&#xff1a;高效的输入输出操作探究 【Java.NIO】Selector&#xff0c;及SelectionKey 2. 实战 我们将模拟一个简单的HTTP服务器&#xff0c;它将响应客户端请求并返回一个固定的…

Wails中js调用go函数(1种go写法,2种js调用方法)

官方js调用go方法文档&#xff1a;https://wails.io/zh-Hans/docs/howdoesitwork a&#xff09;在app.go文件里写一个要js调用的go函数&#xff1a; func (a *App) JSCallGo(data1 string) string { return “test” } b&#xff09;运行 wails dev 命令&#xff0c…

Maven核心概念

1 Maven工程的GAVP Maven 中的 GAVP 是指 GroupId、ArtifactId、Version、Packaging 等四个属性的缩写&#xff0c;其中前三个是必要的&#xff0c;而 Packaging 属性为可选项。 这四个属性主要为每个项目在maven仓库中做一个标识&#xff0c;方便项目之间相互引用。 GAV G 即…

54.0/CSS 样式属性(详细版)

目录 54.1 文本属性 54.1.1 设置字体——font-family 54.1.2 设置字号(font-size)和字的颜色(color) 54.1.3 设置字体加粗——font-weight 54.1.4 添加文字修饰——text-decoration 54.1.5 设置文本排列方式——text-align 54.1.6 设置段落首行缩进——text-indent …

Redis性能优化:关键配置和最佳实践

大家好&#xff0c;我是升仔 Redis作为一个高性能的键值存储系统&#xff0c;在现代应用架构中扮演着至关重要的角色。性能优化是Redis部署与维护中的一个关键环节。本文将从关键配置、持久化配置、实践场景和异常处理配置等方面&#xff0c;详细介绍如何优化Redis的性能。 关…

桶装水送水小程序:提升服务质量的利器

随着移动互联网的发展&#xff0c;越来越多的消费者通过手机在线购物和订购商品。如果你是一名桶装水供应商&#xff0c;想要拓展线上业务&#xff0c;那么开发一个桶装水微信小程序将是一个明智的选择。本文将指导你从零开始开发一个桶装水微信小程序&#xff0c;让你轻松完成…