当前位置: 首页 > news >正文

软件测试 - 自动化测试(概念)(Java)(自动化测试分类、web自动化测试、驱动、selenium自动化测试工具的安装)

一、自动化的概念

        ⾃动洒⽔机,主要通上⽔就可以⾃动化洒⽔并且可以⾃动的旋转。
        ⾃动洗⼿液,免去了⼿动挤压可以⾃动感应出洗⼿液
        超市⾃动闸⻔,不需要⼿动的开⻔关⻔
⽣活中的⾃动化案例有效的减少了⼈⼒的消耗,同时也提⾼了⽣活的质量。
        软件中的⾃动化测试也是如此,通过⾃动化测试有效减少⼈⼒的消耗的同时也提⾼了测试的质量和效率
        自动化测试需要测试人员编写自动化测试脚本。新增加功能也需要测试人员同步增加相应的自动化脚本。自动化测试报错也需要维护并解决自动化脚本问题。
        *为什么还说自动化减少⼈⼒的消耗?
        * 总的来说,利大于弊。大量重复性的测试内容如果仅仅人力来测试会很耗时,利用自动化测试就会省事省力许多,自动化测试脚本并在未来也能反复使用。而且计算机的处理速度是很快的,相对人工测试,可以提高效率。可以说是“一次付出,终身回报”。
        

⾃动化的主要⽬的就是⽤来进⾏回归测试。 

1.1回归测试

1)软件有多个版本需要进⾏功能的整体回归。

2)为了避免新增功能影响到历史的功能需要进⾏功能的回归。

常⻅⾯试题

1.⾃动化测试能够取代⼈⼯测试吗?
        ⾃动化测试 不⼀定⽐⼈⼯测试更能保障系统的可靠性,⾃动化测试是测试⼈员⼿⼯编写,后续如果有 功能的变更⾃动化也需要进⾏不定期的维护和更新
        自动化测试脚本依靠测试人员编写,而自动化测试脚本同时也能帮助测试人员测试。
手动测试还是占主导地位
2.⾃动化测试可以⼤幅度降低⼯作量?
        错误
坑!!“⼀定程度上”和“⼤幅度”的表达⽅式也需要注意
        自动化测试只是测试工作的一小部分测试行为,测试是为了保障产品质量,自动化测试可以 一定程度上降低工作量

二、 ⾃动化分类 

2.1 接⼝⾃动化

2.2 UI⾃动化

UI测试也称为界⾯测试,常⻅的UI⾃动化测试包含web⾃动化测试、移动端⾃动化测试等等。
客户端测试 - pc端(电脑)的软件
移动端测试 - 手机的软件
web测试 - 浏览器页面 

2.3 自动化测试金字塔 

1)理想中的自动化测试

理想的⾃动化测试⾦字塔表达了⾃动化测试的理想情况,利⽤较少的时间和精⼒在单元测试上就能够 发现更多有效的问题。
理想中,单元测试应该占主导地位。

2)实际上公司常用的金字塔

 三、WEB自动化测试

3.1 驱动

        上⾯给⼤家已经介绍过,web系统的测试前提是需要打开浏览器,通过访问web服务器来对服务器界 ⾯进⾏⼀系列的操作。对于⼿⼯测试来说,这⼀系列的操作都需要测试⼈员⼿动的,⼀步⼀步的来执 ⾏测试。
        那么对于⾃动化程序来说,程序如何才能打开浏览器并执⾏我们预期的操作流程呢?
驱动⼀词应⽤⼴泛,同学们都不会陌⽣。 ⻋有了驱动才能够让⻋跑起来.
        计算机有了驱动程序就可以与设备(⽿机,摄像头,⻨克⻛,键盘,显⽰器等等设备)进⾏通信。
        程序想要打开web浏览器就需要安装web驱动(即WebDriver),WebDriver 以本地化⽅式驱动浏览器。
         不同的浏览器打开,需要不同的驱动(谷歌浏览器需要谷歌的驱动,火狐浏览器需要火狐的驱动。。)

  不同的浏览器打开,需要不同的驱动(谷歌浏览器需要谷歌的驱动,火狐浏览器需要火狐的驱动。。)

 同一个浏览器,不同版本也需要不同的驱动

Unable to Locate Driver Error | Selenium

3.2 安装驱动管理

驱动管理
        WebDriverManager是⼀个开源Java库,以完全⾃动化的⽅式 Selenium WebDriver 所需的驱动程序(如chromedriver、geckodriver、msedgedriver等)进⾏管理(即下载、设置和维护),⾃版本5起,WebDriverManager还提供了其他相关功能,如发现本地系统中安装的浏览器的能⼒,构建 WebDriver对象(如ChromeDriver、FirefoxDriver、EdgeDriver等)
直接在maven项目下 pom.xml 安装依赖包就可以了
驱动管理程序 会自动下载正确的驱动
<dependency><groupId>io.github.bonigarcia</groupId><artifactId>webdrivermanager</artifactId><version>5.8.0</version><scope>test</scope>
</dependency>

创建一个maven空项目

 3.3 selenium

3.3.1 安装 selenium 依赖包

<dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-java</artifactId><version>4.0.0</version>
</dependency>

 3.3.2 使⽤selenium编写代码

3.3.3 编写自动化脚本

由于是自动化测试脚本,所以在测试的文件夹(test)里编写

每个人遇到的情况不同,我的谷歌版本不太稳定,启动的时候总报错

后面用的微软自带的edge

另外,首次启动会比较慢,因为会自动下载驱动

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;
import org.openqa.selenium.edge.EdgeDriver;
import org.openqa.selenium.edge.EdgeOptions;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxOptions;public class FirstTest {//测试百度搜索关键词:迪丽热巴void test01() throws InterruptedException {//谷歌浏览器--不稳定//改用edge就可以了哈
//        WebDriverManager.chromedriver().setup(); //打开浏览器驱动
//        ChromeOptions options = new ChromeOptions();
//        WebDriver driver = new ChromeDriver(options); //创建浏览器驱动对象,带上options//1.打开浏览器(使用驱动打开)//edge 浏览器WebDriverManager.edgedriver().setup();//增加浏览器配置:创建驱动对象时,指定允许访问所有链接。否则请求会被拒绝EdgeOptions options = new EdgeOptions();options.addArguments("--remote-allow-origins=*");WebDriver driver = new EdgeDriver(options); //创建浏览器驱动对象,带上optionsThread.sleep(3000);//为了看到效果,增加停留时间//2.输入完整的网址 https://www.baidu.comdriver.get("https://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();}
}
public class RunCase {public static void main(String[] args) throws InterruptedException {FirstTest firstTest = new FirstTest();firstTest.test01();}
}

 

http://www.lryc.cn/news/429423.html

相关文章:

  • wpf datagrid 实现双向绑定
  • 使用循环在el-select下拉框中循环出-3至50
  • 全球海事航行通告解析辅助决策系统
  • Spring 解决bean的循环依赖
  • 鸿蒙内核源码分析(ELF格式篇) | 应用程序入口并不是main
  • seq2seq编码器encoder和解码器decoder详解
  • 前端使用 Konva 实现可视化设计器(21)- 绘制图形(椭圆)
  • Python 将单词拆分为单个字母组成的列表对象
  • 欧洲 摩纳哥税务知识
  • 域控制器的四大支柱分别是车载以太网、自适应Autosar
  • 写给大数据开发:如何优化临时数据查询流程
  • 【MongoDB】Java连接MongoDB
  • nginx支持的不同事件驱动模型
  • C++ TinyWebServer项目总结(7. Linux服务器程序规范)
  • 基于STM32单片机设计的秒表时钟计时器仿真系统——程序源码proteus仿真图设计文档演示视频等(文末工程资料下载)
  • 人才流失预测项目
  • BUG——imx6u开发_结构体导致的死机问题(未解决)
  • 问答:什么是对称密钥、非对称密钥,http怎样变成https的?
  • 虚拟滚动列表组件ReVirtualList
  • 稳定、耐用、美观 一探究竟六角头螺钉螺栓如何选择
  • 数据库Mybatis基础操作
  • 人物形象设计:塑造独特角色的指南
  • 网络安全-安全策略初认识
  • python import相对导入与绝对导入
  • 深入理解 Go 语言原子内存操作
  • PostgreSQL几个扩展可以帮助实现数据的分词和快速查询
  • C盘满了怎么办?教你清理C盘的20个大招,值得收藏备用
  • 原生js实现下滑到当前模块进度条填充
  • 显示弹出式窗口的方法
  • Java-什么是缓存线程池?