自动化测试
自动化概念
什么是自动化?
自动化操作在生活中处处可见,自动化洒水机、自动洗手液、超市自动闸门。
自动化测试------>自动的测试软件(减少人力和时间的消耗,提高软件的测试质量)。
人力:2~3小时
程序测试:5min之内(几秒之内)
自动化测试的主要目的就是用来回归测试。
回归测试
软件存在多个版本需要进行功能的整体回归,为了避免新增功能影响到历史的功能需要进行功能的回归。
1.自动化测试能取代人工测试吗?
答:自动化测试不一定比人工测试更能保障系统的可靠性,自动化测试是测试人员手工编写,后续如果有功能的变更自动化也需要进行不定期的维护和更新。
2.自动化测试可以大幅降低工作量吗?
错误,一定程度和大幅度的表达式需要注意
测试主要是由人工来测试,通过自动化测试来辅助测试。
【注意】测试笔试题中的选择题尽量不要选择说的太死或者太绝对的选项。
多个版本的问题:软件通常有非常多的版本,软件在不断的迭代更新。当新的版本即将上线,意味着有用户使用新的版本,也有用户在使用旧的版本。
新的版本开发可能会影响到旧的版本,如果不对旧版本进行测试,可能会出现新版本上线之后旧版本无法使用或者旧版本出现了功能故障。
因此,新版本和旧版本都需要执行测试。
历史功能:每增加一个功能会出现代码的更新/增加/修改/删除,即有可能对历史功能造成影响。
自动化分类
浏览器打开的软件:
Web前端、接口
终端可以打开的软件/App:前端(客户端)、接口
所以自动化测试分为:
- 接口自动化测试
- 前端自动化测试
- web界面测试
- 客户端界面测试
接口自动化测试
请求参数、请求体、响应内容、状态码... ...
UI自动化
UI测试也称为界⾯测试,常⻅的UI⾃动化测试包含web⾃动化测试、移动端⾃动化测试等等。
界面上,肉眼可以看到的东西都需要测试
自动化测试金字塔
理想化的自动化测试金字塔
单元测试,投入的人力少,但是获得的投资回报率更高。(开发人员写完代码之后就执行单元测试,不需要额外的时间和精力来熟悉代码)
接口测试,由测试人员来编写自动化测试和UI自动化测试。
前端测试,投入时间和精力多,投资回报率最小。(前端可以看到的元素非常多:文字、图片、输入框、按钮等等,每个元素的大小、颜色、形状等等都需要测试),前端涉及到的不可靠因素太多了,编写前端自动化脚本相较于接口自动化脚本而言难度会大一些,消耗的人力和时间的成本也会更大一些。
在企业中,实际上是"冰激凌蛋筒模式"
对于开发人员来说,相较于测试人员来说不那么注重测试,因此,实际工作中单元测试投入的时间和精力会比较少。测试人员驱动开发人员来执行单元测试。
⾃动化需要⼤量的初始投资,找到"突破点",与⼿动测试相⽐,我们开始看到它对⻓期成本产⽣的积极影响,也能够清楚,这两种测试活动都是完全兼容,产⽣短期和⻓期利益。
Web自动化测试
手工测试:百度搜索关键词------迪丽热巴。通过手工测试打开浏览器,需要点击(手工驱动浏览器打开)浏览器软件。
自动化测试:
- 打开浏览器(程序驱动浏览器打开)
- 输入百度网址:https://www.baidu.com
- 找到输入框,输入关键词------迪丽热巴
- 点击"百度一下"按钮
这里就提到了一个关键词"驱动"。
计算机有了驱动程序就可以与设备(耳机,摄像头,⻨克风,键盘,显示器等等设备)进行通信
程序想要打开web浏览器就需要安装web驱动(即WebDriver),WebDriver 以本地化⽅式驱动浏览 器。
使用selenium编写自动化脚本,需要提前下载驱动程序。
下载驱动程序之后,编写的自动化脚本可以借助驱动程序来打开对应的浏览器。不同的浏览器对应的驱动程序是不一样的,且不同版本的浏览器对应的驱动版本也是不一样的。
【注意】必须使用跟浏览器版本配套的驱动才可以!若版本不匹配,则无法开发浏览器。如果浏览器更新,意味着目前已下载的驱动无法使用。每次浏览器更新都需要下载新的驱动,整个流程非常冗余/麻烦。
在selenium中,驱动管理工具Webdriver-manager,主要解决因浏览器更新导致驱动无法使用的问题。
若通过安装驱动的方式来启动浏览器,每次浏览器更新后对应的驱动也需要更新,为了解决这个问题,selenium中提供了驱动管理工具weddriver-manager,有了webdriver-manager无需手动安装浏览器驱动,即使浏览器更新也不会影响自动化的执行。
WebDriver Manager是一个开源的命令行工具,它可以自动下载和安装适用于不同浏览器的WebDriver。通过使用WebDriver Manager,我们可以确保浏览器驱动版本始终与浏览器版本保持一致,从而避免因版本不匹配而导致的各种问题。
编写自动化脚本需要借助selenium工具。这里使用4.0.0的selenium。
编写自动化脚本
自动化测试:
- 打开浏览器(程序驱动浏览器打开)
- 输入百度网址:https://www.baidu.com
- 找到输入框,输入关键词------迪丽热巴
- 点击"百度一下"按钮
python
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()
这里程序的执行速度非常快,若想要看到具体的执行流程,可以通过添加等待。
python
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+驱动+浏览器的工作原理
- 通过selenium编写的⾃动化脚本代码中在ChromeDriverService中创建⼀个服务
- 通过创建好的服务打开webdriver,安装在本地的驱动服务IP为localhost,PORT为ChromeDriverService中创建的端⼝号,该服务地址为selenium向webdriver发送请求的服务地址。
- 向浏览器驱动程序发送HTTP请求,浏览器驱动程序解析请求,打开浏览器,并获得sessionid,如果再次对浏览器操作需携带此id
- 打开浏览器后,所有的selenium的操作(访问地址,查找元素等)均通过创建好的服务链接到webdriver,然后使⽤execute发送请求
- 驱动收到请求并对请求进⾏解析,转成浏览器能够解析的脚本并发送给浏览器,浏览器通过请求的内容执⾏对应动作
- 浏览器再把执⾏的动作结果通过浏览器驱动程序返回给测试脚本