软件测试--自动化测试1
本章目标
1.自动化测试
2.Web自动化测试
3.selenium
1.自动化
1.1自动化概念
自动的替代人的行为完成操作
自动化生活中随处可见:自动洒水机,自动闸门..
软件中的自动化测试也是如此,通过自动化有效的减少人力的消耗的同时提高了测试的质量和效率.
自动化测试主要是目的就是用来进行回归测试.
1.1.1回归测试
软件有多个版本需要进行功能的整体回归,为了避免新增功能影响到历史的功能,需要进行功能的回归.
手工测试新增加的功能,自动化测试历史功能,最后进行回归测试
手工测试的功能少,能保障产品尽快上线,时间足够,测试的质量也会更高一些
如果存在历史功能的优化/变更,自动化测试脚本可能会出现报错,测试人员需要维护并解决自动化脚本里的问题
自动化脚本出现报错有时不一定是代码写的问题,有可能是开发人员编写新的功能影响了历史功能--自动化脚本发现了bug
常见问题
1.自动化测试能取代人工测试吗?
自动化测试不一定比人工测试更能保障系统的可靠性,自动化测试是测试人员手工编写的,后续如果有功能的变更,自动化也需要进行不定期的维护和更新.
2.自动化测试可以大幅降低工作量?
自动化测试并不能直接减少工作量。它需要前期投入大量时间搭建框架、编写脚本,并持续维护更新。只有在长期稳定、重复执行的场景中,自动化测试才能逐步体现效率优势。
自动化测试可以一定程度上降低工作量
1.2自动化分类
自动化测试是一个统称
自动化测试分为UI/界面自动化测试和接口自动化测试
UI自动化测试也称为界面自动化测试,常见的UI自动化测试包含web自动化测试,移动端自动化测试等等.
1.3自动化测试金字塔
这是理想的自动化测试金字塔
越往上走投入更多的时间和精力,获得的回报越少
越往下走投入更少的时间和精力,获得的回报越大
在企业中,越来越多的人开始重视单元测试,编写单元测试脚本
单元测试是由开发人员来进行的,存在较少的公司会招聘专业的单元测试人员
对于开发人员来说,又是一部分工作,会不太愿意做,所以需要测试人员来推动开发人员实施单元测试
企业中实际上往往是"冰淇淋蛋筒反模式"
实际工作中手工测试阶段才能发现问题,投入的精力也就是更大
UI自动化:可以发现的问题相较于接口自动化来说更多,很多后端问题都会体现在界面上,界面不仅可以发现界面问题,也能发现后端问题
接口自动化:关注接口(url,请求方案,请求参数,响应码,相应数据...)
2.Web自动化测试
目标:百度搜索关键字"洛克王国"并展示相关词条
手工测试
1.打开浏览器
2.请求网址http://www,baidu.com
3.找到百度输入框,并输出关键词"洛克王国"
4.找到百度一下并且点击
5.关闭浏览器
自动化测试无非也是如此步骤,只不过需要使用代码实现
1.打开浏览器
2.请求网址http://www,baidu.com
3.找到百度输入框,并输出关键词"洛克王国"
4.找到百度一下并且点击
5.关闭浏览器
自动化的打开浏览器需要使用驱动程序
程序想打开web浏览器就需要安装web驱动(即WebDriver),WebDriver 以本地化方式驱动浏览器.
安装驱动有两种方式,一种是通过手动下载,另一种是由驱动管理工具下载与浏览器版本匹配的
手动下载驱动,驱动必须要跟浏览器匹配(浏览器的名称和版本)
产生的问题:浏览器会不定时更新,更新之后旧版本驱动无法使用
自动下载:使用 WebDriverManager
自动管理驱动,但需要添加相关依赖
<dependency><groupId>io.github.bonigarcia</groupId><artifactId>webdrivermanager</artifactId><version>5.8.0</version><scope>test</scope>
</dependency>
使用驱动管理程序下载驱动的时候,必须要保证对应的浏览器程序一定是存在的(必须是正版)
3.Selenium
驱动程序准备好了,这里还需要使用 selenium 中提供的方法来通过驱动程序操作浏览器
添加相关依赖:
<dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-java</artifactId><version>4.0.0</version>
</dependency>
第一个简单的web界面自动化的代码如下(火狐浏览器打开):
import io.github.bonigarcia.wdm.WebDriverManager;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;public class auto_test {public void test01() throws InterruptedException {//驱动管理程序下载驱动WebDriverManager.chromedriver().setup();ChromeOptions options=new ChromeOptions();//允许访问所有链接options.addArguments("--remote-allow-origins=*");//1.驱动打开浏览器WebDriver driver=new ChromeDriver(options);Thread.sleep(3000);//2.请求百度 http://www.baidu.com/driver.get("http://www.baidu.com/");Thread.sleep(3000);//3.找到百度输入框输入"洛克王国"driver.findElement(By.cssSelector("#kw")).sendKeys("洛克王国");Thread.sleep(3000);//4.找到百度一下按钮并点击driver.findElement(By.cssSelector("#su")).click();Thread.sleep(3000);//5.关闭浏览器driver.quit();}
}
这里是Edge浏览器版本的戴拿,在4处地方稍作修改即可
import io.github.bonigarcia.wdm.WebDriverManager;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.edge.EdgeDriver;
import org.openqa.selenium.edge.EdgeOptions;public class auto_test2 {public void test02(){WebDriverManager.edgedriver().setup();EdgeOptions options=new EdgeOptions();options.addArguments("--remote-allow-origins=*");WebDriver driver=new EdgeDriver(options);driver.get("http://www.baidu.com/");driver.findElement(By.cssSelector("#kw")).sendKeys("洛克王国");driver.findElement(By.cssSelector("#su")).click();driver.quit();}
}
可能会存在自动下载的驱动跟浏览器版本号不是一模一样(但不影响程序),存在两种情况
1)浏览器已经更新了,但是驱动还没有发布最新版本,那么最近的历史版本就可以接着使用
2)浏览器还未更新,但是下载的是最新版本的驱动,新的版本驱动可以兼容历史版本的浏览器
使用的驱动自动下砸的驱动存放位置:C:\Users\用户名\.cache\selenium