【软件测试】自动化测试概念篇

1. 自动化概念

自动化:自动化就是自动的模拟人的行为,代替人完成操作
自动化的案例在生活中非常常见:
image.png
自动洒水机:只要通上水就可以自动洒水并旋转
超市自动闸门:当感应到人的存在时就是自动开门、关门
自动洗手液:可以自动感应出洗手液
软件测试中自动化的目的就是:减少人力消耗的同时,提升测试的质量以及效率

自动化测试的主要目的就是用来进行回归测试

1.1 回归测试

  1. 如果当前的产品是一个新研发的产品(具备丰富的功能),此时有许多功能点例如功能点1、功能点2、功能点3…,我们需要对每一个功能进行单独测试,同时还需要站在产品的角度进行产品的整体回归测试
  2. 如果当前产品已经迭代到了第n个版本,此时增加了额外的功能,那么我们不仅需要对新增加的功能进行测试,还需要对历史已有的功能进行回归测试
  3. 如果历史测试中存在着bug,那么我们还需要进行bug的回归测试

1.2 常见面试题

  1. 自动化测试能够取代人工测试么?

    答:不可以!

    • 因为自动化测试只在测试过程中占据少部分地位,最主要的还是手工测试

    • 自动化测试脚本还是由测试人员来进行编写的

    • 当功能或需求发生变更时,测试人员需要更新与维护自动化测试脚本

  2. 自动化测试可以大幅度降低工作量?

    答:不可以!(要注意不是大幅度,而是一定程度)

    • 因为自动化测试只在测试过程中占据少部分地位,最主要的还是手工测试

    • 自动化测试脚本还是由测试人员来进行编写的

    • 当功能或需求发生变更时,测试人员需要更新与维护自动化测试脚本

2. 自动化测试分类

自动化其实是一个统称,自动化可以分为如下类别:

  • 接口自动化:例如请求接口等与后端代码有关的自动化测试
  • UI自动化
    • 客户端界面:与客户端代码相关(例如PC端、移动端界面)
    • Web端界面:与浏览器前端代码相关

3. 自动化测试金字塔

自动化的类型非常多,那么到底哪种方式是最好的?哪种方式收益最高呢?

上图是理想的自动化测试金字塔,从上述图中反映出如下结论:

  • 从测试成本上来看:UI界面测试 > API/集成/接口测试 > 单元测试
  • 从测试收益上来看:单元测试 > API/集成/接口测试 > UI界面测试

这是因为单元测试是对最小单元进行测试,此时程序规模较小,很容易找出bug所在,测试成本低、收益高,但是随着项目的不断开发,UI自动化测试时排查成本较高、收益较低
但是这只是理想化的测试金字塔,实际情况往往如下图所示:

  • 对于单元测试来说:执行单元测试的往往是开发人员,对于执行测试往往是不专业的,因此收益较低
  • 对于UI界面测试来说:代码层面(后端逻辑错误)往往需要等到界面中才会暴露出来,因此可以发现的问题也会更多一些

4. 自动化测试实践

下面我们就来实操一下如何进行自动化Web界面测试:
需求:打开浏览器 => 输入网址(https://www.baidu.com) => 找到输入框并输入"鸡和篮球有什么关系?" => 然后找到搜索按钮并点击 => 关闭浏览器

4.1 驱动

这里我们还需要注意一个问题,如何让程序打开本地的浏览器呢?我们需要安装"web驱动"即WebDriver,不同的浏览器对应不同的Driver类型,例如Chrome浏览器就对应ChromeDriver驱动,Edge浏览器就对应EdgeDriver驱动,并且浏览器与驱动的版本需要对应:

Chrome驱动下载地址:http://chromedriver.storage.googleapis.com/index.html

但是我们手动下载驱动有如下问题:

  1. 每次浏览器版本更新,我们都需要重新手动下载驱动
  2. 无法预测浏览器何时更新,存在版本不一致导致的程序报错(提高程序误报率)

于是就引出了我们的 驱动管理程序,我们只需要在Java的pom配置文件中添加如下依赖,即可轻松实现驱动管理

<dependency>
  <groupId>io.github.bonigarcia</groupId>
  <artifactId>webdrivermanager</artifactId>
  <version>5.8.0</version>
  <scope>test</scope>
</dependency>

4.2 selenium实操

当我们已经有了浏览器 + 浏览器驱动时,剩下的就是编写selenium代码了:
在我们的Java程序中引入对应selenium的依赖:

<!-- 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>

剩下的就是如何使用代码来模拟人工行为,具体的代码如下:

@Test
public void test() {
    // 1. 注册Web驱动管理器
    WebDriverManager.chromedriver().setup();
    // 2. 配置options参数
    ChromeOptions options = new ChromeOptions();
    options.addArguments("--remote-allow-origins=*"); // 允许访问所有链接
    // 3. 创建驱动(打开浏览器)
    WebDriver webDriver = new ChromeDriver(options);
    // 4. 输入百度网址
    webDriver.get("https://www.baidu.com");
    // 5. 找到输入框并输入"鸡和篮球有什么关系?"
    webDriver.findElement(By.xpath("//*[@id=\"kw\"]")).sendKeys("鸡和篮球有什么关系?");
    // 6. 找到百度一下按钮并点击
    webDriver.findElement(By.xpath("//*[@id=\"su\"]")).click();
    // 7. 关闭浏览器
    webDriver.quit();
}
  • WebDriverManager.chromeDriver().setup():更新指定浏览器的驱动程序
  • WebDriver webDriver = new ChromeDriver(options):创建指定的浏览器驱动对象(并配置参数)
  • webDriver.get("https://www.baidu.com"):让浏览器打开指定网址
  • webDriver.findElement(By.xpath("//*[@id=\"kw\"]")).sendKeys("鸡和篮球有什么关系?"):找到输入框并输入关键词
  • webDriver.findElement(By.xpath("//*[@id=\"su\"]")).click():找到按钮并点击
  • webDriver.quit():退出程序

selenium脚本执行流程:

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值