【软件测试】一个简单的自动化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();  
  
    }  
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

️️一篇快速上手 AJAX 异步前后端交互

AJAX 1. AJAX1.1 AJAX 简介1.2 AJAX 优缺点1.3 AJAX 前后端准备1.4 AJAX 请求基本操作1.5 AJAX 发送 POST 请求1.6 设置请求头1.7 响应 JSON 数据1.8 AJAX 请求超时与网络异常处理1.9 取消请求1.10 Fetch 发送 Ajax 请求 2. jQuery-Ajax2.1 jQuery 发送 Ajax 请求&#xff08;G…

【星海随笔】ZooKeeper-Mesos

开源的由 Twitter 与 伯克利分校的 Mesos 项目组共同研发设计。 两极调度架构 支持高可用集群&#xff0c;通过ZooKeeper进行选举。 Mesos master 管理着所有的 Mesos slave 守护进程 每个slave运行具体的任务或者服务。 Franework 包括的调度器和执行机两部分 执行器运行在Me…

计算机网络中的域名系统(DNS)及其优化技术

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 计算机网络中的域名系统&#xff08;DNS&#xff09;及其优化技术 计算机网络中的域名系统&#xff08;DNS&#xff09;及其优化…

Vulnhub靶场案例渗透[10]- Momentum2

文章目录 一、靶场搭建1. 靶场描述2. 下载靶机环境3. 靶场搭建 二、渗透靶场1. 确定靶机IP2. 探测靶场开放端口及对应服务3. 扫描网络目录结构4. 代码审计5. 反弹shell6. 提权 一、靶场搭建 1. 靶场描述 - Difficulty : medium - Keywords : curl, bash, code reviewThis wor…

如何在 Ubuntu 上安装 Emby 媒体服务器

Emby 是一个开源的媒体服务器解决方案&#xff0c;它能让你整理、流媒体播放和分享你的个人媒体收藏&#xff0c;包括电影、音乐、电视节目和照片。Emby 帮你集中多媒体内容&#xff0c;让你无论在家还是在外都能轻松访问。它还支持转码&#xff0c;让你能够播放各种格式的内容…

java作业项目以及azkaban的操作

参考内容&#xff1a; azkaban简介及azkaban部署、原理和使用介绍 1.在azkaban创建project 2.上传flow文件和project文件的压缩包 flow文件内容: nodes:- name: Testtype: commandconfig:command: java -jar /data/job/mtm-job-0.0.1-SNAPSHOT.jar --spring.profiles.activ…

2024-11-15 Element-ui的tab切换中table自适应宽度无法立即100%的问题

前言 今天在写一个统计图表的时候&#xff0c;将所有的table表格和echarts图表放到一个页面中&#xff0c;这样会在纵向上出现滚动条&#xff0c;上下滑动对用户体验不好&#xff0c;于是改成tab切换的形式 遇到的问题 正如标题所述&#xff0c;elementui在tab中使用table时&…

HarmonyOS 开发环境搭建

HarmonyOS&#xff08;鸿蒙操作系统&#xff09;作为一种面向全场景多设备的智能操作系统&#xff0c;正逐渐在市场上崭露头角。为了进入HarmonyOS生态&#xff0c;开发者需要搭建一个高效的开发环境。本文将详细介绍如何搭建HarmonyOS开发环境&#xff0c;特别是如何安装和配置…

Vue全栈开发旅游网项目(10)-用户管理后端接口开发

1.异步用户登录\登出接口开发 1.设计公共响应数据类型 文件地址&#xff1a;utils/response404.py from django.http import JsonResponseclass BadRequestJsonResponse(JsonResponse):status_code 400def __init__(self, err_list, *args, **kwargs):data {"error_c…

快速了解Memcached

快速了解Memcached 官方定义 Memcached 是一个高性能的分布式内存对象缓存系统&#xff0c;用于减轻数据库负载&#xff0c;通过在内存中缓存数据和对象来提高动态 web 应用程序的响应速度。 主要特点 简单高效&#xff1a;其设计理念就是简单&#xff0c;易于部署和使用。它是…

【Android、IOS、Flutter、鸿蒙、ReactNative 】启动页

Android 设置启动页 自定义 splash.xml 通过themes.xml配置启动页背景图 IOS 设置启动页 LaunchScreen.storyboard 设置为启动页 storyboard页面绘制 Assets.xcassets 目录下导入图片 AppLogo Flutter 设置启动页 Flutter Android 设置启动页 自定义 launch_background.xm…

【插件】多断言 插件pytest-assume

背景 assert 断言一旦失败&#xff0c;后续的断言不能被执行 有个插件&#xff0c;pytest-assume的插件&#xff0c;可以提供多断言的方式 安装 pip3 install pytest-assume用法 pytest.assume(表达式,f’提示message’) pytest.assume(表达式,f‘提示message’) pytest.ass…

DDRPHY数字IC后端设计实现系列专题之数字后端floorplanpowerplan设计

3.2.3 特殊单元的布局 布图阶段除了布置 I/O 单元和宏单元&#xff0c;在 28nm 制程工艺时&#xff0c;还需要处理两种特 殊的物理单元&#xff0c;Endcap 和 Tapcell。 DDRPHY数字IC后端设计实现系列专题之后端设计导入&#xff0c;IO Ring设计 &#xff08;1&#xff09;拐…

Java 全栈知识体系

包含: Java 基础, Java 部分源码, JVM, Spring, Spring Boot, Spring Cloud, 数据库原理, MySQL, ElasticSearch, MongoDB, Docker, k8s, CI&CD, Linux, DevOps, 分布式, 中间件, 开发工具, Git, IDE, 源码阅读&#xff0c;读书笔记, 开源项目...

【Docker系列】如何在 Docker 环境中部署和运行 One API

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

录的视频怎么消除杂音?从录制到后期的杂音消除攻略

在录制视频时&#xff0c;杂音往往是一个令人头疼的问题。无论是环境噪音、设备噪音还是电磁干扰&#xff0c;杂音的存在都会极大地影响视频的听觉体验。录的视频怎么消除杂音&#xff1f;通过一些前期准备和后期处理技巧&#xff0c;我们可以有效地消除这些杂音&#xff0c;提…

微信小程序:vant组件库安装步骤

前言&#xff1a;在微信小程序中引用vant组件报错&#xff0c;提示路径不存在&#xff0c;这很有可能是因为没有安装构建vant组件库导致。下面是我整理的安装vant组件库的步骤: 第一步&#xff1a;安装node.js(执行完第一步请重启小程序) 具体步骤请看链接&#xff1a;node.js…

蓝桥杯-洛谷刷题-day3(C++)

目录 1.忽略回车的字符串输入 i.getline() ii.逐个字符的识别再输入 2.获取绝对值abs() 3.做题时的误区 4.多个变量的某一个到达判断条件 i.max() 5.[NOIP2016 提高组] 玩具谜题 i.代码 6.逻辑上的圆圈 i.有限个数n的数组 7.数组的定义 i.动态数组 1.忽略回车的字符串输…

Elasticsearch 查询时 term、match、match_phrase、match_phrase_prefix 的区别

Elasticsearch 查询时 term、match、match_phrase、match_phrase_prefix 的区别 keyword 与 text 区别term 查询match 查询match_phrase 查询match_phrase_prefix 查询写在最后 在讲述 es 查询时 term、match、match_phrase、match_phrase_prefix 的区别之前&#xff0c;先来了…

Restful API接⼝简介及为什么要进⾏接⼝压测

一、RESTful API简介 在现代Web开发中&#xff0c;RESTful API已经成为一种标准的设计模式&#xff0c;用于构建和交互网络应用程序。本文将详细介绍RESTful API的基本概念、特点以及如何使用它来设计高效的API接口。 1. 基于协议 HTTP 或 HTTPS RESTful API通常使用HTTP&am…