【软件测试】一个简单的自动化Java程序编写

文章目录

  • 自动化
    • 自动化概念
    • 回归测试
      • 常见面试题
    • 自动化测试金字塔
  • Web 自动化测试
    • 驱动
  • Selenium
    • 一个简单的自动化示例
      • 安装 selenium 库
      • 使⽤selenium编写代码

自动化

自动化概念

自动的代替人的行为完成操作。自动化在生活中处处可见image.png

生活中的自动化可以减少人力的消耗,也可以提高生活的质量


软件中的自动化测试也是如此,通过自动化测试有效减少人力的消耗的同时也提高了测试的质量和效率

  • 人工测试结果是不可控的;机器测试是可控的
  • 机器一秒可以处理上百条用例,但是人工只能执行几条

测试人员编写自动化测试脚本

  • 增加新的功能:测试人员需要同步增加对应的自动化脚本
  • 自动化测试报错:测试人员需要维护并解决自动化脚本问题
    虽然会让测试人员有额外的工作,但是这些工作,属于“一次付出,终身回报”

回归测试

自动化的主要目的就是用来进行回归测试


  1. 比如有一个新产品,第一个版本(具备丰富的功能)
    • 功能 1
    • 功能 2
    • 功能 3
    • 功能 n

测试的时候是以功能为维度,一个功能一个功能的执行测试。之后再站在产品的角度,以产品为维度执行测试(产品的整体回归测试)

  1. 已有产品,第 n 个版本(增加了额外的功能)
    • 额外增加的功能 1
    • 额外增加的功能 2
    • 额外增加的功能 3
    • 额外增加的功能 n
    • 历史的功能 1
    • 历史的功能 2
    • 历史的功能 n

增加的功能对历史的功能有没有影响我们不知道,所以也需要再去执行“大概”的测试(不用像新产品那样执行的那么细致)

  • 当我们新产品上线的时候,若增加自动化测试,那么之后对历史功能的测试就可以自动化进行了
  • 此时只需要对额外的功能进行测试。
  • 当心版本上线之后,再对额外的功能增加自动化测试,那么之后再有额外的功能的话,也可以进行自动化测试了

再执行测试的过程中,可能会发现 bug,bug 有自己的生命周期

image.png|559

  • 功能维度的测试就叫做“bug 的回归测试

常见面试题

  1. 自动化测试能取代人工测试吗?

    • 自动化测试不一定比人工测试更能保障系统的可靠性,自动化测试是测试人员手工编写,后续如果有功能的变更,自动化也需要测试人员进行不定期的维护和更新
    • 手工测试仍占主导地位
  2. 自动化测试可以大幅度降低工作量?

    • 错误,自动化测试只是测试工作中的一小部分测试行为
    • 坑!!!“一定程度上”和“大幅度”的表达方式也需要注意
    • tips:测试笔试中的选择题尽量不要选择说的太死或者太绝对的选项

自动化测试金字塔

image.png

  • 越往上走,投入的时间和精力越多;越往下走,获得的回报越大
    • 手动/探索性测试:投入的时间和精力更多,但回报最少
  • UI 自动化测试:界面测试;客户端界面、浏览器界面的统称
    • 精力投入较多,回报较少
  • API/集成/组件测试:接口测试;接口自动化
    • 精力投入较少,回报较高
  • 单元测试:对程序最小单位进行测试(最小单元是认为规定的)(方法、类、接口)
    • 精力投入很少,回报非常高
    • 主要由开发人员来执行,也存在较少的公司会招聘专业的单元测试人员

单元测试,比如下单功能

  • 生成订单——API
  • 减少库存——API
  • 付费渠道——API

在企业中,越来越多人开始重视“单元测试”,编写大量的单元测试脚本


理想的⾃动化测试⾦字塔表达了⾃动化测试的理想情况,利⽤较少的时间和精⼒在单元测试上就能够发现更多有效的问题。

然后实际上在企业中,⾃动化往往是“冰淇淋蛋筒反模式image.png|407

  • 实际上,测试人员在进行手动/探索性测试的时候,发现的问题比下面三个更多,投入的精力更大
  • 其次是前段自动化,可以发现的问题相较于接口自动化来说要多一些。因为很多后端的问题都会体现在前端界面上
  • 接口自动化:关注的是根据请求检查响应结果(响应数据类型对不对、字段有没有,但无法检查数据对不对)
  • 开发人员自己写代码自己测,测试不专业,不完整。
    • 开发人员非常排斥写单元测试脚本,因为开发人员编写单元测试脚本,也就意味着开发人员不仅要编写业务代码,还要编写测试代码

Web 自动化测试

自动化就是模拟人的行为,将手工执行流程转换为自动执行

百度搜索关键词“迪丽热巴”,并展示相关词条

  1. 打开浏览器
  2. 输入网址:https://www.baidu.com
  3. 找到百度输入框,并输入“迪丽热巴”关键词
  4. 找到“百度一下”按钮,并点击
  5. 关闭浏览器
  • 打开浏览器
    • 手工测试:找到浏览器软件,鼠标点击启动——手工驱动
    • 自动化测试:用驱动打开浏览器

驱动

web 系统的测试前提是需要打开浏览器,通过访问 web 服务器来对服务器界⾯进⾏⼀系列的操作。对于⼿⼯测试来说,这⼀系列的操作都需要测试⼈员⼿动的,⼀步⼀步的来执⾏测试。那么对于⾃动化程序来说,程序如何才能打开浏览器并执⾏我们预期的操作流程呢?

驱动⼀词应⽤⼴泛,我们都不会陌⽣。

⻋有了驱动才能够让⻋跑起来。image.png|464

计算机有了驱动程序就可以与设备(⽿机,摄像头,⻨克⻛,键盘,显⽰器等等设备)进⾏通信。image.png|364

程序想要打开 web 浏览器就需要安装 web 驱动(即 WebDriver),WebDriver 以本地化⽅式驱动浏览器。

  • 不同的浏览器需要不同的驱动才能打开对应的浏览器
  • 不同版本的浏览器也需要不同版本的驱动

Selenium

万事俱备,只⽋东⻛。

接下来就是使⽤ selenium 来编写 web ⾃动化测试脚本。selenium 是⼀个 web ⾃动化测试⼯具,selenium 中提供了丰富的⽅法供给使⽤者进⾏ web ⾃动化测试。

  • 推荐下载谷歌浏览器的驱动

一个简单的自动化示例

安装 selenium 库

<dependencies>  <dependency>  <groupId>io.github.bonigarcia</groupId>  <artifactId>webdrivermanager</artifactId>  <version>5.9.0</version>  </dependency>  <dependency>  <groupId>org.seleniumhq.selenium</groupId>  <artifactId>selenium-java</artifactId>  <version>4.0.0</version>  </dependency>  
</dependencies>

使⽤selenium编写代码

import org.openqa.selenium.By;  
import org.openqa.selenium.WebDriver;  
import org.openqa.selenium.chrome.ChromeDriver;  
import org.openqa.selenium.chrome.ChromeOptions;  public class FirstTest {  //测试百度搜索关键词:迪丽热巴  void test01() throws InterruptedException {  //1. 打开浏览器(使用驱动打开)  //WebDriverManager.chromedriver().setup();  System.setProperty("webdriver.chrome.driver", "D:/My Computer/02_Stricky/02_Code/chromedriver-win64/chromedriver-win64/chromedriver.exe");  //增加浏览器配置,创建驱动对象要强制指定允许访问所有的链接  ChromeOptions options = new ChromeOptions();  options.addArguments("--remote-allow-origins=*");  WebDriver driver = new ChromeDriver(options);  //Thread.sleep(3000);  //2. 输入完整的网址:https://www.baidu.com  driver.get("https://www.baidu.com");  Thread.sleep(1000);  //3. 找到输入框,并输入关键词:迪丽热巴  driver.findElement(By.cssSelector("#kw")).sendKeys("迪丽热巴");  Thread.sleep(1000);  //4. 找到百度一下按钮,并点击  driver.findElement(By.cssSelector("#su")).click();  Thread.sleep(1000);  //5. 关闭浏览器  driver.quit();  }  
}

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

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

相关文章

网络学习第四篇

引言&#xff1a; 我们在第三篇的时候出现了错误&#xff0c;我们要就行排错&#xff0c;那么我们要知道一下怎么配置静态路由实现ping通&#xff0c;这样子我们才知道下一跳到底是什么&#xff0c;为什么这样子做。 实验目的 理解和掌握静态路由的基本概念和配置方法。 实…

LeetCode题解:17.电话号码的数字组合【Python题解超详细,回溯法、多叉树】,知识拓展:深度优先搜索与广度优先搜索

题目描述 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 示例 1&#xff1a; 输入&#xff1a;digits "23" 输出…

Python爬虫项目 | 一、网易云音乐热歌榜歌曲

文章目录 1.文章概要1.1 实现方法1.2 实现代码1.3 最终效果 2.具体讲解2.1 使用的Python库2.2 代码说明2.2.1 创建目录保存文件2.2.2 爬取网易云音乐热歌榜单歌曲 2.3 过程展示 3 总结 1.文章概要 学习Python爬虫知识&#xff0c;实现简单的一个小案例&#xff0c;网易云音乐热…

消息中间件分类

消息中间件&#xff08;Message Middleware&#xff09;是一种在分布式系统中实现跨平台、跨应用通信的软件架构。它基于消息传递机制&#xff0c;允许不同系统、不同编程语言的应用之间进行异步通信。 常见的消息中间件类型包括&#xff1a; 1. JMS&#xff08;Java Message S…

GoogleCloud服务器的SSH连接配置

首先&#xff0c;Google的服务器默认是通过自带的SSH网页端连接的&#xff0c;比较麻烦和容易断开&#xff0c;不是很好用&#xff0c;常见的解决办法有两种一种是通过修改ssh的配置&#xff0c;添加密码的方式进行连接&#xff0c;一种是通过配置公钥进行连接。 密码连接之前有…

31.3 XOR压缩和相关的prometheus源码解读

本节重点介绍 : xor 压缩value原理xor压缩过程讲解xor压缩prometheus源码解读xor 压缩效果 xor 压缩value原理 原理:时序数据库相邻点变化不大&#xff0c;采用异或压缩float64的前缀和后缀0个数 xor压缩过程讲解 第一个值使用原始点存储计算和前面的值的xor 如果XOR值为0&…

【图像压缩感知】论文阅读:Content-Aware Scalable Deep Compressed Sensing

tips&#xff1a; 本文为个人阅读论文的笔记&#xff0c;仅作为学习记录所用。本文参考另一篇论文阅读笔记 Title&#xff1a; Content-Aware Scalable Deep Compressed Sensing Journal&#xff1a; TIP 2022 代码链接&#xff1a; https://github.com/Guaishou74851/CASNet…

Neo4j Desktop 和 Neo4j Community Edition 区别

Neo4j Desktop 和 Neo4j Community Edition 的主要区别在于它们的用途、功能以及安装和管理方式。以下是这两者的详细对比&#xff1a; 1. Neo4j Desktop Neo4j Desktop 是一个图形化的桌面应用程序&#xff0c;主要为开发人员和个人使用提供了一个便捷的环境来安装、管理和运…

DAY120java审计第三方组件依赖库挖掘FastjsonShiroLog4jH2DB

组件漏洞判断插件 一、Tmall_demo-master&#xff08;fastjson&#xff09; 1、配置文件查找安装组件 1、JSON.parse(json) 2、JSON.parseObject 2、找可控的变量 3、利用组件漏洞 poc:propertyJson{"type":"java.net.Inet4Address","val":&q…

要查看你的系统是 x64(64位)还是 x86(32位),可以按照以下步骤操作

文章目录 1. 通过“系统信息”查看系统架构2. 通过“设置”查看系统架构3. 通过命令提示符查看系统架构4. 通过 PowerShell 查看系统架构5. 通过文件资源管理器查看系统架构总结 要查看你的系统是 x64&#xff08;64位&#xff09;还是 x86&#xff08;32位&#xff09;&…

通过JS删除当前域名中的全部COOKIE教程

有时候需要通过JS来控制一下网站的登录状态&#xff0c;就例如:网站登出功能&#xff0c;我们可以直接通过JS将所有COOKIE删除&#xff0c;COOKIE删除之后&#xff0c;网站自然也就退出了。 那么今天我就给大家分享一段JS的函数&#xff0c;通过调用这段函数就可以实现删除COO…

在Ubuntu22.04上源码构建ROS noetic环境

Ubuntu22.04上源码构建ROS noetic 起因准备环境创建工作目录并下载源码安装编译依赖包安装ros_comm和rosconsole包的两个补丁并修改pluginlib包的CMakeLists的编译器版本编译安装ROS noetic和ros_test验证 起因 最近在研究VINS-Mono从ROS移植到ROS2&#xff0c;发现在编写feat…

C++ 中的string类

本文主要通过文档形式使用C中string类的常见接口进行介绍&#xff0c;然后我们自己实现一个string类 标准库中的string 使用库中的string类时&#xff0c;必须包含头文件&#xff1a;#include<string>, 以及 using namespace std string 构造函数 首先我们来看构造函数…

html + css 自适应首页布局案例

文章目录 前言一、组成二、代码1. css 样式2. body 内容3.全部整体 三、效果 前言 一个自适应的html布局 一、组成 整体居中&#xff0c;宽度1200px&#xff0c;小屏幕宽度100% 二、代码 1. css 样式 代码如下&#xff08;示例&#xff09;&#xff1a; <style>* {…

Python知识点精汇!字符串:定义、截取(索引)和其内置函数

目录 一、字符串的定义 二、字符串的截取 1.截取干啥的 2.怎么用截取 3.打印多次 4.两个字符串拼接在一起 三、字符串内置函数 1.查询函数&#xff1a; &#xff08;1&#xff09;find(str,start,end) &#xff08;2&#xff09;index&#xff08;str,start,end&#…

mindspore发布件

MindSpore Repohttps://repo.mindspore.cn/ MindSpore Repohttps://repo.mindspore.cn/mindspore-lab/mindnlp/newest/any/

MySQL技巧之跨服务器数据查询:基础篇-A数据库与B数据库查询合并

MySQL技巧之跨服务器数据查询&#xff1a;基础篇-A数据库与B数据库查询合并 上一篇已经描述&#xff1a;借用微软的SQL Server ODBC 即可实现MySQL跨服务器间的数据查询。 而且还介绍了如何获得一个在MS SQL Server 可以连接指定实例的MySQL数据库的链接名: MY_ODBC_MYSQL 以…

计算机视觉在自动驾驶汽车中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 计算机视觉在自动驾驶汽车中的应用 计算机视觉在自动驾驶汽车中的应用 计算机视觉在自动驾驶汽车中的应用 引言 计算机视觉在自动…

2024-11-16-机器学习方法:无监督学习(1) 聚类(上)

文章目录 机器学习方法&#xff1a;无监督学习&#xff08;1&#xff09; 聚类&#xff08;上&#xff09;1. 聚类的基本概念1.1 聚类的概念1.2 聚类的功能1.3 聚类的算法 2. 相似度或距离2.1 闵可夫斯基距离2.2 相关系数2.3 夹角余弦 3 类或簇3.1 类的特征 4 类与类之间的距离…

计算机网络WebSocket——针对实习面试

目录 计算机网络WebSocket什么是WebSocket&#xff1f;WebScoket和HTTP协议的区别是什么?说明WebSocket的优势和使用场景&#xff1f;说明WebSocket的建立连接的过程&#xff1f; 计算机网络WebSocket 什么是WebSocket&#xff1f; WebSocket是一个网络通信协议&#xff0c;提…