目录
一、自动化
1.1 自动化概念
1.2 自动化分类
1.3 自动化测试金字塔
二、web自动化测试
2.1 驱动
2.2 安装驱动管理
三、selenium
3.1 ⼀个简单的web自动化示例
3.2 selenium+驱动+浏览器的工作原理
一、自动化
1.1 自动化概念
在生活中:
- 自动洒水机,主要通上水就可以自动化洒水并且可以自动的旋转;
- 自动洗手液,免去了手动挤压可以自动感应出洗手液;
- 超市自动闸门,不需要手动的开门关门;
生活中的自动化案例有效的减少了人力的消耗,同时也提高了生活的质量。
软件中的自动化测试也是如此,通过自动化测试有效减少人力的消耗的同时,也提高了测试的质量和效率。
自动化的主要目的就是用来进行回归测试。
回归测试是指在软件代码、使用环境或产品需求发生改变时,通过重新执行已经通过的测试用例,以检测产品中是否出现了新的问题或错误的测试过程。这种测试类型主要适用于软件开发周期中的迭代式开发过程和升级维护过程中。
自动化测试能够取代人工测试吗?自动化测试不一定比人工测试更能保障系统的可靠性,自动化测试是测试人员手工编写,后续如果有功能的变更,自动化也需要进行不定期的维护和更新。
自动化测试可以 大幅度 降低工作量?错误。或许表达为自动化测试在一定程度上可以降低工作量更加合理。
1.2 自动化分类
1. 接口自动化测试
2. UI/界面自动化: ①客户端自动化测试 ;② web自动化测试
1.3 自动化测试金字塔
理想的自动化测试金字塔表达了自动化测试的理想情况,利用较少的时间和精力在单元测试上就能够发现更多有效的问题。
往往实际开发中,自动化是“冰淇淋蛋筒反模式”。手工测试才能发现更多的问题,投入的精力也更大。
二、web自动化测试
web自动化测试就是
模拟人在浏览器上的操作行为,自动的打开浏览器,访问某个页面,并进行一系列的搜索和验证等行为。
2.1 驱动
对于自动化程序来说,程序如何才能打开浏览器并执行预期的操作流程呢?那么就需要驱动。程序想要打开web浏览器就需要安装web驱动(即WebDriver),WebDriver 以本地化方式驱动浏览器。
2.2 安装驱动管理
WebDriverManager是一个开源Java库,以完全自动化的方式对Selenium WebDriver所需的驱动程序(如chromedriver、geckodriver、msedgedriver等)进行管理(即下载、设置和维护),自版本5起,WebDriverManager还提供了其他相关功能,如发现本地系统中安装的浏览器的能力,构建WebDriver对象(如ChromeDriver、FirefoxDriver、EdgeDriver等)
<dependency>
<groupId>io.github.bonigarcia</groupId>
<artifactId>webdrivermanager</artifactId>
<version>5.8.0</version>
<scope>test</scope>
</dependency>
三、selenium
selenium是一个web自动化测试工具,selenium中提供了丰富的方法供给使用者进行web自动化测
试。
3.1 一个简单的web自动化示例
1. 安装selenium库
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>4.0.0</version>
</dependency>
2. 使用selenium编写代码
public void example_test()
{
//驱动程序管理的⾃动化
WebDriverManager.chromedriver().setup();
ChromeOptions options = new ChromeOptions();
//允许访问所有链接
options.addArguments("--remote-allow-origins=*");
//1、打开浏览器
WebDriver driver = new ChromeDriver(options);
//2.输⼊百度⽹址:https://www.baidu.com
driver.get("https://www.baidu.com");
//3、找到输⼊框并输⼊“迪丽热巴”
driver.findElement(By.xpath("//*[@id=\"kw\"]")).sendKeys("迪丽热巴");
//4、找到“百度⼀下”按钮并点击
driver.findElement(By.xpath("//*[@id=\"su\"]")).click();
//5、关闭浏览器
driver.quit();
}
public class runCase {
public static void main(String[] args) throws InterruptedException {
example_demo test = new example_demo();
test.example_test();
}
}
运行测试代码之后,测试完成,也可以在代码中添加sleep,以便更好的观察,更改代码为:
//测试百度搜索关键词:迪丽热巴
public void example_test() throws InterruptedException {
//驱动程序管理的⾃动化
WebDriverManager.chromedriver().setup();
//增加浏览器配置:创建驱动对象要强制指定运行访问所有的链接
ChromeOptions options = new ChromeOptions();
//允许访问所有链接
options.addArguments("--remote-allow-origins=*");
//1、打开浏览器
WebDriver driver = new ChromeDriver(options);
Thread.sleep(3000);
//2.输⼊百度⽹址:https://www.baidu.com
driver.get("https://www.baidu.com");
Thread.sleep(3000);
//3、找到输⼊框并输⼊“迪丽热巴”
driver.findElement(By.xpath("//*[@id=\"kw\"]")).sendKeys("迪丽热巴");
Thread.sleep(3000);
//4、找到“百度⼀下”按钮并点击
driver.findElement(By.xpath("//*[@id=\"su\"]")).click();
Thread.sleep(3000);
//5、关闭浏览器
driver.quit();
}
3.2 selenium+驱动+浏览器的工作原理
实现web自动化测试需要浏览器、浏览器驱动、selenium自动化脚本。
- 通过selenium编写的自动化脚本代码中在ChromeDriverService中创建一个服务;
- 通过创建好的服务打开webdriver,安装在本地的驱动服务IP为localhost,PORT为 ChromeDriverService中创建的端口号,该服务地址为selenium向webdriver发送请求的服务地址;
- 向浏览器驱动程序发送HTTP请求,浏览器驱动程序解析请求,打开浏览器,并获得SessionId,如果再次对浏览器操作需携带此id;
- 打开浏览器后,所有的selenium的操作(访问地址,查找元素等)均通过创建好的服务链接到 webdriver,然后使用execute发送请求;
- 驱动收到请求并对请求进行解析,转成浏览器能够解析的脚本并发送给浏览器,浏览器通过请求的内容执行对应动作;
- 浏览器再把执行的动作结果通过浏览器驱动程序返回给测试脚本。