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

news2024/11/17 7:33:52

文章目录

  • 自动化
    • 自动化概念
    • 回归测试
      • 常见面试题
    • 自动化测试金字塔
  • 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.coloradmin.cn/o/2242029.html

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

相关文章

【云岚到家】-day10-2-冷热处理及统计

【云岚到家】-day10-2-冷热处理及统计 3.7 历史订单3.7.1 冷热分离方案1&#xff09;冷热分离需求2&#xff09;分布式数据库3&#xff09;冷热分离方案 3.7.2 订单同步1&#xff09;创建历史订单数据库2&#xff09;订单同步3&#xff09;测试订单同步4&#xff09;小结 3.7.3…

Python学习------第八天

函数 函数的传入参数 掌握函数返回值的作用 掌握函数返回值的定义语法 函数的嵌套调用&#xff1a; 函数的局部变量和全局变量 局部变量的作用&#xff1a;在函数体内部&#xff0c;临时保存数据&#xff0c;即当函数调用完成后&#xff0c;则销毁局部变量。 money 5000000 n…

新人如何做好项目管理?|京东零售技术人成长

“管理是一种实践&#xff0c;其本质不在于知&#xff0c;而在于行”——彼得德鲁克 作为一名初入职场的校招生&#xff0c;你是否有过这样的疑问&#xff1a;项目经理究竟扮演着怎样的角色&#xff1f;是老板的传声筒&#xff0c;单纯地传达上级的指令&#xff1f;还是团队的…

MySQL社区版的启动与连接

1.启动&#xff1a; 注意&#xff1a;MySQL是默认开机自启的 方式一&#xff1a; 1.WinR 的命令行中直接输入services.msc 2.在服务中找到数据库名称&#xff0c;然后鼠标右键点击启动 方式二&#xff1a; 1.在开始选项中搜索“cmd”命令提示符&#xff0c;使用管理员身份运行 …

FFmpeg 4.3 音视频-多路H265监控录放C++开发十四,总结编码过程,从摄像头获得数据后,转成AVFrame,然后再次转成AVPacket,

也就是将摄像头采集到的YUV 的数据换成 AVFrame&#xff0c;然后再次转成 AVPacket&#xff0c;那么这AVPakcet数据要怎么办呢&#xff1f;分为三种情况&#xff1a; 一种是将AVPacket存储成h264文件&#xff0c;由于h264编码器在将avframe变成avpacket的时候就是按照h264的格…

TCP(下):三次握手四次挥手 动态控制

欢迎浏览高耳机的博客 希望我们彼此都有更好的收获 感谢三连支持! TCP(上)&#xff1a;成熟可靠的传输层协议-CSDN博客 &#x1f95d;在上篇博客中&#xff0c;我们针对TCP的特性,报文结构,连接过程以及相对于其他协议的区别进行了探讨&#xff0c;提供了初步的理解和概览。本…

24 年第十届数维杯国际数模竞赛赛题浅析

本次万众瞩目的数维杯国际大学生数学建模赛题已正式出炉&#xff0c;无论是赛题难度还是认可度&#xff0c;该比赛都是数模届的独一档&#xff0c;含金量极高&#xff0c;可以用于综测加分、保研、简历添彩等各方面。考虑到大家解题实属不易&#xff0c;为了帮助大家取得好成绩…

菲涅耳全息图

菲涅耳全息图&#xff1a;记录介质在物光波场的菲涅耳衍射区(物体到记录介质表面的距离在菲涅耳衍射区内)。 一、点源全息图的记录和再现 1.1 记录 设物光波和参考光波是从点源O(xo, yo, zo)和点源 R(xr, yr, zr)发出的球面波, 波长为λ1, 全息底片位于z0 的平面上, 与两个点源…

Pygame坦克大战游戏开发实验报告

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

微搭低代码入门05循环

目录 1 for 循环2 while 循环3 do...while 循环4 break 语句5 循环展示组件总结 在编程中&#xff0c;循环是一种非常强大的控制结构&#xff0c;它允许我们重复执行一段代码直到满足某个条件为止。在微搭中&#xff0c;我们一般用循环来处理我们数据库返回的结果。 在微搭中&a…

C++:基于红黑树封装map和set

目录 红黑树的修改 红黑树节点 红黑树结构 红黑树的迭代器 红黑树Insert函数 红黑树的默认成员函数 修改后完整的红黑树 set、map的模拟实现 set map 测试封装的set和map 红黑树的修改 想要用红黑树封装map和set&#xff0c;需要对之前实现的key-value红黑树进行修…

【深度学习基础 | 预备知识】数据预处理

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈PyTorch深度学习 ⌋ ⌋ ⌋ 深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上&#xff0c;结合当代大数据和大算力的发展而发展出来的。深度学习最重…

前端面试笔试(四)

目录 一、数据结构算法等综合篇 1.线性探查法解决哈希冲突 2.请求分页系统中文件区和对换区 3.RADIUS认证协议&#xff0c;运行在哪个网络协议上 二、代码输出篇 1.res[1,2,100].map(parseInt) 如果我们想要输出为[1,2,100]&#xff0c;可以&#xff1a; 还可以换map里…

从零开始学习 sg200x 多核开发之 milkv-duo256 编译运行 sophpi

sophpi 是 算能官方针对 sg200x 系列的 SDK 仓库 https://github.com/sophgo/sophpi &#xff0c;支持 cv180x、cv81x、sg200x 系列的芯片。 SG2002 简介 SG2002 是面向边缘智能监控 IP 摄像机、智能猫眼门锁、可视门铃、居家智能等多项产品领域而推出的高性能、低功耗芯片&a…

【客户服务】互联网时代客户投诉处理金点子

互联网时代客户投诉新特点 客户投诉渠道广投诉的内容涉及到企业的各个方面客户维权意识越来越强负面效应很难管 卓越客户体验成为企业核心竞争力 移动互联网与社会化媒体背景下&#xff0c;客户的全方位感知、情感、卓越体验、高效需求成为驱动技术、应用、终端以及服务持续…

SQL 审核在 CloudQuery 的四大场景应用

数据库作为数据的核心载体&#xff0c;其安全性和稳定性对业务的影响至关重要。而在我们日常业务中&#xff0c;SQL 编写不当是引起数据库故障的一个重要原因&#xff0c;轻则影响数据库性能&#xff0c;重则可能直接导致「雪崩」。因此&#xff0c;SQL 审核作为 SQL 代码投入生…

【前端知识】Javascript前端框架Vue入门

前端框架VUE入门 概述基础语法介绍组件特性组件注册Props 属性声明事件组件 v-model(双向绑定)插槽Slots内容与出口 组件生命周期完整示例1. 创建 Vue 项目&#xff08;如果还没有&#xff09;2. 定义和使用组件3. 在主应用中使用组件4. 运行应用完整项目结构 参考文献 概述 V…

Jmeter基础篇(24)Jmeter目录下有哪些文件夹是可以删除,且不影响使用的呢?

一、前言 Jmeter使我们日常做性能测试最常用的工具之一啦&#xff01;但是我们在和其他同学协同工作的时候&#xff0c;偶尔也会遇到一些问题&#xff0c;例如我想要给别人发送一个Jmeter工具包&#xff0c;但这个文件包往往会很大&#xff0c;比较浪费流量和空间&#xff0c;…

Python_爬虫3_Requests库网络爬虫实战(5个实例)

目录 实例1&#xff1a;京东商品页面的爬取 实例2&#xff1a;亚马逊商品页面的爬取 实例3&#xff1a;百度360搜索关键词提交 实例4&#xff1a;网络图片的爬取和存储 实例5&#xff1a;IP地址归地的自动查询 实例1&#xff1a;京东商品页面的爬取 import requests url …

StructuredStreaming (一)

一、sparkStreaming的不足 1.基于微批,延迟高不能做到真正的实时 2.DStream基于RDD,不直接支持SQL 3.流批处理的API应用层不统一,(流用的DStream-底层是RDD,批用的DF/DS/RDD) 4.不支持EventTime事件时间&#xff08;一般流处理都会有两个时间&#xff1a;事件发生的事件&am…