【测试】自动化——概念篇

news2025/1/18 9:09:13

自动化测试

自动化概念

什么是自动化?

自动化操作在生活中处处可见,自动化洒水机、自动洗手液、超市自动闸门。

自动化测试——>自动的测试软件(减少人力和时间的消耗,提高软件的测试质量)。

人力:2~3小时

程序测试:5min之内(几秒之内)

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

回归测试

软件存在多个版本需要进行功能的整体回归,为了避免新增功能影响到历史的功能需要进行功能的回归。

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

答:自动化测试不一定比人工测试更能保障系统的可靠性,自动化测试是测试人员手工编写,后续如果有功能的变更自动化也需要进行不定期的维护和更新。

2.自动化测试可以大幅降低工作量吗?

错误,一定程度和大幅度的表达式需要注意

测试主要是由人工来测试,通过自动化测试来辅助测试。

【注意】测试笔试题中的选择题尽量不要选择说的太死或者太绝对的选项。

多个版本的问题:

软件通常有非常多的版本,软件在不断的迭代更新。当新的版本即将上线,意味着有用户使用新的版本,也有用户在使用旧的版本。

新的版本开发可能会影响到旧的版本,如果不对旧版本进行测试,可能会出现新版本上线之后旧版本无法使用或者旧版本出现了功能故障。

因此,新版本和旧版本都需要执行测试。

历史功能:

每增加一个功能会出现代码的更新/增加/修改/删除,即有可能对历史功能造成影响。

自动化分类

浏览器打开的软件:

Web前端、接口

终端可以打开的软件/App:
前端(客户端)、接口

所以自动化测试分为: 

  1. 接口自动化测试
  2. 前端自动化测试
  • web界面测试
  • 客户端界面测试

接口自动化测试

请求参数、请求体、响应内容、状态码... ...

UI自动化

UI测试也称为界⾯测试,常⻅的UI⾃动化测试包含web⾃动化测试、移动端⾃动化测试等等。

界面上,肉眼可以看到的东西都需要测试

自动化测试金字塔

理想化的自动化测试金字塔 

单元测试,投入的人力少,但是获得的投资回报率更高。(开发人员写完代码之后就执行单元测试,不需要额外的时间和精力来熟悉代码)

接口测试,由测试人员来编写自动化测试和UI自动化测试。

前端测试,投入时间和精力多,投资回报率最小。(前端可以看到的元素非常多:文字、图片、输入框、按钮等等,每个元素的大小、颜色、形状等等都需要测试),前端涉及到的不可靠因素太多了,编写前端自动化脚本相较于接口自动化脚本而言难度会大一些,消耗的人力和时间的成本也会更大一些。

在企业中,实际上是”冰激凌蛋筒模式“

对于开发人员来说,相较于测试人员来说不那么注重测试,因此,实际工作中单元测试投入的时间和精力会比较少。测试人员驱动开发人员来执行单元测试。

⾃动化需要⼤量的初始投资,找到“突破点”,与⼿动测试相⽐,我们开始看到它对⻓期成本产⽣的积极影响,也能够清楚,这两种测试活动都是完全兼容,产⽣短期和⻓期利益。

Web自动化测试

手工测试:百度搜索关键词——迪丽热巴。通过手工测试打开浏览器,需要点击(手工驱动浏览器打开)浏览器软件。

自动化测试:

  1. 打开浏览器(程序驱动浏览器打开)
  2. 输入百度网址:https://www.baidu.com
  3. 找到输入框,输入关键词——迪丽热巴
  4. 点击”百度一下“按钮

这里就提到了一个关键词”驱动“。

计算机有了驱动程序就可以与设备(耳机,摄像头,⻨克风,键盘,显示器等等设备)进行通信

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

使用selenium编写自动化脚本,需要提前下载驱动程序。

下载驱动程序之后,编写的自动化脚本可以借助驱动程序来打开对应的浏览器。不同的浏览器对应的驱动程序是不一样的,且不同版本的浏览器对应的驱动版本也是不一样的。

【注意】必须使用跟浏览器版本配套的驱动才可以!若版本不匹配,则无法开发浏览器。如果浏览器更新,意味着目前已下载的驱动无法使用。每次浏览器更新都需要下载新的驱动,整个流程非常冗余/麻烦。

在selenium中,驱动管理工具Webdriver-manager,主要解决因浏览器更新导致驱动无法使用的问题。

若通过安装驱动的方式来启动浏览器,每次浏览器更新后对应的驱动也需要更新,为了解决这个问题,selenium中提供了驱动管理工具weddriver-manager,有了webdriver-manager无需手动安装浏览器驱动,即使浏览器更新也不会影响自动化的执行。

WebDriver Manager是一个开源的命令行工具,它可以自动下载和安装适用于不同浏览器的WebDriver。通过使用WebDriver Manager,我们可以确保浏览器驱动版本始终与浏览器版本保持一致,从而避免因版本不匹配而导致的各种问题。

编写自动化脚本需要借助selenium工具。这里使用4.0.0的selenium。

编写自动化脚本

自动化测试:

  1. 打开浏览器(程序驱动浏览器打开)
  2. 输入百度网址:https://www.baidu.com
  3. 找到输入框,输入关键词——迪丽热巴
  4. 点击”百度一下“按钮
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))
#2.输入百度网址------https://www.baidu.com
driver.get("http://www.baidu.com")
#3.找到百度输入框,输入关键词“迪丽热巴”
driver.find_element(By.CSS_SELECTOR,"#kw").send_keys("迪丽热巴")
#4.点击“百度一下”按钮
driver.find_element(By.CSS_SELECTOR,"#su").click()
#5.关闭浏览器
driver.quit()

这里程序的执行速度非常快,若想要看到具体的执行流程,可以通过添加等待。

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
driver.get("http://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()

这里由驱动程序来打开浏览器,driver表示我们打开的浏览器标签页;

查看页面元素的方式(开发者工具):1.鼠标在页面右键——>检查;2.键盘快捷键:ctrl+shift+i

跳转到前端代码后,鼠标移动到当前行,右键——>copy——>(选择复制方式)

复制方式:选择器、xpath、ID、class_name...

#kw

这里的复制,就是搜索框对应的选择器定位方式

selenium+驱动+浏览器的工作原理

  1. 通过selenium编写的⾃动化脚本代码中在ChromeDriverService中创建⼀个服务
  2. 通过创建好的服务打开webdriver,安装在本地的驱动服务IP为localhost,PORT为ChromeDriverService中创建的端⼝号,该服务地址为selenium向webdriver发送请求的服务地址。
  3. 向浏览器驱动程序发送HTTP请求,浏览器驱动程序解析请求,打开浏览器,并获得sessionid,如果再次对浏览器操作需携带此id
  4. 打开浏览器后,所有的selenium的操作(访问地址,查找元素等)均通过创建好的服务链接到webdriver,然后使⽤execute发送请求
  5. 驱动收到请求并对请求进⾏解析,转成浏览器能够解析的脚本并发送给浏览器,浏览器通过请求的内容执⾏对应动作
  6. 浏览器再把执⾏的动作结果通过浏览器驱动程序返回给测试脚本

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

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

相关文章

自定义实现项目进度图

目录 0.背景 1. 演示效果 2.实现原理 2.1 处理表头数据(日期对应的是星期几) 2.2 获取项目数据 2.3 合并单元格 3.源码 0.背景 目遇到一个展示项目进度的需求,类似甘特图的效果,不同的是,每一个项目都有计划和实…

MySQL:基于Spring监听Binlog日志

binlog的三种模式 MySQL 的二进制日志(binlog)有三种不同的格式,通常被称为 binlog 模式。这三种模式分别是 Statement 模式、Row 模式和Mixed 模式。 Statement 模式: 在 Statement 模式下,MySQL 记录每个会更改数…

代码随想录训练营Day30 | 491.递增子序列 | 46.全排列 | 47.全排列 II

学习文档:代码随想录 (programmercarl.com) 学习视频:代码随想录算法公开课 | 最强算法公开课 | 代码随想录 (programmercarl.com) Leetcode 491. 非递减子序列 题目描述 给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列…

AI赋能!0基础小白自媒体创业,成功率提升90%的秘诀?

本文背景 好多小伙伴也想写公众号文章,但是自己又没有写过,不知道如何开始。 今天分享个小方法,就算是写作新手,也能靠 AI 快速上手,写出好内容! 一起来看看怎么用 AI 工具 助力写作,提高效率&a…

STM32(十八):实时时钟

时间戳 Unix 时间戳(Unix Timestamp)定义为从UTC/GMT的1970年1月1日0时0分0秒开始所经过的秒数,不考虑闰秒。 时间戳存储在一个秒计数器中,秒计数器为32位/64位的整型变量。 世界上所有时区的秒计数器相同,不同时…

一次性使用病毒采样管-保存运输呼吸道 肠道等多种病毒样本的有力工具!

远离了新冠病毒却又来了流感病毒、手足口、猴痘病毒、诺如病毒等多种病毒,对于众多病毒的检测诊断,确保病毒样本的高效采集、安全保存和准确运输是至关重要的。为了满足这一需求,一次性使用病毒采样管应运而生。 在研究、医学诊断和疫情监测…

10.12 标准IO

练习:针对fscanf和fprintf练习 有如下结构体: typedef struct Student { char name[20]; int id; float chinese;//语文成绩 float math; float english; float physical; float chemical; float biological; }stu_t; *Pstu_t//声明学生结构体类型 在栈区…

逆向思维的力量:Prolog在游戏编程中的应用与代码实践

在主流游戏开发语言如C++、Python和Unity统治的今天,Prolog作为一种基于逻辑编程的语言,似乎与游戏开发不太沾边。然而,Prolog的逻辑推理机制和简洁的语法在解决复杂逻辑问题上有着独特的优势,尤其是在人工智能(AI)决策和路径规划等领域。通过Prolog,我们可以以极简的代…

【C++】C++的引用

一.引用 1.引用的概念和定义 引用不是新定义⼀个变量,而是给已存在变量取了⼀个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同⼀块内存空间。 类型& 引用别名 引用对象; 2.引用的特征 a.引用在定义时必须初始化 …

从数据到结论:ChatGPT如何帮助你完成复杂的数据分析?

AIPaperGPT,论文写作神器~ https://www.aipapergpt.com/ 在撰写学术论文时,数据分析往往是最具挑战性的部分之一。无论是定量研究还是定性研究,如何有效分析数据、得出合理结论都是关键所在。 ChatGPT的优势 1. 快速处理大量数据 在面对大…

Qt-窗口对话框QColorDialog的使用(52)

目录 描述 常用方法 使用 描述 颜⾊对话框的功能是允许⽤⼾选择颜⾊。继承⾃ QDialog 类。颜⾊对话框如下图⽰: 常用方法 1、QColorDialog (QWidget *parent nullptr) //创建对象的同时设置⽗对象 2、QColorDialog(const QColor &initial, QWidget *paren…

2024开放原子开源生态大会 | 麒麟信安携手openEuler共建开源生态,共塑产业未来

9月25日-27日,由开放原子开源基金会主办的2024开放原子开源生态大会在北京开幕,大会以“开源赋能产业,生态共筑未来”为主题。工业和信息化部党组书记、部长金壮龙,北京市委副书记、市长殷勇,工业和信息化部总经济师、…

Chromium HTML Tags与c++接口对应关系分析

一、HTML 标签(HTML Tags) <a> <head> <img>等等这些标签在c中的接口是如何定义和查找的呢&#xff1f; 更多标签参考&#xff1a; HTML <a> target 属性 (w3school.com.cn) 二、html_tag_names.json5 (third_party\blink\renderer\core\html\htm…

QD1-P10 HTML 超链接标签(a)下篇

本节学习&#xff1a;HTML a 标签实现大纲跳转&#xff08;锚点&#xff09;。 本节视频 www.bilibili.com/video/BV1n64y1U7oj?p10 本节实现大纲&#xff08;锚点&#xff09;跳转 ​​ 完整 HTML 代码 <!DOCTYPE html> <html><head><meta charset&…

python爬虫--某动漫信息采集

python爬虫--tx动漫 一、采集主页信息二、采集详情页信息三、代码供参考一、采集主页信息 略。 二、采集详情页信息 如上图所示,使用xpath提取详情页的标题、作者、评分、人气、评论人数等数据。 三、代码供参考 import csv import time import random import requests fr…

弧光保护装置的应用

长期以来&#xff0c;人们对中低压母线的保护一直不够重视&#xff0c;没有保护来快速切除配电站所内部发生的故障&#xff0c;往往使故障发展扩大造成开关设备被严重烧毁&#xff0c;有的甚至发展成“火烧连营”的事故。同时&#xff0c;变电站的变压器由于遭受外部短路电流冲…

【harmonyOS开发笔记3】ArkTS中数组的使用

数组的定义 数组&#xff1a;是一个容器&#xff0c;可以存储多个数据 定义数组的格式&#xff1a; let 数组名: 类型[] [数据1&#xff0c; 数据2&#xff0c; ] 示例&#xff1a;let names: string[] [小明, 小红] // 数组 let 数组名: 类型[] [数据1, 数据2, ] let …

【大模型实战教程】Qwen2.5 PyTorch模型微调入门实战

1 引言 Qwen2.5是Qwen大型语言模型系列的最新成果。对于Qwen2.5&#xff0c;通义千问团队发布了从0.5到720亿参数不等的基础语言模型及指令调优语言模型。Qwen2.5相比Qwen2带来了以下改进&#xff1a; 显著增加知识量&#xff0c;在编程与数学领域的能力得到极大提升&#xf…

四种Agent落地方案:Coze、AutoGen、Langchain、llama-index

前言 1. Coze 优势&#xff1a; 模块化设计&#xff1a; 允许开发者灵活地添加或替换组件&#xff0c;适应不同的应用需求。 易于集成&#xff1a; 支持与多种外部系统和服务的集成&#xff0c;方便与现有业务系统对接。 用户友好&#xff1a; 提供图形化界面和命令行工具&…

讯飞与腾讯云:Android 语音识别服务对比选择

目录 一、讯飞语音识别 1.1 讯飞语音识别介绍 1.1.1 功能特点 1.1.2 优势 1.2 接入流程 1.2.1 注册账号并创建应用 1.2.2 下载SDK等相关资料 1.2.3 导入SDK 1.2.4 添加用户权限 1.2.5 初始化讯飞SDK 1.2.6 初始化语音识别对象 1.2.7 显示结果 二、腾讯云语音识别 …