【软件测试】之自动化测试

🏀🏀🏀来都来了,不妨点个关注!
🎧🎧🎧博客主页:欢迎各位大佬!
在这里插入图片描述

文章目录

  • 什么是自动化测试
  • Selenium介绍
    • 什么是Selenium
    • Selenium的特点
    • 工作原理
  • Selenium+Java环境搭建
    • 下载chrome浏览器
    • 下载chrome对应的驱动
    • 配置环境变量
    • 编写自动化测试代码
  • webdriver API
    • 元素定位
      • CSS定位
      • XPath定位
      • CSS定位和XPath定位相关面试题
        • CSS选择语法:
        • XPath选择语法:
          • 绝对路径:/html/head/title (不常用)
          • 相对路径(以下为常见的几种):以双斜杠开头表示相对路径
    • 操作测试对象
      • clear 清除对象输入的文本内容
      • submit 提交
      • getAttribute 获取元素对应属性的值

什么是自动化测试

自动化测试指软件测试的自动化,在预设状态下运行应用程序或者系统,预设条件包括正常和异常,最后评估运行结果。将人为驱动的测试行为转化为机器执行的过程。
通俗来说就是:自动化测试就是将人工测试手段进行转换,让代码去执行。
在这里插入图片描述
自动化测试包括UI自动化,接口自动化,单元测试自动化。按照这个金字塔模型来进行自动化测试规划,可以产生最佳的自动化测试产出投入比(ROI),可以用较少的投入获得很好的收益。
单元测试
最大的投入应该在单元测试上,单元测试运行的频率也更加高。java的单元测试框架是Junit
接口自动化
接口测试就是API测试,相对于UI自动化API自动化更加容易实现,执行起来也更稳定。
接口自动化有以下特点:

  • 可在产品前期,接口完成后介入
  • 用例维护量小
  • 适合接口变动较小,界面变动频繁的项目

常见的接口自动化测试工具有,RobotFramework,JMeter,SoapUI,TestNG+HttpClient,Postman等。
UI自动化
虽然测试金字塔告诉我们尽量多做API层的自动化测试,但是UI层的自动化测试更加贴近用户的需求和软件系统的实际业务。并且有时候我们不得不进行UI层的测试。
UI自动化的特点:

  • 用例维护量大
  • 页面相关性强,必须后期项目页面开发完成后介入
  • UI测试适合与界面变动较小的项目

UI自动化测试的好处:

降低大型系统的由于变更或者多期开发引起的大量的回归测试的人力投入,这可能是自动化测试最主要的任务,特别是在程序修改比较频繁,效果是非常明显的,自动化测试前期人力投入较多,但后期进入维护期后,可节省大量人力,而手工测试后期需要增加大量人力用于回归测试减少重复测试的时间,实现快速回归测试创建优良可靠的测试过程,减少人为错误可以运行更多更繁琐的测试可以执行一些手工测试困难或不可能进行的测试更好的利用资源测试脚本的重用性

UI层自动化测试框架
UI层的测试框架比较多,比如Windows客户端测试的AutoIT,web测试的selenium以及TestPlant
eggPlant,Robot framework,QTP等。
这里我们主要以Web UI自动化测试框架Selenium为例进行详细介绍。selenium有以下优点:

  • 免费,也不用再为破解软件而大伤脑筋
  • 小巧,对于不同的语言它只是一个包而已,而QTP 需要下载安装1个多G 的程序。
  • 支持各种语言,这也是最重要的一点,不管你以前更熟悉C、java、ruby、python、或都是C# ,你都可以通过
    selenium 完成自动化测试,而QTP 只支持VBS
  • 支持多平台:windows、linux、MAC ,支持多浏览器:ie、ff、safari、opera、chrome
  • 支持分布式测试用例的执行,可以把测试用例分布到不同的测试机器执行,相当于分 发机的功
    能。

Selenium介绍

什么是Selenium

Selenium是用来做web自动化测试的框架。

Selenium的特点

在上面我们也提到了它的特点:支持各种平台,支持各种浏览器,支持各种语言,有丰富的API。

工作原理

在这里插入图片描述

Selenium+Java环境搭建

下载chrome浏览器

这里我们使用的浏览器是chrome,这也是推荐使用的浏览器,下载地址:chrome

下载chrome对应的驱动

这里我们需要先查看我们下载的chrome浏览器的版本然后下载对应版本的驱动。
在这里插入图片描述
下载地址 (114.版本以前)
新版本下载路径 (114.版本以后)
因为我们现在使用的chrome浏览器基本都是114以后的版本所以点击第二个下载链接即可,然后下载和自己浏览器对应版本的即可,以我的版本123.0.6312举例就下载下面的版本。
在这里插入图片描述
在这里插入图片描述
下载完成后我们将zip文件解压到自己喜欢的文件夹即可,然后将里面的chromedriver.exe放到chrome.exe同级目录即可,如下图:
在这里插入图片描述

配置环境变量

这里我们需要将chrome浏览器的文件路径配置到环境变量中,如下图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3在这里插入图片描述

编写自动化测试代码

配置好环境变量之后,我们就可以使用idea新建一个meavn项目,在pom.xml文件中加入以下依赖:

  <dependencies><!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java --><dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-java</artifactId><version>3.141.59</version></dependency></dependencies>

然后我们就可以开始编写自动化测试脚本了,如下,我们使用chrome打开百度网页为例:

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;public class Main {public static void main(String[] args) {ChromeOptions options = new ChromeOptions();//允许所有请求options.addArguments("--remote-allow-origins=*");WebDriver webDriver = new ChromeDriver( options);webDriver.get("https://www.baidu.com");}
}

运行结果:

在这里插入图片描述

webdriver API

元素定位

比如我们现在要对百度的输入框输入一个内容进行自动化测试,那么我们是不是得先通过控制台定位到搜索框这个元素,才能执行我们的自动化代码找到这个元素。
我们定位元素使用的是findElement.
元素定位的方法有很多:
在这里插入图片描述
这里我们介绍两个最主要的定位方法CSS定位和XPath定位,它们也是功能最强大的,几乎可以定位到页面所有元素的。

CSS定位

这里我们拿百度页面举例说明,例如我们要在百度的搜索框输入"软件测试"这样的内容,我们就可以先通过控制台(F12)找到搜索框这个元素,然后可以选择它里面的class属性(id属性…都可以)作为我们的属性进行定位。
在这里插入图片描述

 WebElement element = webDriver.findElement(By.cssSelector(".s_ipt"));element.sendKeys("软件测试");

在这里插入图片描述
运行结果:
在这里插入图片描述

XPath定位

在这里插入图片描述

WebElement element = webDriver.findElement(By.xpath("//*[@id=\"kw\"]"));

在这里插入图片描述

CSS定位和XPath定位相关面试题

CSS选择语法:
  • id选择器:#id
  • 类选择器:.class
  • 标签选择:标签名
  • 后代选择器:父级选择器/子级选择器
    上述我们使用CSS定位时就是用的类选择器,也可以实现id选择器,如下图:
    在这里插入图片描述
XPath选择语法:
绝对路径:/html/head/title (不常用)

在这里插入图片描述

相对路径(以下为常见的几种):以双斜杠开头表示相对路径
  • 相对路径+索引 : //form/span[1]/input

在这里插入图片描述

  • 相对路径+属性值(找相关属性)://input[@class=“s_ipt”]
    在这里插入图片描述

  • 相对路径+通配符 ://*[@*=“su”]
    这种就是在整个页面中查找所有带有"su"的元素,格式形如: //*[@*=“”]
    在这里插入图片描述

相对路径+文本匹配://a [text()=“新闻”]
这种一般是用来查找超链接元素,格式形如://a [text()=“”]
在这里插入图片描述

操作测试对象

前面讲到了不少知识都是定位元素,定位只是第一步,定位之后需要对这个元素进行操作。是鼠标点击
还是键盘输入,或者清除元素的内容,或者提交表单等。这个取决于定位元素需要进行的下一步操作。
webdriver 中比较常用的操作对象的方法有下面几个:

  • click 点击对象
  • send_keys 在对象上模拟按键输入
  • clear 清除对象输入的文本内容
  • submit 提交
  • text 用于获取元素的文本信息
  • getAttribute 获取元素对应属性的值

clear 清除对象输入的文本内容

比如我们在百度的搜索框输入了“软件测试”进行测试后,想在搜索框输入新的内容进行测试,此时就需要先清空搜索框的内容,我们用的方法就是clear(),具体代码如下:

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;import static java.lang.Thread.sleep;public class Main {public static void main(String[] args) throws InterruptedException {ChromeOptions options = new ChromeOptions();//允许所有请求options.addArguments("--remote-allow-origins=*");WebDriver webDriver = new ChromeDriver( options);webDriver.get("https://www.baidu.com");//WebElement element = webDriver.findElement(By.cssSelector(".s_ipt")); //通过类选择器WebElement element = webDriver.findElement(By.cssSelector("#kw"));   //通过id选择器//WebElement element = webDriver.findElement(By.xpath("//*[@id=\"kw\"]"));element.sendKeys("软件测试");// 找到百度一下按钮// 点击webDriver.findElement(By.cssSelector("#su")).click();sleep(3000);element.clear();}
}

在这里插入图片描述
运行结果:
在这里插入图片描述
在这里插入图片描述

submit 提交

如果点击的元素放在form标签中,此时submit实现的效果和click的是一样的,但如果不放在form标签中,则submit会报错。

private static void test02() {ChromeOptions options = new ChromeOptions();//允许所有请求options.addArguments("--remote-allow-origins=*");WebDriver webDriver = new ChromeDriver( options);webDriver.get("https://www.baidu.com");//“搜索框”元素WebElement element = webDriver.findElement(By.cssSelector("#kw"));element.sendKeys("软件测试");//“百度一下”元素WebElement element1 = webDriver.findElement(By.cssSelector("#su"));element.submit();;}

此时不报错,因为“百度一下”元素在form表单中,运行结果如下:
在这里插入图片描述
非form标签内:

 private static void test02() {ChromeOptions options = new ChromeOptions();//允许所有请求options.addArguments("--remote-allow-origins=*");WebDriver webDriver = new ChromeDriver( options);webDriver.get("https://www.baidu.com");WebElement element = webDriver.findElement(By.cssSelector("#kw"));//element.sendKeys("软件测试");
//        WebElement element1 = webDriver.findElement(By.cssSelector("#su"));webDriver.findElement(By.xpath("//a [text()=\"新闻\"]")).submit();}

在这里插入图片描述

此时使用click()则不会报错, 所以在 click 和 submit 中,推荐使用 click,避免出现错误。

getAttribute 获取元素对应属性的值

例如我们现在要找到“百度一下”按钮,这个按钮属于一个属性,没有放在标签中间,不可以通过 test 来获取,这个时候需要通过getAttribute 获取元素对应属性的值。
代码如下:

private static void test03() {ChromeOptions options = new ChromeOptions();//允许所有请求options.addArguments("--remote-allow-origins=*");WebDriver webDriver = new ChromeDriver( options);webDriver.get("https://www.baidu.com");String button_value = webDriver.findElement(By.cssSelector("#su")).getAttribute("value");if (button_value.equals("百度一下")) {System.out.println("测试通过");} else {System.out.println("测试不通过");}}

结果如下:
在这里插入图片描述
以上就是今天分享的全部内容了,感谢支持!

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

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

相关文章

项目管理实用表格与应用【项目文件资料分享】

项目管理基础知识 项目管理可分为五大过程组&#xff08;启动、规划、执行、监控、收尾&#xff09;十大知识领域&#xff0c;其中包含49个子过程 项目十大知识领域分为&#xff1a;项目整合管理、项目范围管理、项目进度管理、项目成本管理、项目质量管理、项目资源管理、项目…

实现各平台确定性的物理碰撞

1.使用FixedUpdate而不是Update 1.物理运算&#xff0c;比如刚体运动系统的运算是通过固定的时间来驱动的。 2.再moba帧同步游戏中&#xff0c;15帧的固定调用差不多是网络那边的极限了&#xff0c;采用其他手段如平滑显示来提高画面的平滑度。 FixedUpdate是以一个固定的帧率…

前端Debugger时复制的JS对象字符转JSON对象

前端debugger时&#xff0c;复制的对象在控制台输出时是如下格式&#xff0c;需要转换为对象格式来进行验证操作 bridgeId : 4118 createBy : null createTime : "2023-03-24 10:35:26" createUserId : 1 具体实现代码&#xff1a; // 转换transform (text) {l…

腾讯课堂即将停止服务?来试试这款开源的知识付费系统

项目介绍 本系统基于ThinkPhp5.0layuiVue开发,功能包含在线直播、付费视频、付费音频、付费阅读、会员系统、分销系统、拼团活动、直播带货、直播打赏、商城系统等。能够快速积累客户、会员数据分析、智能转化客户、有效提高销售、吸引流量、网络营销、品牌推广的一款应用&…

如何检查购买的Facebook账号优劣?

Facebook 是全球最受欢迎的社交网络之一,为品牌广告提供了巨大的潜力。许多公司和营销人员使用 Facebook 来推广他们的产品和服务&#xff0c;经常会购买账号。当然也分出了很多账号&#xff0c;比如个人号&#xff0c;BM号&#xff0c;广告号&#xff0c;小黑号等等。 但是,有…

【高阶数据结构】图的应用--最短路径算法

文章目录 一、最短路径二、单源最短路径--Dijkstra算法三、单源最短路径--Bellman-Ford算法四、多源最短路径--Floyd-Warshall算法 一、最短路径 最短路径问题&#xff1a;从在带权有向图G中的某一顶点出发&#xff0c;找出一条通往另一顶点的最短路径&#xff0c;最短也就是沿…

图像信号处理器(ISP)基础算法及处理流程

&#x1f4aa; 专业从事且热爱图像处理&#xff0c;图像处理专栏更新如下&#x1f447;&#xff1a; &#x1f4dd;《图像去噪》 &#x1f4dd;《超分辨率重建》 &#x1f4dd;《语义分割》 &#x1f4dd;《风格迁移》 &#x1f4dd;《目标检测》 &#x1f4dd;《暗光增强》 &a…

找不到msvcp120.dll无法继续执行的原因分析及解决方法

在计算机使用中&#xff0c;经常会遇到msvcp120.dll文件丢失的情况&#xff0c;很多人对这个文件不是很熟悉&#xff0c;今天就来给大家讲解一下msvcp120.dll文件的丢失以及这个文件的重要性&#xff0c;让大家更好地了解计算机&#xff0c;同时也可以帮助我们更好地掌握这个文…

SpringMVC 的工作流程和详细解释

Spring MVC&#xff08;Model-View-Controller&#xff09;框架是基于经典的 MVC 设计模式构建的&#xff0c;用于开发 Web 应用程序。下面是 Spring Boot MVC 的工作流程和详细解释&#xff1a; 1.客户端发起请求 1.客户端&#xff08;通常是浏览器&#xff09;发起 HTTP 请求…

技术周总结 2024.06.24~06.30(Python并发执行shell并发执行 Spring Bean)

文章目录 一、 06.26 周三1.1&#xff09;问题01&#xff1a;怎么在mysql的命令行中查询出来 python能使用的元祖结果集1.2&#xff09;问题02&#xff1a;python中 set()是什么&#xff0c;怎么使用 二、06.27 周四2.1&#xff09;问题01&#xff1a;shell 并发执行2.2&#x…

MySQL表的练习

二、创建表 1、创建一个名称为db_system的数据库 create database db_system; 2、在该数据库下创建两张表&#xff0c;具体要求如下 员工表 user 字段 类型 约束 备注 id 整形 主键&#xff0c;自增长 id N…

第二十条:与抽象类相比,优先选择接口

要定义多种实现的类型&#xff1a;JAVA有两种机制&#xff1a;接口和抽象类。这两种机制都支持为某些实例方法提供实现&#xff0c;但二者有个重要的区别&#xff1a;要实现由抽象类定义的类型&#xff0c;这个类必须是抽象类的子类。因为Java只允许单继承&#xff0c;对抽象类…

盘点几款国产AI高效神器!打工人赶紧码住

在这个AI技术飞速发展的时代&#xff0c;国产AI工具正成为提升工作效率的得力助手。作为AI工具测评博主&#xff0c;米兔有幸体验了多款国产AI工具&#xff0c;今天要向大家介绍几款超级好用的AI工具。这些工具不仅功能强大&#xff0c;而且操作简便&#xff0c;是职场人士不可…

Jemeter--独立变参接口压测

Jemeter–独立不变参接口压测 Jemeter–独立变参接口压测 Jemeter–关联接口压测 从数据库获取变参数据源 1、压测计划处添加对应数据库驱动包 左键点击压测计划&#xff0c;进入压测计划页面&#xff0c;点击浏览添加数据库链接jar包 2、线程组添加 JDBC配置原件 填写数据…

代码随想录算法训练营第2天|LeetCode977,209,59

977.有序数组平方 题目链接&#xff1a; 977. 有序数组的平方 - 力扣&#xff08;LeetCode&#xff09; 文章讲解&#xff1a;代码随想录 视频讲解&#xff1a; 双指针法经典题目 | LeetCode&#xff1a;977.有序数组的平方_哔哩哔哩_bilibili 第一想法 暴力算法肯定是先将元素…

vienna整流器过零畸变原因分析

Vienna整流器是一种常见的三电平功率因数校正&#xff08;PFC&#xff09;整流器&#xff0c;广泛应用于电源和电能质量控制领域。由于其高效率、高功率密度和低谐波失真的特点&#xff0c;Vienna整流器在工业和电力电子应用中具有重要地位。然而&#xff0c;在实际应用中&…

初阶数据结构之二叉树

那么本篇文是初阶数据结构这个系列的最后一篇文章&#xff0c;那么闲话少叙&#xff0c;我们直接进入正题 在讲二叉树的一些之前知识点之前&#xff0c;我先给大家送个小礼物哈 手搓二叉树 typedef int BTDataType ; typedef struct BinaryTreeNode { BTDataType _data …

公用对象池

什么是对象池&#xff1f; 对象池顾名思义就是存放对象的池子&#xff0c;主要是为了重复利用对象。将不用的对象扔进池子里&#xff0c;需要用的时候再从池子中取出来。这样的一套机制我们称为对象池。 为什么用对象池&#xff1f; 其实从定义我们就可以看出来&#xff0c;…

AI免费英语学习在线工具:Pi;gpt;其他大模型AI 英语学习智能体工具

1、pi(强烈推荐&#xff1a;可以安卓下载使用) https://pi.ai/talk &#xff08;网络国内使用方便&#xff09; 支持实时聊天与语音对话 2、chatgpt&#xff08;强烈推荐&#xff1a;可以安卓下载使用) https://chat.openai.com/ &#xff08;网络国内使用不方便&#xf…

2024年显著性检测部分论文及代码汇总(3)

ICML Size-invariance Matters: Rethinking Metrics and Losses for Imbalanced Multi-object Salient Object Detection code Abstacrt&#xff1a;本文探讨了显著性检测中评价指标的尺寸不变性&#xff0c;尤其是当图像中存在多个大小不同的目标时。作者观察到&#xff0c;…