一)什么是自动化?为什么要做自动化?
自动化测试可以代替一部分手工测试,不能够完全代替手工测试
1)自动化测试相比于手工测试来说人力的投入和时间的投入是非常非常少的,自动化测试能够提高测试效率
2)在回归测试里面,如果你回归的功能越来越多,迭代的版本越来越多,版本回归压力也会越来越大,所以仅仅通过人工测试的方式来回归所有的版本肯定是不现实的,所以我们需要借助自动化进行回归
selenium介绍
1)Selenium是web应用中基于UI的自动化测试框架selenium1.0 + webdriver 构成现在的Selenium2.0
2)现在我们说起selenium,一般指的是Selenium2.0
它由Selenium IDE,Webdriver,Selenium Grid组成selenium IDE:自动化脚本录制工具
selenium GRID:做分布式测试(把我们的脚本铺在不同的机器上面)
selenium RC:服务器
二)为什么选择selenium作为自动化测试工具?
selenium是web应用中的基于UI的自动化测试框架,支持多平台,多浏览器,多语言
选择它一定是有原因的
1)支持多浏览器,在进行兼容性测试的时候,我们要对浏览器进行测试,因为用户可能会使用多个浏览器,因为它可以支持多浏览器进行自动化测试;
2)支持多平台多个操作系统,比如说linux系统,mac系统,windows系统,MacOS系统;
3)开源免费,不用花钱;
4)selenium支持多语言,比如说JAVA还支持python;
5)selenium包底层有很多可以使用的API;
自动化测试脚本可以重复的进行测试执行, 用的次数越多,越有价值
1)UI自动化:进行Web界面的测试,项目比较稳定,如果说我们的项目不稳定,需求在不断地发生变化,不适合做自动化测试,脚本还要进行改动,在我们项目的后期进行UI自动化测试,因为我们不同的用户有不同的操作习惯,所以我们的测试用例的维护量大
2)接口自动化:在项目前期就可以进行,项目前期就可以进行介入,测试用例的维护量比较少,可变性比较大,只要考虑输入和输出就可以了,我们还要从多角度验证非法的输入和输出,接口还要稳定
3.1)每次我们进行迭代的时候,我们把核心的功能和流程写成自动化脚本,而这些核心的功能和流程一般是不会发生改变的,就算要进行下一次迭代,也是在这些和新的功能和流程的基础上增加一些新的功能,我们进行回归测试就把自动化脚本执行一次
3.2)兼容性测试也可以用脚本,我们只需要在脚本中更改浏览器的驱动就可以了
3.3)自动化测试执行速度是很快的,例如咱们之前说的注册邮箱功能,24小时之内和给我们发邮件,那如果正好是24小时呢?我们就要对这个时间节点去进行测试,我们总不可能让人去拿着秒表来进行等待测试吧,况且人脑试想一个反应时间的,所以测试也会不准确,所以我们使用自动化脚本的方式会更准确
三)环境部署
selenium工具包
Chrome浏览器
ChromeDriver谷歌驱动
Java版本最低要求是8
四)什么是驱动?驱动的工作原理是什么?
4.1)汽车是具有驱动的,两个轮子也是有驱动的,四个轮子还是有驱动的,驱动可以使汽车跑起来
4.2)计算机里面也是有驱动程序的,可以驱动计算机和设备工作起来
4.3)打开浏览器也是需要驱动的,在人工测试的情况下,人工可以手动的驱动打开浏览器
但是对于自动化测试来说,代码不能够手动的直接打开浏览器,需要借助驱动程序来协助打开浏览器,总结:代码可以驱使驱动打开浏览器
五)驱动的工作原理:
Selenium RC 在浏览器中运行 JavaScript 应用,会存在环境沙箱问题,而 WebDriver 可以跳出 JavaScript 的沙箱,针对不同的浏览器创建更健壮的,分布式的,跨平台的自动化测试脚本;
前提:使用selenium来编写代码
1)我们使用的selenium编写的自动化脚本代码会给浏览器的驱动发送一个HTTP请求
2)webdriver浏览器驱动会接受这个HTTP请求并进行解析
3)wendriver浏览器驱动会操控浏览器来执行一些操作
4)浏览器会把执行结果包装成HTTP响应给驱动,驱动再把执行结果返回给应用程序
启动浏览器,把浏览器绑定到特定的端口,形成一个remote server,自动化脚本通过command executor,HTTP协议给remote server发送指令,去操纵浏览器
用Selenium实现自动化,主要需要三个东西:
1)自动化测试代码:自动化测试代码发送请求给浏览器的驱动,比如火狐驱动、谷歌驱动,IE驱动;
2)浏览器驱动:它来解析这些自动化测试的代码,解析后把它们发送给浏览器
3)浏览器:执行浏览器驱动发来的指令,并最终完成工程师想要的操作。
测试代码中包含了各种期望的对浏览器界面的操作,例如点击,测试代码通过给Webdriver发送指令,让Webdriver知道想要做的操作,而Webdriver根据这些操作在浏览器界面上进行控制,由此测试代码达到了在浏览器界面上操作的目的。
Selenium脚本执行时后端实现的流程:
1)对于每一条Selenium脚本,一个http请求会被创建并且发送给浏览器的驱动
2)浏览器驱动中包含了一个HTTP Server,用来接收这些http请求
3)HTTP Server接收到请求后根据请求来具体操控对应的浏览器
4)浏览器执行具体的测试步骤
5)浏览器将步骤执行结果返回给HTTP Server
6)HTTP Server又将结果返回给Selenium的脚本,如果是错误的http代码我们就会在控制台看到对应的报错信息
1)webdiver:驱动浏览器做事情,是一个.exe文件,绕过了JavaScript的环境沙箱问题,当我们打开一个新的页面的时候,会出现被拦截的现象
2)脚本:就类似于乘客,脚本里面有详细的路线,去哪里,从哪里转
3)司机:根据乘客说的路线进行开车,拿钥匙开车,根据乘客的指示来进行操作,webDriver
4)车:被驱动的工具,浏览器
5)webDriver根据脚本的指令驱动浏览器
必须知道请求驱动的地址是什么?那么此时驱动在这里面应该扮演这是一个啥样的角色呢?
驱动应该是一个服务器,IP+端口号,IP地址就是本机IP,端口号就是默认的9515
乘客的指令=自动化脚本
webdriver=司机
浏览器=出租车
当前驱动程序已经建立好了TCP链接
六)简单的自动化测试脚本
1)创建一个maven项目
2)引入依赖
<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java --> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>4.0.0</version> </dependency>
环境沙箱问题:打开一个新的网页的时候会一直转动,转小圆圈
selenium IDE:自动化脚本录制工具
安装selenium IDE,先打开浏览器的扩展和主题搜索Selenium IDE,下载完成之后再来点击
1)先进行下载
2)找到启动位置
3)使用
4)进入到指定页面
5)导出报告,右键test点击export
6)点击run可以重新运行脚本
安装python:
先去官网:Welcome to Python.org
点击下载,点击Windows