🌴自动化
🚩自动化的概念
自动的代替人的行完成操作。 自动化在生活中处处可见
自动洒水自机,主要通上水就可以自动化洒水并且可以自动的旋转。 自动洗手液,免去了手动挤压可以自动感应出洗手液超市自动闸门,不需要手动的开自关门生活中的自动化案例有效的减少了人力的消耗,同时也提高了生活的质量。
软件中的自动化测试也是如此,通过自动化测试有效减少人力的消耗的同时也提高了测试的质量和效率(因为人工测试结果是不可控的)。
自动化的主要目的就是用来进行回归测试。回归测试是什么要讲到位
🏀回归测试
在上篇文章中讲述过回归测试,在此会具体讲述回归测试。
软件有多个版本需要进行功能的整体回归。
例如:场景一
1)新产品 --- 第一个版本
具备丰富的功能:功能1,功能2,功能3......,现在呢要对这个新的产品进行测试,执行测试是一个功能一个功能的执行,功能1测试完之后,测试功能2,在测试功能3,因此我们在执行测试的时候是一个功能一个功能的进行测试,但是对于产品来说是由所有的功能组成的,不同功能直接是有关联关系的,当我们以功能的维度进行测试完之后,还要站在产品的角度,以产品的维度执行测试,即为产品的整体回归测试。
2)已有产品 --- 第n个版本(增加额外功能)
我们在执行测试的时候,站在功能的维度会测试额外增加的功能,测试完之后还要站在产品的维度测试各功能之间的交互情况。还要测试历史的功能,因为并不知道新增的功能是否对历史功能产生影响,所以会对历史的功能大概的测试一下,然后还会站在产品的维度,对额外增加的功能和历史的功能进行回归测试。
那么每次更新新的功能,会对历史功能进行测试,这一部分就不需要每次进行手动测试,在最初版本会增加自动化测试,后面就可以直接对历史功能进行自动化测试即可,因此我们只需要关注额外增加的功能进行测试,当我们额外增加的功能和自动化测试回归了历史功能之后,又可以对额外的功能增加自动化测试,下一次版本又增加额外的功能之后,就直接对历史功能进行自动化测试。
当然回归测试不仅仅是指产品功能的回归和产品版本的回归还有一种概念。
例如,执行测试过程中,可能会发现bug,当开发人员修复bug之后,测试人员要进行检查有没有被修复,在这个检查的过程,可能有的bug修复了有的还没有修复,当所有bug修复之后,这是站在bug的维度,我们还需要站在功能维度去测试功能是否有问题,这就称为bug的回归测试。
常见面试题:
1.自动化测试能够取代人工测试吗?
自动化测试不一定比人工测试更能保障系统的可靠性,自动化测试是测试人员手工编写,后续如果有功能的变更自动化也需要进行不定期的维护和更新。
2.自动化测试可以大幅度降低工作量?
错误!
坑!!“⼀定程度上”和“大幅度”的表达方式也需要注意
tips:测试笔试中的选择题尽量不要选择说的太死或者太绝对的选项~~~~
🚩自动化分类
注意:我们所说的自动化测试其实是一个统称。
发送请求 --- 接口层面(后端代码)
客户端界面 --- PC端/移动端界面(客户端代码)
浏览器界面/小程序界面 --- web界面(前端代码)
因此自动化测试分为三类:
接口自动化
前端(UI)自动化
- 1)客户端界面
- 2)web界面
🏀接口自动化
发送一个接口请求,检查接口的响应是否符合预期
🏀UI自动化
UI测试也称为界面测试,常见的UI自动化测试包含web自动化测试、客户端自动化测试等等。
客户端一般是电脑上(PC端)所看到界面或手机(移动端)上所看到的界面,不是浏览器所看到的界面
我们主要讲述的是web界面自动化测试
🚩自动化测试金字塔
自动化的类型非常多,那么到底哪一种是最好的?哪一种测试的收益会更佳?
这里我们介绍测试圈内非常著名的自动化测试金字塔
理想的自动化测试金字塔表达了自动化测试的理想情况,利用较少的时间和精力在单元测试上就能够发现更多有效的问题。
然后实际上在企业中,自动化往往是“冰淇淋蛋筒反模式”
自动化需要大量的初始投资,找到“突破点”,与手动测试相比,我们开始看到它对长期成本产生的 积极影响,也能够清楚,这两种测试活动都是完全兼容,产生短期和长期利益。
🌲web自动化测试
上述讲到。自动化测试是模拟人的行为,例如百度搜索关键词"迪丽热巴"并展示相关词条。1.打开浏览器 2.输入网址https://www.baidu.com 3.找到百度搜索框 4.输入"迪丽热巴"并点击搜索按钮 5.关闭浏览器这是一次手工测试的流程。
当我们转为web自动化,就是模拟人的行为的一系列操作,和上述流程是一样的。对于手工测试来说首先打开浏览器,这一行为是由我的鼠标点击的,鼠标又是通过驱动程序来操作点击。所以在自动化测试中,也需要有一个驱动来打开浏览器。
🚩驱动
上面给大家已经介绍过,web系统的测试前提是需要打开浏览器,通过访问web服务器来对服务器界面进行一系列的操作。对于手工测试来说,这一系列的操作都需要测试人员手动的,一步一步的来执行测试。那么对于自动化程序来说,程序如何才能打开浏览器并执行我们预期的操作流程呢?
驱动一词应用广泛,同学们都不会陌生。车有了驱动才能够让车跑起来。
我们所听过的一个词:驱动程序
例如:我们所用的鼠标,为什么能通过这个第三方设备来操作电脑,就是因为有驱动,需要下载对应的驱动才能通过鼠标来进行控制电脑。若我的电脑上没有鼠标这个驱动的话,就不能操作我的电脑,还有一些耳机,摄像头,麦克风,键盘,显示器等等设备,有对应的驱动,这些设备才可以和电脑进行通信。
我们要想通过程序来打开web浏览器就需要安装web驱动(即WebDriver),WebDriver以本地化方式驱动浏览器。
注意:不同的浏览器需要不同的驱动才能打开对应的浏览器。浏览器驱动(webDriver)是一个统称,浏览器有很多(Chrome,Firefox,Edge,Safari......),chrome需要chrome浏览器驱动,Firefox需要Firefox浏览器驱动......
下载对应驱动:Selenium
步骤:
推荐使用chrome浏览器,本文章讲述的是使用chrome,不同浏览器执行效果不一样,可能存在的结果也不太一样。
chrome官方网址:Google Chrome 网络浏览器
注意:我们并不需要下载浏览器驱动!!!
当我们下载完驱动之后,有一个chromedriver.exe文件,这个文件作用就是用来打开谷歌浏览器,这里就有一个问题,我们不是说通过代码来打开浏览器吗,这个exe文件也是windows上的一个可执行程序,我的程序怎么来打开这个exe文件呢?
这个exe文件其实是一个服务器。
所以谷歌浏览器的驱动就是一个服务器,意味着通过谷歌浏览器的服务器就可以打开对应的浏览器
对应流程:
- 1. 通过selenium编写的自动化脚本代码中在ChromeDriverService中创建一个服务
- 2. 通过创建好的服务打开webdriver,安装在本地的驱动服务IP为localhost,PORT为 ChromeDriverService中创建的端口号,该服务地址为selenium向webdriver发送请求的服务地 址。
- 3. 向浏览器驱动程序发送HTTP请求,浏览器驱动程序解析请求,操控浏览器,并获得sessionid,如果再次对浏览器操作需携带此id
- 4.浏览器执行完之后会把返回的结果给到驱动程序,驱动程序又会把结果返回给自动化脚本
我们的工作重心需要编写自动化脚本代码,还需要驱动程序,安装chrome浏览器。
注意:上诉说不同浏览器需要不同的浏览器驱动,并且不同版本的浏览器也需要不同的版本的驱动程序。例如chrome,不同版本需要下载对应的浏览器驱动
所以这就存在一系列的问题:
比如当前版本是109.0.5414.25且下载了对应的驱动,执行自动化测试并没有问题,过段时间浏览器自动更新了,更新到了110版本,也需要下载对应版本的驱动,但是我们无法预知到浏览器什么时候更新(千万不能关闭浏览器的自动更新),就会存在浏览器更新了,驱动没有更新的时间差,改时间差里我们的自动化运行时就会报错,我们写自动化的目的是为了发现问题,一旦发现问题就会报错,此时就会发现一会是程序有问题,一会又是因为驱动有问题导致报错,这就会提高自动化的误报率。此时误报率较高的时候,对于测试人员来说不知道是自动化程序有问题还是哪里有问题。
解决办法:通过驱动管理程序,能解决浏览器更新导致的自动化运行报错问题!
🏀安装驱动管理
不需要手动下载驱动程序,只需要在程序中下载对应的依赖(例如:使用maven工程,有一个pom.xml配置文件,可以下载各种依赖),而驱动管理就是一个依赖,下载这个依赖之后,驱动管理程序会自动下载对应驱动,我们就不需要下载浏览器对应的驱动了,只需要在代码中把这个依赖下载下来即可,每次执行程序的时候,由程序自动下载对应的驱动。
驱动管理:
WebDriverManager是一个开源Java库,以完全自动化的方式对SeleniumWebDriver所需的驱动程 序(如chromedriver、geckodriver、msedgedriver等)进行管理(即下载、设置和维护),自版 本5起,WebDriverManager还提供了其他相关功能,如发现本地系统中安装的浏览器的能力,构建 WebDriver对象(如ChromeDriver、FirefoxDriver、EdgeDriver等)
maven的安装与配置:Maven安装、初始化配置_maven初始化本地仓库命令-CSDN博客
配置完成之后,首先我们创建一个 maven 项目:
然后配置pom.xml 中配置文件驱动如下,推荐使用5.8.0版本:
此时就配置好了(配置上述代码后需点击刷新)
🌳Selenium
经过上诉步骤,webdrivermanager下载后驱动也好了,也下载好了chrome,此时接下来就需要通过selenium来编写自动化脚本了。
selenium是一个web自动化测试工具,selenium也是一个java库,提供了丰富的方法供给使用者进行web自动化测试。和webdrivermanager一样的,要使用这个java库,也需要将selenium加入到依赖中。
1)安装selenium库,放到dependency同级里面
2)编写代码(src中有两个文件夹,我们需要在test中编写代码,这只是行为规范,不是强制要求)
编写代码:
打开浏览器,使用驱动管理程序打开对应的浏览器驱动。(webdrivermanager是浏览器驱动,要打开chrome浏览器驱动 )
Selenium官方还存在一个问题,在编写Java代码的时候,有一个链接拒绝,也就是发送一个请求拒绝接受,需要增加一个配置。
写个测试类启动该程序后,就会自动访问 chrome 浏览器,并访问百度网页,输入迪丽热巴后,并点击进行搜索;
注意:若运行后,不能正常运行,出现以下报错信息,可能是浏览器版本和下载的驱动程序版本不一致
可通过Erverything搜索工具,搜索chrome查看驱动程序版本和chrome浏览器版本是否一致,若不一致,可能这是一个山寨版的chrome浏览器,下载正确的浏览器即可.
chrome官方网址:Google Chrome 网络浏览器
开始运行:首次允许会下载浏览器驱动,改代码测试速度很快,我们看不到执行效果。可每走一步睡眠3s。
代码展示:
直接观察允许效果:
对于测试人员来说,我们不需要关注他是如何进行搜索的,这里只是第一次写selenium代码脚本,睡眠3s为了方面观察,我们只需要关注是否正常退出,也就是最终为 "exit code 0"