自动化测试的概念
文章目录
- 自动化测试能够取代人工测试吗?
- 回归测试
- 自动化分类
- 自动化测试金字塔
- 为啥单元测试的性价比这么高呢?
- 那为啥UI自动化测试的性价比没有组件测试的高呢?
- web自动化测试
- 举例引入
- 自动化测试的准备工作
- 自动化测试的简单示例
自动化测试能够取代人工测试吗?
测试主要由人工测试,通过自动化测试来辅助测试
自动化测试不一定比人工测试更能保障系统的可靠性,自动化测试也需要测试人员进行设计,后续如果有功能的变更,自动化测试也需要进行不定期的维护和更新。
回归测试
由于软件在不断的迭代更新,因此通常具有非常多的版本。当新的版本即将上线,意味着有用户使用新的版本,也有用户在使用旧的版本!因此新版本和旧版本都需要执行测试
由于旧版本的一般不会再有功能变更,这时候自动化测试就是一个很好的选择。用自动化测试去测旧版本,这就叫回归测试
看下面的例子,假如说对于我们的一款购物软件,我们在新版本中添加了一项功能:查看浏览记录。那新版本在测试的时候,是不是只需要测新添加的功能呢?以前的老功能需不需要重新测呢?
答案是以前的老功能也要测,因为新增的代码很有可能会对以前的老代码产生影响,为了确保以前的功能不受影响,我们必须也要对以前的老功能进行测试
自动化分类
-
浏览器打开的软件
- web前端
- 接口
- 请求参数
- 请求体
- 响应内容
- 状态码
- …
-
终端可以打开的软件/APP
- 前端(客户端)
- 接口
从上面我们可以看到,无论是web还是app,我们都需要进行前端测试和接口测试,具体来说就是要做
- 接口自动化测试
- 前端自动化测试
- 凡是界面上肉眼可以看到的东西都需要执行测试
- web界面测试
- 客户端界面测试
自动化测试金字塔
这个图是啥意思呢?就是说你越往上去这个测试花费的时间和精力就越多。要往下去,这个测试的投资回报率就越高。
大家非常明显的可以看出来。单元测试是花费时间精力最少的。投资回报率最高的。手动测试是花费时间最多,投资回报率最低的。
为啥单元测试的性价比这么高呢?
这主要是因为对于一份刚刚写好的代码,代码的作者,也就是开发人员是非常熟悉的。我们让开发人员在写完代码之后顺手进行一个单元测试,是非常容易的,因为他不需要额外花时间来熟悉代码了
那为啥UI自动化测试的性价比没有组件测试的高呢?
自动化测试其实就是我们理解的前端测试,而API集成组件测试其实就是接口测试。所以这个问题问的实际上就是前端测试为什么比接口测试要麻烦
这个问题就很简单。因为前端可以看到的元素非常多:文字、图片、输入框、按钮……每个元素的大小、颜色、形状等等都需要进行测试
就是由于前端涉及到的不可靠因素太多了,编写前端自动化脚本相较于接口自动化脚本而言难度会大一些,消耗的人力和时间的成本也会更大一些
前面我们说的都是理想状态下的金字塔。实际业是实际业务中金字塔长得是下面这样的,原因主要就是开发人员不太重视单元测试
web自动化测试
举例引入
我们先看一个例子
测试目标:百度搜索关键词“迪丽热巴”
- 手工测试:
- 点击浏览器
- 在网址栏中输入百度网址,输入回车,进入百度网站
- 在百度网站的搜索框中输入关键词“迪丽热巴”,然后回车
- 自动化测试:
- 打开浏览器
- 输入百度网址:https://www.baidu.com
- 找到输入框,输入关键词“迪丽热巴”
- 点击“百度一下”按钮
读完上面的话,是不是感觉比较迷糊?这手工测试和自动化测试。感觉干的事情都是一样的呀,似乎没什么区别?你的感觉没错,他们干的事情确实没啥区别,最大的区别在于驱动计算机进行测试的角色不同:手工测试是人来驱动,而自动化测试则是程序驱动。
自动化测试的准备工作
那这时候有人就要问了,区别我理解了,但我还是不明白,你程序到底如何去驱动浏览器进行测试呢?
很简单,只需要安装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 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"又是啥意思啊?
- By 是 Selenium 提供的一个类,用于指定定位网页元素的方式。
- By.CSS_SELECTOR 表示 使用 CSS 选择器来定位元素
- 在 CSS 选择器中:
#
符号表示 “匹配具有指定 id 属性的元素”,kw是搜索框对应的选择器定位。"#kw"表示查找网页中 id=“kw” 的元素。
到这里大家肯定还有问题,你咋知道搜索框对应的选择器定位是kw 呢?
我们可以通过网页的开发者模式,来查看界面中某个组件的详细信息,里面就有组件的选择器定位
通过selenium编写的自动化脚本执行流程