Web自动化001-Web自动化前端基础及Selenium原理和环境搭建

Web自动化001-Web自动化前端基础及Selenium原理和环境搭建

Web自动化前端基础及Selenium原理和环境搭建

1.什么是web自动化测试?

web自动化测试是指利用自动化的测试工具或者框架,通过编写脚本和模拟用户在web页面上的任意操作

web自动化测试是一种比较高效,准确、可重复测试的方法,可以大大的降低成本,从而提高效率,缩短测试周期

2.接口自动化和web自动化的区别

测试环境:

  • 接口自动化:http协议(接口)还有比如TCP/IP SDK GRPC等相关接口
  • Web自动化测试:浏览器(web页面,UI界面层)

测试结果:

  • 接口自动化:发送1个请求、获取1个响应
  • Web自动化测试:无序,延迟,异步

测试代码:

  • 接口自动化:常用request发送请求
  • Web自动化:页面的跳转,点击,输入,双击,拖拽,选择框等等

测试断言:

  • 接口自动化:断言接口响应内容信息
  • Web自动化: 网址、标题、页面内容(文件,颜色,大小,位置。。。。)

3.web自动化测试流程

web自动化测试和手工功能测试的本质区别是:前置使用工具,代码自动化执行 后者是人工手动去执行

  • 需求分析:需要明确测试的目标还有范围---测什么 建议是先有手工测试用例,再从手工测试用例中筛选出来适合做自动化的测试用例,将这些用例使用自动化脚本进行覆盖,从而替换手工用例的执行。
  • 技术选型:需要根据需求和项目的特点,选择合适的自动化测试框架或者工具,需要判断当前的项目是否适合做自动化,做自动化后提升的地方在哪-效率有没有质的提升,能否节省测试工作的人力和时间的成本,有没有遇到自动化的技术瓶颈问题----做自动化的最终目的,是希望后期可以将一部分手工用例被自动化脚本取代执行。
    1. 一个中小型项目的测试用例可能就四千多条,一般自动化的覆盖率在1/3
    1. 不能完完全全代替手工测试,因为其存在很多的瓶颈、难点、以及一些没有必要的场景 正常比例1/3
    1. 使用什么语言做自动化(java、python c++) 使用什么第三方库(seleniumbase,cypress,selenium) 使用什么测试框架(pytest、unittest,Testng,behave,Junit,Googletest) 日志(logging) 测试报告(pytest-html.allure)
  • 搭建自动化测试的环境:测试环境(web服务环境和地址),测试服务器和测试硬件的资源,测试数据--参数化 有效的数据 无效的数据 实参,测试的工具等等
  • 编写测试用例脚本:pom设计模式(一个页面定义为一个类,页面中需要使用的属性/页面的元素定义为类属性,需要的操作定义为页面的类方法,实际使用的时候,只需要导入这个类,类实例化对象,调用对象的方法),关键字设计模式(Excel)进行 极限封装 相当于封装后 在excel中写好用例 直接可以去运行
    1. (脚本核心要素:可重复性、可维护性、可扩展性等)
  • 自动化执行测试用例:需要让用例的脚本自动化的去执行,收集测试的结果和日志信息
    1. 测试结果:预期结果和实际结果之间的对比 需要断言,自动化测试的用例每一条都需要添加断言
  • 分析测试结果:对测试的结果进行全面的分析,去发现测试的缺陷和性能瓶颈(比如页面的加载时间,数据展示的时间)
  • 进行缺陷管理:需要将测试的缺陷记录在缺陷管理中
    1. 禅道、TAPD、JIRA、pingcode
  • 完善持续集成:需要将自动化的测试集成到持续系统中,实现自动化测试的持续化和自动化的部署
    1. jenkins
    1. gitlab-runner

4.web自动化测试的场景

核心使用场景:

  • 冒烟测试-基本的功能全跑一遍
  • 回归测试-对之前版本的功能测试,对之前修复的问题测试
  • web端直面用户端(E2E测试)的测试
    1. 扩展:
      1. E2E测试(End-to-End Testing)指的是对整个软件系统进行全面、完整的测试,包括从用户界面到后端数据库的所有功能和处理流程。它模拟真实的用户场景,通过自动化或手动的方式测试整个应用程序,并确保其能够正确地处理输入和输出数据,满足业务需求和用户期望。
      1. E2E测试通常需要模拟多种使用情况和环境,比如不同的浏览器、操作系统、网络连接等,以验证系统在各种情况下都能正常运行和响应。E2E测试一般基于功能需求文档和业务流程来设计测试用例,测试过程中会涉及到单元测试、集成测试、系统测试等多个层次,旨在尽可能发现并排除系统中的缺陷和故障。
      1. E2E测试是软件测试过程中非常重要的一部分,可以有效地提高软件质量和用户体验,减少软件维护成本和风险,是软件开发生命周期中必不可少的一个环节。
  • 目的:为了高效率,比较常用于线上巡查

5.web页面构造

web(页面)=html+css+javaScript(前端三剑客)

css用来处理页面的样式和UI效果 js用来作为页面的数据和行为的交互

html:是一门标记语言,由标记(标签)组成,决定了网页的内容

css:给内容进行修饰,颜色,大小,字体,位置等等

JavaScript:执行交互,改变html和css

html标签语言的基本介绍

  • 没有逻辑判断
  • 没有数据计算
  • 标签先后顺序不重要
  • 标签大多数都是闭合(有始有终)---成对存在的,部分标签是单个存在的(如:br换行标签)

基本的构造形式

示例代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>

</body>
</html>

  • 基本格式:开始标签,内容,结束标签
  • 标签大多数都是闭合,但是也有单标签
  • 标签语言容错率特别高--存在自己的遇错处理机制(语法存在通常不会报错,只是不可用)
  • 可以对标签进行注释 ctrl+/

标签=元素

6.常见的标签(元素)基本使用

段落:P 换行:br 输入框 :input 文本域:textarea 按钮:button

超链接:a 图片:img 列表:ol或者ul ---有序列表/无序列表

块标签:div

标签的基本使用内容:

下面是一些demo的示例代码

<!-- 示例代码: -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>我的页面</title>
</head>
<body>
<!--段落:P-->
<p>测试</p>
<p>研发</p>
<p>123</p>
<br>进行换行操作
<!--输入框:input-->
<input>
<br>
<!--文本域:<textarea-->
<textarea>开始写论文</textarea>
<!--<button 按钮-->
<button>
确定
</button>
<button>
取消
</button>

<a href="https://www.bilibili.com/">跳转到哔站页面</a>
<img src="kanrong.png" alt="图片示例">
<!--图片<img src="">-->
<ol>
<li>第1个</li>
<li>第2个</li>
<li>第3个</li>
<li>第4个</li>

</ol>
<ul>
<li>第1个</li>
<li>第2个</li>
<li>第3个</li>
<li>第4个</li>

</ul>

</body>
</html>

示例代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>我的页面2</title>
</head>
<body>
<!--文件上传-->
<input type="file">
<br>
<!--单选框-->
<form>
<input type="radio" value="A" name="石头">A<br>
<input type="radio" value="B" name="石头">B<br>
<input type="radio" value="C" name="石头">C<br>
</form>

<!--复选框-->
<form>
<input type="checkbox" value="A" name="石头1">A<br>
<input type="checkbox" value="B" name="石头2">B<br>
<input type="checkbox" value="C" name="石头3 ">C<br>
</form>

<!--下拉框-->
<select>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
</select>


</body>
</html>

复杂标签的基本使用

示例代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>我的页面2</title>
</head>
<body>
<!--文件上传-->
<input type="file">
<br>
<!--单选框-->
<form>
<input type="radio" value="A" name="石头">A<br>
<input type="radio" value="B" name="石头">B<br>
<input type="radio" value="C" name="石头">C<br>
</form>

<!--复选框-->
<form>
<input type="checkbox" value="A" name="石头">A<br>
<input type="checkbox" value="B" name="石头">B<br>
<input type="checkbox" value="C" name="石头">C<br>
</form>

<!--下拉框-->
<select>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
</select>
<!--表单标签-->
<form>
<p>
<label>姓名:</label><input type="text">
</p>
<p>
<label>密码:</label><input type="password">
</p>
<p>
<label>性别:</label>
<input type="radio">男
<input type="radio">女
</p>
<p>
<label>爱好:</label>
<input type="checkbox">唱歌
<input type="checkbox">跑步
<input type="checkbox">游泳
</p>
<p>
<label>照片:</label>
<input type="file">
</p>
<p>
<label>个人描述:</label>
<textarea></textarea>
</p>
<p>
<label>籍贯:</label>
<select>
<option>北京</option>
<option>上海</option>
<option>广州</option>
<option>深圳</option>
</select>
</p>
<p>
<input type="submit" value="提交">
<input type="reset" value="重置">
</p>
</form>

</body>
</html>

页面的设计模式:DMO

文档对象模型

以面向对象的思路,使用和操作html文档

扩展:

"DMO"是指文档对象模型(Document Object Model)。文档对象模型是一种用于表示和操作HTML、XML和XHTML等文档的编程接口。

文档对象模型(DOM)将HTML或XML文档表示为一个树状结构,其中每个元素、属性、文本等都被表示为一个节点,节点之间有层次关系。通过使用DOM,可以使用脚本语言(如JavaScript)访问和操作文档中的各个元素、属性和文本。

DOM提供了一组API(应用程序编程接口),使开发者能够通过编程方式对网页进行操作。这些API包括访问和修改元素、添加和删除节点、更改样式和属性等功能。通过DOM,开发者可以动态地更新网页内容、响应用户操作以及与用户交互。

DOM不仅仅是在网页开发中常用的概念,还在许多其他应用程序领域中被使用,如XML处理和服务器端JavaScript(如Node.js)等。

页面的操作设计模式:POM

页面对象的模型

页面的标签元素属性 页面的操作方法 页面的业务

以面向对象的思路,使用和操作html文档

在Web自动化测试中,POM指的是"页面对象模型"(Page Object Model)。POM是一种设计模式,用于组织和管理Web应用程序的自动化测试代码。

Page Object Model的基本思想是将每个网页视为一个对象,并将其相关的操作和行为封装在该对象的类中。每个页面对象类(Page Object Class)对应于一个页面或一个页面的一部分,它提供了对页面元素和操作的抽象和封装。

POM的优势包括:

1. 可维护性:通过将页面元素和操作封装在页面对象类中,可以使测试代码更易于维护和理解。如果页面发生变化,只需要更新相应的页面对象类,而不需要在整个测试代码中进行修改。

2. 可重用性:可以在不同的测试用例中重用页面对象类,减少了代码的重复编写。

3. 可读性:通过使用POM,测试代码的可读性得到提高,因为测试用例可以更加清晰地描述和理解。

4. 维护测试数据分离:可以将测试数据与页面对象类分离,使测试数据更易于管理和更新。

使用POM的一般流程包括:

1. 创建页面对象类:为每个页面或页面的一部分创建一个页面对象类,定义页面元素和相关操作的方法。

2. 将测试用例与页面对象类关联:在编写测试用例时,使用页面对象类中的方法来操作页面元素。

3. 组织测试用例:使用页面对象类的方法来编写和组织测试用例。

POM是一种常用的设计模式,用于提高Web自动化测试的可维护性和可读性。它使得测试代码更模块化、可重用,并且减少了测试代码的重复性。

7.selenium的基本介绍

selenium是一个用于web应用程序的测试工具

特点:

    1. 开源软件:开源代码可以进行自定义的扩展和添加额外的功能
    1. 跨平台:windows、linux、Mac
    1. 支持多语言的:python、java、c#、JavaScript、ruby等等
    1. 核心功能:可以在多个浏览器或者不同类型的浏览器上进行自动化测试
    1. 成熟稳定:市面上占用率非常高
    1. 功能丰富:自定义功能和定制化功能

8.selenium中的webdriver

selenium的原理

Selenium实现web自动化测试的底层原理是通过操作浏览器的DOM(文档对象模型)来实现的。

具体来说,Selenium会启动一个浏览器实例,然后通过WebDriver与浏览器进行交互,执行一系列操作,如打开网页、输入文本、点击按钮等,最终获取页面元素的状态和结果。在执行这些操作的过程中,Selenium会调用浏览器提供的API,通过模拟用户的操作来与页面进行交互。

在底层实现上,Selenium会通过JavaScript注入的方式来控制浏览器。具体来说,Selenium会在浏览器中注入一段JavaScript代码,通过这段代码来操作页面元素、获取元素状态等。

总之,Selenium实现web自动化测试的底层原理是通过控制浏览器来模拟用户操作,从而实现对页面的测试和验证。

选择一种支持的编程语言:python

需要配置不同的浏览器的驱动(webdriver)

一般都会选择谷歌浏览器进行自动化测试

安装第三方库selenium

9.selenium环境搭建

  • 查看谷歌浏览器的版本号:

  • 下载对应的驱动
    1. http://chromedriver.storage.googleapis.com/index.html (老版本情况)
    1. 注意:驱动的版本号一定要跟浏览器的版本保持一致
    1. 后面发现浏览器更新比较快,最新的浏览器驱动下载地址如下:谷歌:
    1. 其实官方文档也详细的告知我们浏览器的下载地址,我在这里粘一下:
  • 在pycharm中安装selenium的环境
    1. pip install selenium
    1. 默认安装最新版本
    1. 如果之前安装过selenium那么进行卸载:
      1. pip uninstall selenium
    1. 统一版本号:selenium 4.9.1(可以通过pip list查看是否安装对应的版本号)
  • 把驱动放到当前项目就可以启动浏览器

检测环境搭建:

示例代码:
# 1.先进行导入selenium里面的驱动webdriver
import time
from selenium import webdriver
# 2.创建驱动对象(谷歌)
driver = webdriver.Chrome()
# webdriver.Firefox()
# webdriver.Ie()
# webdriver.Safari()
# 3.准备一个需要被测url地址
url = "https://www.baidu.com/"
# 4.访问被测试页面
driver.get(url)
# 5.将页面最大化
driver.maximize_window()
time.sleep(3)
# 6.关闭驱动对象
driver.quit()

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

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

相关文章

道路缺陷智能检测系统

道路缺陷智能检测系统的核心是基于YOLOX算法结合OpenCV, 道路缺陷智能检测系统能够通过无人机或车载相机捕获的道路图像,准确识别出路面的各类病害。无论是细微的龟裂还是明显的坑洞,系统都能迅速发现并标记出来。通过深度学习技术,系统能够学习并识别病害的特征,随着数据…

皮带输送机空载识别检测系统

皮带输送机空载识别检测系统核心在于通过现场监控摄像机,皮带输送机空载识别检测系统实时监测皮带输送机上是否有物料。系统的工作原理是首先利用YOLOvX算法对摄像机捕获的图像进行处理,识别出图像中的物料。然后,通过设定的阈值来判断物料是否存在。当监控画面中没有物料存…

泥石流识别摄像机

泥石流识别摄像机通过高清摄像头捕捉山体图像,泥石流识别摄像机利用YOLOX算法对能够对山体的微小变化进行精确捕捉,并通过深度学习不断优化其识别能力,识别出山体的异常变化,如泥石流滑坡、落石等迹象。一旦检测到这些异常,系统会立即启动报警机制,将预警信息发送给相关部…

课堂教学行为质量评估检测系统

课堂教学行为质量评估检测系统通过在教室内部署摄像头,课堂教学行为质量评估检测系统实时捕捉课堂视频,利用深度学习算法对视频流进行智能分析,能够准确识别出学生的各种课堂行为,如起立、读写、举手、听讲、趴桌子、玩手机等。这些行为数据被量化,为后续的教学质量评估提…

gitlab的数据备份和恢复

作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任。 目录一.手动备份配置文件二.手动备份数据三.模拟删除meta-data项目数据1 删除meta-data项目2 meta-data被删除成功四.通过备份恢复meta-data项目数据1 恢复前需要先停止puma和sidekiq服务2 恢复时指定备份文件…

Linux中实现根据scaffold名称从fasta文件中提取数据(scaffold名称长)

001、(base) [sy20213040737@admin2 test]$ ls chr.list test.fa (base) [sy20213040737@admin2 test]$ cat test.fa ## 测试fasta文件 >chr1 xxxx aaaabbb cccccddd >chrx eee jj aaaaaabbbbbc cccccdddd >chr3 iii rr aaaaaaaaa aaaaaaaaa bbbbbbbb >c…

SpringMVC-06-SSM整合

1、环境要求IDEA MySQL 8.x Tomcat 9 Maven 3.6这只是大型软件要求,项目相关的jar包依赖将在Maven中配置。 项目前置技能:MySQL、Mybatis、Spring、JavaWeb、简单的前端知识。 2、数据库表 创建一个存放书籍数据的数据库表 CREATE DATABASE `ssmbuild`;USE `ssmbuild`;DROP T…

高通sku lisence升级

最近在搞高通的license升级,也就是提速cpu/gpu性能,记录一下一、背景 高通为了满足不同阶段开发需求,对soc性能做了一些特定定义,因此我们需要根据产品的开发阶段或者需求变化,使用对应的性能指标。不同license下的cpu gpu性能表现目前我们ES6代码默认使用的是CCCC对应的S…

2024-2025-1 20241408陈烨南《计算机基础与程序设计》第十周学习总结

2024-2025-1 20241408陈烨南《计算机基础与程序设计》第十周学习总结这个作业属于哪个课程 2024-2025-1-计算机基础与程序设计)这个作业要求在哪里 https://www.cnblogs.com/rocedu/p/9577842.html#WEEK10这个作业的目标 信息系统、数据库与SQL、人工智能与专家系统、人工神经…

C# mvc +vue+ axios+ api + javascript

一整天,分享了几条随笔, C# mvc +axios + web api + javascript https://www.cnblogs.com/insus/p/18577591 asp.net mvc视图传递数据至另一页的视图 https://www.cnblogs.com/insus/p/18578261 C# mvc +angular+ $http+ web api + javascript https://www.cnblogs.com/insus…

Three.js入门-常见几何体

这章节,我们将介绍 Three.js 中常见的几何体(Geometry),包括立方体、球体、圆柱体、平面、圆环、圆锥体等。几何体是构建 3D 模型的基础元素,通过不同的几何体可以创建出各种形状的物体。 在 Three.js 中,几何体是由顶点、面、法线等数据组成的,通过材质(Material)的渲…