软件测试——自动化测试概念
【本节⽬标】
⾃动化测试
Web⾃动化测试
selenium
一:⾃动化
1.1 ⾃动化概念
⾃动的代替⼈的⾏为完成操作。
⾃动化在⽣活中处处可⻅
⾃动洒⽔机,主要通上⽔就可以⾃动化洒⽔并且可以⾃动的旋转。
超市⾃动闸⻔,不需要⼿动的开⻔关⻔⽣活中的⾃动化案例有效的减少了⼈⼒的消耗,同时也提⾼了⽣活的质量。
软件中的⾃动化测试也是如此,通过⾃动化测试有效减少⼈⼒的消耗的同时也提⾼了测试的质量和效率。
⾃动化的主要⽬的就是⽤来进⾏回归测试。
1.1.1 回归测试
软件有多个版本需要进⾏功能的整体回归
保证新增加的功能没有问题,还要保证历史功能不会收到影响,
重复性工作为了避免新增功能影响到历史的功能需要进⾏功能的回归。
常⻅⾯试题
1.⾃动化测试能够取代⼈⼯测试吗?
⾃动化测试不⼀定⽐⼈⼯测试更能保障系统的可靠性,⾃动化测试是测试⼈员⼿⼯编写,后续如果有功能的变更⾃动化也需要进⾏不定期的维护和更新。2.⾃动化测试可以⼤幅度降低⼯作量?
错误
坑!!“⼀定程度上”和“⼤幅度”的表达⽅式也需要注意
tips:测试笔试中的选择题尽量不要选择说的太死或者太绝对的选项
1.2 ⾃动化分类
前端:前端(H5页面)、客户端
UI/界面自动化测试:客户端界面自动化测试、web界面自动化测试
后端:处理逻辑,封装成一个一个的接口,将接口提供给前端交互
接口自动化测试web界面自动化测试
1.3 ⾃动化测试⾦字塔
⾃动化的类型⾮常多,那么到底哪⼀种是最好的?哪⼀种测试的收益会更佳?
这⾥我们介绍测试圈内⾮常著名的⾃动化测试⾦字塔
左侧:越往上走,投入更多时间和精力回报更少。
越往下走,投入的精力和时间越少获得的回报更大
所以我们在测试中期望单元测试投入更多,
理想的⾃动化测试⾦字塔表达了⾃动化测试的理想情况,利⽤较少的时间和精⼒在单元测试上就能够发现更多有效的问题。
然后实际上在企业中,⾃动化往往是“冰淇淋蛋筒反模式”
⾃动化需要⼤量的初始投资,找到“突破点”,与⼿动测试相⽐,我们开始看到它对⻓期成本产⽣的积极影响,也能够清楚,这两种测试活动都是完全兼容,产⽣短期和⻓期利益
因为因为单元测试对开发人员来说,无形增加了大量的工作量
二:web⾃动化测试
程序模拟人的操作来执行测试
2.1 驱动
上⾯给⼤家已经介绍过,web系统的测试前提是需要打开浏览器,通过访问web服务器来对服务器界⾯进⾏⼀系列的操作。对于⼿⼯测试来说,这⼀系列的操作都需要测试⼈员⼿动的,⼀步⼀步的来执⾏测试。那么对于⾃动化程序来说,程序如何才能打开浏览器并执⾏我们预期的操作流程呢?
驱动⼀词应⽤⼴泛,同学们都不会陌⽣。
2.1.1安装驱动程序
有两种方式
1:手动下载
第二种方法:
由驱动管理自动下载与浏览器版本匹配的驱动
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⾃动化测试⼯具,selenium中提供了丰富的⽅法供给使⽤者进⾏web⾃动化测试。
3.1 ⼀个简单的web⾃动化⽰例
<dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-java</artifactId><version>4.0.0</version></dependency>
2)使⽤selenium编写代码
Edge
import io.github.bonigarcia.wdm.WebDriverManager; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeOptions; import org.openqa.selenium.edge.EdgeDriver; import org.openqa.selenium.edge.EdgeOptions; public class FilstText { public void example_test() { //驱动程序管理的自动设置 WebDriverManager.edgedriver().setup(); //允许访问所有链接 EdgeOptions options = new EdgeOptions(); options.addArguments("--remote-allow-origins=*"); //1、打开浏览器 WebDriver driver = new EdgeDriver(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 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.comdriver.get("https://www.baidu.com");//3、找到输⼊框并输⼊“迪丽热巴”driver.findElement(By.xpath("//*[@id=\"kw\"]")).sendKeys("迪丽热巴"); //4、找到“百度⼀下”按钮并点击driver.findElement(By.xpath("//*[@id=\"su\"]")).click();//5、关闭浏览器driver.quit();}要下实现自动化,需要selenium,驱动,浏览器(一定要正版浏览器)
3.2 selenium+驱动+浏览器的⼯作原理
1. 通过selenium编写的⾃动化脚本代码中在ChromeDriverService中创建⼀个服务
2. 通过创建好的服务打开webdriver,安装在本地的驱动服务IP为localhost,PORT为
ChromeDriverService中创建的端⼝号,该服务地址为selenium向webdriver发送请求的服务地址。
3. 向浏览器驱动程序发送HTTP请求,浏览器驱动程序解析请求,打开浏览器,并获得sessionid,如果再次对浏览器操作需携带此id
4. 打开浏览器后,所有的selenium的操作(访问地址,查找元素等)均通过创建好的服务链接到webdriver,然后使⽤execute发送请求
5. 驱动收到请求并对请求进⾏解析,转成浏览器能够解析的脚本并发送给浏览器,浏览器通过请求的内容执⾏对应动作
6. 浏览器再把执⾏的动作结果通过浏览器驱动程序返回给测试脚本








