自动化
什么是自动化?
超市的自动闸门,不需要手动的开门关门生活中的自动动化案例有效的减少了人力的消耗,同时也提高了生活的质量。
软件自动化测试同理,通过编写自动化测试程序(减少人力和时间的消耗,提高软件的测试质量),自动化测试主要是用来进行回归测试。
针对自动化这个问题,非常容易出两道面试题
- 自动化测试能够取代人工测试吗?
自动化测试不能取代人工测试,首先自动化测试不一定比人工测试更能保证系统的可靠性**,**再者自动化测试是由测试人员进行编写的也需要进行不定期的维护和更新。
- 自动化测试可以大幅度降低工作量?
这是一个坑,只能说自动化测试可以一定程度上进行降低工作量,大幅进行降低工作量这个太绝对。
回归测试
当软件新增加一个功能后,在新版本上线之前需要将之前产品存在的功能重新进行测试,防止新功能的上线导致之前的功能出现故障。
因此,新旧版本都需要执行测试。
自动化测试的分类
想要进行清楚自动化主要是围绕着软件的哪些方面进行的测试,首先要清楚软件通常有哪几个部分?
软件主要分为两大类:浏览器进行打开的软件、终端可以进行打开的软件(app)
浏览器进行打开的软件又分为web前端和后端服务器
app分为客户端和后端的服务器
所以说自动化的分类就分为接口自动化 和前端自动化。
前端自动化又分为web界面测试自动化和客户端界面测试自动化。
自动化测试金字塔
⾃动化的类型⾮常多,那么到底哪⼀种是最好的?哪⼀种测试的收益会更佳? 这⾥我们介绍测试圈内⾮常著名的⾃动化测试⾦字塔

理想的⾃动化测试⾦字塔表达了⾃动化测试的理想情况,利⽤较少的时间和精⼒在单元测试上就能够 发现更多有效的问题。
然后实际上在企业中,自动化往往是"冰淇淋蛋筒反模式" ,如下图所示

在实际的开发中通过UI自动化和接口自动化发现的问题是非常有限的,并且开发人员并不是很重视单元测试,因此实际上手动进行探索测试的回报率是最高的,因此有了冰淇淋蛋筒反模式。
web自动化
驱动的理解
我们在进行学习操作系统的时候就了解过驱动,驱动位于硬件的上层,操作系统的下层,通过驱动实现硬件和软件的交互。

web自动化测试工具selenium
我们要进行在百度进行搜索"感动中国的十大人物"
手动:手动打开浏览器,需要点击浏览器软件,然后进行搜索,这种情况是手工进行驱动浏览器的打开
自动化:① 打开浏览器 ②输入百度网址 ③找到输入框,输入关键词"感动中国的十大人物" ④点击"百度一下"按钮,这种请i况下就是程序驱动浏览器打开。
安装selenium 库

安装对应浏览器的驱动 (以chorme浏览器为例)
通过下面的网址进行下载对应的驱动
Chrome for Testing availability

编写自动化进行测试的小 demo 验证浏览器的驱动是否安装成功并进行体会自动化测试
python
import time
from selenium.webdriver.common.by import By
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager
# 设置 Chrome 浏览器的路径
chrome_options = Options()
chrome_options.binary_location = "C:/Program Files/Google/Chrome/Application/chrome.exe" # 修改为你自己的路径
# 使用 webdriver_manager 自动下载 ChromeDriver,并创建 Service 对象
service = Service(ChromeDriverManager().install()) # 正确实例化 Service 类
# 启动浏览器
driver = webdriver.Chrome(service=service, options=chrome_options)
driver.get("https://www.baidu.com")
#找到搜索框,输入关键词
driver.find_element(By.CSS_SELECTOR,"#kw").send_keys("感动中国十大人物")
time.sleep(2)
#点击百度一下
driver.find_element(By.CSS_SELECTOR,"#su").click()
time.sleep(2)
#关闭浏览器
driver.close()
selenium+驱动+浏览器的工作原理
这三者是如何进行交互的呢?

具体步骤解析如下:
- 通过selenium编写的⾃动化脚本代码中在ChromeDriverService中创建⼀个服务
- 通过创建好的服务打开webdriver,安装在本地的驱动服务IP为localhost,PORT为 ChromeDriverService中创建的端口号,该服务地址为selenium向webdriver发送请求的服务地址
- 向浏览器驱动程序发送HTTP请求,浏览器驱动程序解析请求,打开浏览器,并获得sessionid,如 果再次对浏览器操作需携带此id
- 打开浏览器后,所有的selenium的操作(访问地址,查找元素等)均通过创建好的服务链接到 webdriver,然后使用execute发送请求
- 驱动收到请求并对请求进行解析,转成浏览器能够解析的脚本并发送给浏览器,浏览器通过请求的 内容执行对应动作
- 浏览器再把执⾏的动作结果通过浏览器驱动程序返回给测试脚本
- 驱动需要接收、解析请求,发送请求给浏览器,那么驱动到底是什么样的角色呢?
验证方式:执行selenium编写的自动化脚本代码中,可以在终端看到创建的驱动服务地址。
