文章目录

    • 自动化测试能够取代人工测试吗?
    • 回归测试
    • 自动化分类
    • 自动化测试金字塔
      • 为啥单元测试的性价比这么高呢?
      • 那为啥UI自动化测试的性价比没有组件测试的高呢?
    • web自动化测试
      • 举例引入
      • 自动化测试的准备工作
      • 自动化测试的简单示例

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

测试主要由人工测试,通过自动化测试来辅助测试
自动化测试不一定比人工测试更能保障系统的可靠性,自动化测试也需要测试人员进行设计,后续如果有功能的变更,自动化测试也需要进行不定期的维护和更新。

回归测试

由于软件在不断的迭代更新,因此通常具有非常多的版本。当新的版本即将上线,意味着有用户使用新的版本,也有用户在使用旧的版本!因此新版本和旧版本都需要执行测试

由于旧版本的一般不会再有功能变更,这时候自动化测试就是一个很好的选择。用自动化测试去测旧版本,这就叫回归测试

看下面的例子,假如说对于我们的一款购物软件,我们在新版本中添加了一项功能:查看浏览记录。那新版本在测试的时候,是不是只需要测新添加的功能呢?以前的老功能需不需要重新测呢?

答案是以前的老功能也要测,因为新增的代码很有可能会对以前的老代码产生影响,为了确保以前的功能不受影响,我们必须也要对以前的老功能进行测试
在这里插入图片描述

自动化分类

  • 浏览器打开的软件

    • web前端
    • 接口
      • 请求参数
      • 请求体
      • 响应内容
      • 状态码
  • 终端可以打开的软件/APP

    • 前端(客户端)
    • 接口

从上面我们可以看到,无论是web还是app,我们都需要进行前端测试和接口测试,具体来说就是要做

  1. 接口自动化测试
  2. 前端自动化测试
    • 凡是界面上肉眼可以看到的东西都需要执行测试
    • web界面测试
    • 客户端界面测试

自动化测试金字塔

这个图是啥意思呢?就是说你越往上去这个测试花费的时间和精力就越多。要往下去,这个测试的投资回报率就越高。

在这里插入图片描述
大家非常明显的可以看出来。单元测试是花费时间精力最少的。投资回报率最高的。手动测试是花费时间最多,投资回报率最低的。
在这里插入图片描述

为啥单元测试的性价比这么高呢?

这主要是因为对于一份刚刚写好的代码,代码的作者,也就是开发人员是非常熟悉的。我们让开发人员在写完代码之后顺手进行一个单元测试,是非常容易的,因为他不需要额外花时间来熟悉代码了

那为啥UI自动化测试的性价比没有组件测试的高呢?

自动化测试其实就是我们理解的前端测试,而API集成组件测试其实就是接口测试。所以这个问题问的实际上就是前端测试为什么比接口测试要麻烦

这个问题就很简单。因为前端可以看到的元素非常多:文字、图片、输入框、按钮……每个元素的大小、颜色、形状等等都需要进行测试

就是由于前端涉及到的不可靠因素太多了,编写前端自动化脚本相较于接口自动化脚本而言难度会大一些,消耗的人力和时间的成本也会更大一些

前面我们说的都是理想状态下的金字塔。实际业是实际业务中金字塔长得是下面这样的,原因主要就是开发人员不太重视单元测试

在这里插入图片描述

web自动化测试

举例引入

我们先看一个例子
测试目标:百度搜索关键词“迪丽热巴”

  • 手工测试:
    1. 点击浏览器
    2. 在网址栏中输入百度网址,输入回车,进入百度网站
    3. 在百度网站的搜索框中输入关键词“迪丽热巴”,然后回车
  • 自动化测试:
    1. 打开浏览器
    2. 输入百度网址:https://www.baidu.com
    3. 找到输入框,输入关键词“迪丽热巴”
    4. 点击“百度一下”按钮

读完上面的话,是不是感觉比较迷糊?这手工测试和自动化测试。感觉干的事情都是一样的呀,似乎没什么区别?你的感觉没错,他们干的事情确实没啥区别,最大的区别在于驱动计算机进行测试的角色不同:手工测试是人来驱动,而自动化测试则是程序驱动。

在这里插入图片描述

自动化测试的准备工作

那这时候有人就要问了,区别我理解了,但我还是不明白,你程序到底如何去驱动浏览器进行测试呢?

很简单,只需要安装web驱动(即WebDriver)就行了。WebDriver是浏览器的驱动程序,你学过计算机结构体系应该知道,最上层用户层写的是高级语言程序。再往下就是系统调用,操作系统内核,然后往下就是驱动程序,最后就是硬件。web驱动就属于体系结构中的驱动程序

在这里插入图片描述

注意:我们必须使用跟浏览器版本配套的驱动!若版本不匹配,则无法打开浏览器!!!
浏览器若更新了呢?----意味着目前已下载的驱动无法使用—
每次浏览器更新都需要重新下载新的驱动,整个流程非常冗余/麻烦

为了解决因浏览器更新导致驱动无法使用的问题,我们引入了驱动管理工具Webdriver-manager。安装Webdriver-manager之后,我们就无需手动安装浏览器驱动,即使浏览器更新也不会影响自动化的执行。
安装命令:pip install webdriver-manager

除此之外,由于我们后面是用selenium进行自动化测试的,因此我们还要安装selenium库

pip install selenium==4.0.0

安装完成之后,我们还需要检查一下python解释器中提供的库是否包含webdriver-manager以及selenium
在这里插入图片描述

自动化测试的简单示例

检查完成之后,下面我们就可以正式编写自动化测试脚本了 ,下面就是我们最开始那个用例:在百度中搜索迪丽热巴的web驱动脚本

import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager# 编写自动化脚本,具体步骤
# 1. 打开浏览器----驱动管理
ChromeIns=ChromeDriverManager().install()
# 创建谷歌浏览器驱动对象
driver=webdriver.Chrome(service=Service(ChromeIns)) 
time.sleep(2)
# 2. 输入百度网址:https://www.baidu.com(网址一定要完整,不要写成www.baidu.com)
driver.get("https://www.baidu.com")
time.sleep(2)
# 3. 找到百度输入框,输入关键词"迪丽热巴"
driver.find_element(By.CSS_SELECTOR,"#kw").send_keys("迪丽热巴")
time.sleep(2)
# 4. 点击"百度一下"按钮
driver.find_element(By.CSS_SELECTOR,"#su").click()
time.sleep(2)
# 5. 关闭浏览器
driver.quit()

看完上面的代码,可能有人还有些问题,比如find_element(By.CSS_SELECTOR,"#kw")这里面,By.CSS_SELECTOR是啥意思啊,"#kw"又是啥意思啊?

  1. By 是 Selenium 提供的一个类,用于指定定位网页元素的方式。
  2. By.CSS_SELECTOR 表示 使用 CSS 选择器来定位元素
  3. 在 CSS 选择器中:# 符号表示 “匹配具有指定 id 属性的元素”,kw是搜索框对应的选择器定位。"#kw"表示查找网页中 id=“kw” 的元素。

到这里大家肯定还有问题,你咋知道搜索框对应的选择器定位是kw 呢?

我们可以通过网页的开发者模式,来查看界面中某个组件的详细信息,里面就有组件的选择器定位

在这里插入图片描述

在这里插入图片描述
通过selenium编写的自动化脚本执行流程
在这里插入图片描述

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

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

相关文章

OSPF故障排查实战:如何通过一条命令精准定位网络掩码不匹配问题

掌握display ospf error命令的解读技巧,快速解决OSPF邻接关系建立失败难题。一、问题背景与场景引入 在网络运维工作中,OSPF(开放最短路径优先)协议作为主流的内部网关协议,其稳定运行至关重要。然而,在实际…

Redis----如何引入分布式锁

一、概述首先引入分布式锁指的是应用程序引入,不是Redis本身引入,Redis作为中间件可以作为分布式锁的一个典型实现方案,同时也有一些其他的实现方案。分布式锁指的是一个/组程序,使用Redis实现的话就是通过添加一个特殊的Key-Valu…

prometheus-2.42.0.linux-amd64.tar.gz 安装配置展示

一、prometheus 1.1解压文件 # tar -xzvf prometheus-2.42.0.linux-amd64.tar.gz -C ~/apps/ prometheus-2.42.0.linux-amd64/ prometheus-2.42.0.linux-amd64/NOTICE prometheus-2.42.0.linux-amd64/consoles/ prometheus-2.42.0.linux-amd64/consoles/index.html.example p…

Linux 标准输入 标准输出 标准错误

目录一. 简介二. 常见用法2.1 输出重定向2.2 错误重定向2.3 同时重定向标准输出 错误2.4 输入重定向2.5 特殊设备三. 这样设计的好处3.1 区分正常信息和错误信息3.2 方便调用方脚本处理3.3 与管道结合时更清晰四. 案例4.1 if判断4.2 ls查询一. 简介 ⏹在 Linux/Unix 中&#…

零基础新手小白快速了解掌握服务集群与自动化运维(二)Linux Journalctl命令、Journalctl日志持久化存储

Linux提供了一个强大的日志系统,它可以跟踪和记录系统的各种活动。在这个系统中,journalctl是一个非常重要的工具,用于查询和操作由systemd进程管理的日志。 本文将深入探讨journalctl命令,介绍其基本使用、高级选项及示例等内容…

【学习】【js】栈数据结构

栈 栈是一种遵从后进先出(LIFO)原则的有序集合。新添加或待删除的元素都保存在栈的同一端,称作栈顶,另一端就叫栈底。在栈里,新元素都靠近栈顶,旧元素都接近栈底。 基于数组的栈 时间复杂度O(n),占用较多的…

【Linux】基本指令 · 下

alias 指令起别名为什么 ls -l 指令等价于 ll 指令呢?指令就是可执行程序,和我们自己写的代码编译好的程序,没有本质区别! 指令在系统的某一个位置存在! 执行指令前,现在系统中查找对应的指令指令在根目录下…

计算机视觉(opencv)实战二十二——指纹图像中提取特征点,计算两两指纹之间的相似度

指纹识别原理与代码实现详解指纹识别是一种常见的生物特征识别技术,广泛应用于门禁系统、手机解锁、考勤打卡、身份认证等场景。其核心思想是:从指纹图像中提取特征点,计算两幅指纹之间的相似度,并根据相似度判断是否为同一人。本…

Linux基础之部署mysql数据库

文章目录一、环境准备二、源码解压与依赖三、CMake 编译配置四、配置 MySQL权限管理修改配置文件 /etc/my.cnf五、环境变量设置六、数据库初始化七、服务管理八、账号密码管理一、环境准备 yum -y install gcc gcc-c ncurses ncurses-devel bison cmakegcc / gcc-c&#xff1a…

代码审计-PHP专题原生开发文件上传删除包含文件操作监控Zend源码解密1day分析

快速分析脆弱:1、看文件路径2、看代码里面的变量(可控)3、看变量前后的过滤文件安全挖掘点:1、脚本文件名2、应用功能点3、操作关键字文件上传,文件下载(读取),文件包含,文件删除等emlog-文件上…

零基础搭建 Hexo 博客:从本地到 GitHub Pages 全流程指南

零基础搭建 Hexo 博客:从本地到 GitHub Pages 全流程指南 Hexo 是一个快速、简洁且高效的博客框架,支持使用 Markdown 来编写文章,并能快速生成静态网页,非常适合想要搭建个人博客的同学。本文将带你从零开始,本地搭建…

Git 简介

Git 是目前全球最流行的分布式版本控制系统(Distributed Version Control System, DVCS),核心作用是追踪文件修改历史、支持多人协同开发,并能高效管理代码(或任何文本类文件)的版本迭代。它由 Linux 内核创…

后端Web实战-Spring原理

目录 1. 配置优先级 2. Bean管理 2.1 获取Bean 2.2 Bean作用域 面试题:Lazy是如何解决循环依赖问题的? 2.3 第三方Bean 3. SpringBoot原理 3.1 起步依赖 3.2 自动配置 3.2.1 概述 3.2.2 自动配置的原理及常见方案 3.2.2.1 概述 3.2.2.2 方案…

在 Qoder 等 AI 二创 IDE 里用 VS Code Remote-SSH 的“曲线连接”实战

目标:让你在 Qoder 等在线/AI 辅助 IDE 中,也能像本地 VS Code 一样通过 Remote-SSH 连接到自己的远程服务器进行开发。 前提:只在你拥有或被授权的服务器上使用,遵守所用平台的条款与限制。两句话说清楚 先用本地 VS Code 正常连…

python发送请求SSL验证设置

这个错误通常是由于SSL/TLS握手失败导致的,可能原因包括证书验证问题、不兼容的加密协议或网络连接中断。以下是几种解决方案,按推荐顺序排列: 方案一:临时禁用SSL验证(快速测试) response requests.get(u…

工厂自动化正从 “人工堆叠” 向 “设备替代” 快速转变

​人工进行零件排列,虽在操作灵活性上有一定表现,但实际应用中存在明显短板,对工厂自动化转型形成制约。从成本来看,一名工人日均工资约数百元,若需 5-6 名工人协同作业,月均人力成本易突破万元&#xff0c…

中标麒麟7.4部署gitlab-runner

1. 部署环境 本次部署环境完全断网。需要离线下载gitlab-runner及其依赖。 本次部署环境为中标麒麟7.4。目前机器上部署了gitlab,安装了maven。 2. 部署步骤 2.1 在外部下载好依赖 我首先在腾讯云上布置了一个centos7.9的虚拟机,没有安装任何东西。 …

在 IDEA 2024 创建 Vue 项目(保姆级)

目录 一、 前后端分离 1. 简介 2. 实现前后端分离的常用前端框架 3. 前后端分离和动静分离 3.1 前后端分离: 3.2 动静分离: 二、 Vue.js概述 1. 简介 2. SPA介绍 2.1 优点 2.2 缺点 3. MVVM介绍 3.1 示例 三、 名词解释 1. Node.js 2. npm 3. webpack 4. Vue…

Coze源码分析-资源库-创建知识库-后端源码-应用/领域/数据访问

3. 应用服务层 3.1 知识库应用服务 文件位置: backend/application/knowledge/knowledge.go func (k *KnowledgeApplicationService) CreateKnowledge(ctx context.Context, req *dataset.CreateDatasetRequest) (*dataset.CreateDatasetResponse, error) {// 1. 转换文档类型d…

Shopify指纹手机矩阵:无限扩店,横扫FB/GG广告封号风险

一、 为什么需要为Shopify使用指纹手机?虽然Shopify不会因为你多开店而封号,但以下场景需要隔离环境:规避广告平台关联:这是最核心的用途。你会用Facebook、Google、TikTok等广告平台为你的Shopify店铺引流。这些广告平台严格禁止…