UI自动化测试

前言

本次技术分享主要做简单的自动化测试简介、自动化测试要不要做、什么情况下适合做自动化测试,常见测自动化测试工具 ,以及结合项目做的一些demo演示

1、什么是自动化测试

功能自动化测试是一种用于验证界面和功能正确性的软件测试方法。它通过模拟用户的行为和操作,自动化执行各种用户界面上的测试用例,从而减少了测试过程中的人工工作量和时间消耗。

2、自动化测试要不要做?

如果一个组织真正重视软件质量,功能自动化测试是有必要做。有如下几点理由

1.任何自动化工具都是在简单、机械、重复的任务场景下最能发挥作用 。

2.对于很多组织来说,功能测试是当前耗费测试团队人力多的环节,大部分专职测试人员日常工作就是功能测试。“工欲善其事必先利其器”,测试人员也需要自动化工具来提升其日常工作效率,用以增强测试的一致性和准确性。由于测试用例是通过脚本或代码定义的,并且自动执行,因此可以避免由于人为错误而导致的测试不一致性。其次,功能自动化测试可以帮助检测和修复潜在的错误和缺陷。通过自动执行测试,更早地发现和修复问题。

3.无论后台多复杂、多重要,用户接触的终究还是前端界面。现在的软件除了后台逻辑之外,还有很多前端脚本逻辑和样式,单纯靠后台接口测试,无法证明用户端的可用性。

4.从实践的角度,还有会有很多阻碍,归根结底就是三个字“不稳定”!测试环境构建不稳定、被测软件界面不稳定、测试框架运行不稳定。

其实只要适当的过程改善和开发团队配合,这些问题基本都是能够解决或者明显改善的。以测试环境为例,在纯手工测试阶段,有些项目的测试环境可以被随时停止、随意更新。这样对手工测试也是有影响的(工作进度受干扰、测试计划被打乱 ,这就需要对研发测试过程进行必要的改善。然而被测软件界面不稳定、测试框架运行不稳定,就没有测试环境不稳定那么容易解决了。这里面主要涉及与开发团队的配合、测试框架的设计。
5.另外,功能自动化测试还需要考虑一些挑战和注意事项。首先,由于功能的变化是非常频繁的,因此测试脚本可能需要定期进行维护和更新。其次,功能自动化测试脚本的编写需要一定的技术知识和经验。开发人员需要了解测试工具的使用和编程语言的基础知识。此外,测试脚本的执行速度也是一个问题。为了提高执行速度,可以采取一些优化措施,如使用并行执行、减少等待时间等。最后,功能自动化测试并不能完全取代手动测试。手动测试仍然有它的价值,特别是在一些需要人工判断和感性评估的场景下。,

3、什么样的项目适合自动化测试

如上图所示,真正工作中无法全部满足以上条件,所以需要作出权衡,一般来说,只需要满足以下几点,就可以对项目开展自动化测试

①需求稳定,不会频繁变更

自动化测试最大的挑战就是需求的变化,而自动化脚本本身就需要修改、扩展、debug,去适应新的功能,如果投入产出比太低,那么自动化测试也失去了其价值和意义;

折中的做法是选择相对稳定的模块和功能进行自动化测试,变动较大、需求变更较频繁的部分用手工测试;

②多平台运行,组合遍历型、大量的重复任务

测试数据、测试用例、自动化脚本的重用性和移植性较强,降低成本,提高效率和价值;

③软件维护周期长,有生命力

自动化测试的需求稳定性要求、自动化框架的设计、脚本开发与调试均需要时间,这其实也是一个软件开发过程,如果项目周期较短,没有足够的时间去支持这一过程,那自动化测试也就不需要了;

④被测系统开发较为规范,可测试性强

主要出于这几点考虑:被测试系统的架构差异、测试技术和工具的适应性、测试人员的能力能否设计开发出适应差异的自动化测试框架;

4、常见的自动化测试工具简介

Robot Framework

一款基于python语言编写的自动化测试框架工具,具备良好的扩展性,支持关键字驱动,支持多种类型的客户端和接口,可进行分布式测试;

Jmeter(压力测试工具)

JMeter是一个功能强大的负载和性能测试工具。它支持多种协议和技术,包括Web应用程序、SOAP和RESTful服务、数据库查询等。JMeter提供了一组图形化界面和配置文件,可以模拟大量用户,并记录响应时间、吞吐量和错误率等性能指标。

UFT(Unified Functional Testing)

即原来的QTP(Quick Test Professional Software)与ST(Service Test)合并而来,由HP公司开发,是一个企业级的商业自动化测试工具,提供了强大易用的录制回放功能,

同时兼容对象识别模式与图像识别模式,支持B/S和C/S两种架构的软件测试;

Appium:

Appium是用于移动应用程序的自动化测试工具。它支持Android和iOS平台,并提供了一组API和工具,可以模拟用户在移动应用程序中的交互行为,如点击、滑动、输入等。Appium可以用于测试移动应用程序的功能、性能和兼容性。

Selenium

Selenium是用于Web应用程序的自动化测试工具。它支持多种浏览器和编程语言,并提供了一组API和工具,可以模拟用户在浏览器中的交互行为,如点击、输入、提交表单等。Selenium可以用于测试Web应用程序的功能、性能和兼容性。,Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。

5、Selenium了解

seleniun 的原理

我们用的 selenium3x 以上的版本,对于 selenium2x 以上的版本原理是这样的:

Selenium2.0 则是把 selenium1.0 中 selenium RC 替换为了 WebDriver

WebDriver 利用浏览器原生的 API,封装成一套更加面向对象的 SeleniumWeb Driver API

直接操作浏览器页面里的元素,甚至操作浏器本身(截屏,回口大小,启动,关闭,安装插件,配置

证书之类的),由于使用的是浏览器原生的 API 速度大大提高,而且调用的稳定性交给了浏览器厂商

本身,显然是更加科学,然而带来的一些副作用就是,不同的浏器厂商,对 Web 元素的操作和呈现多

少会有一些差异,这就直接导致了 SeleniumWebDriver 要分浏览器厂商不同,而提供不同的实现,

例如 Firefox 就有专门的 FirefoxDriver,

Chrome 就有专门的 ChromeDriver 等等

Selenium功能特性

  • Selenium 是一个开源和可移植的 Web 测试框架。
  • Selenium IDE 为创作测试提供了回放和录制功能,而无需学习测试脚本语言。
  • 它可以被视为领先的基于云的测试平台,可帮助测试人员记录他们的操作并将其导出为可重复使用的脚本,并具有易于理解且易于使用的界面。
  • Selenium 支持各种操作系统,浏览器和编程语言。如下列表:
    • 编程语言: C# ,Java,Python,PHP,Ruby,Perl 和 JavaScript
    • 操作系统:Android,iOS,Windows,Linux,Mac,Solaris。
    • 浏览器:谷歌浏览器,Mozilla Firefox,Internet Explorer,Edge,Opera,Safari 等。
  • 它还支持并行测试执行,从而减少了时间并提高了测试效率。
  • Selenium 可以与 Ant 和 Maven 等框架集成,用于源代码编译。
  • Selenium 还可以与 TestNG 等测试框架集成,以进行应用程序测试和生成报告。
  • 与其他自动化测试工具相比,Selenium 需要的资源更少。
  • WebDriver API 已经尝试集于 Selenium 中,这是对 Selenium 进行的最重要的修改之一。
  • Selenium Web 驱动程序不需要服务器安装,测试脚本直接与浏览器交互。
  • Selenium 命令根据不同的类进行分类,使其更易于理解和实现。
  • Selenium Remote Control(RC)与 WebDriver API 一起被称为 Selenium 2.0。此版本旨在支持充满活力的网页和 Ajax。

6.环境部署

1.安装JDK及环境变量配置

1. 下载JDK:访问Oracle官方网站(Java Downloads | Oracle),选择适合你操作系统的JDK版本,点击下载。

2. 安装JDK:下载完成后,运行安装程序,按照指示完成安装过程。选择默认安装路径即可。

3. 配置环境变量:

- 打开计算机的属性设置窗口(可以通过右键点击“此电脑/我的电脑”,然后选择“属性”打开窗口)。

- 在窗口左侧点击“高级系统设置”。

- 在弹出的窗口中点击“环境变量”按钮。

- 在“系统变量”部分找到“Path”变量,点击“编辑”按钮。

- 在弹出的对话框中,点击“新建”按钮,然后粘贴JDK的安装路径。例如,如果JDK安装在“C:\Program Files\Java\jdk11”目录下,那么将“C:\Program Files\Java\jdk11\bin”添加到“Path”中。

- 点击“确定”按钮保存更改。

4. 检查安装和配置:

- 打开命令提示符窗口(按下Win + R,输入“cmd”并点击“确定”)。

- 在命令提示符中输入“java -version”命令,如果成功显示JDK的版本信息,则表示安装和配置成功

2.安装IDEA
3.安装Maven,添加Maven环境变量

1. 下载Maven:访问Apache Maven官方网站(Download Apache Maven – Maven),选择适合你操作系统的二进制压缩包版本,点击下载。

2. 解压Maven:将下载的二进制压缩包解压到你想要安装Maven的目录下。例如,可以将解压后的文件夹放在"C:\Program Files\Maven"下面。

3. 添加Maven环境变量:

- 打开计算机的属性设置窗口(可以通过右键点击“此电脑/我的电脑”,然后选择“属性”打开窗口)。

- 在窗口左侧点击“高级系统设置”。

- 在弹出的窗口中点击“环境变量”按钮。

- 在“系统变量”部分找到“Path”变量,点击“编辑”按钮。

- 在弹出的对话框中,点击“新建”按钮,然后粘贴Maven的安装路径。例如,如果Maven解压在“C:\Program Files\Maven”目录下,那么将“C:\Program Files\Maven\bin”添加到“Path”中。

- 点击“确定”按钮保存更改。

4. 验证安装和配置:

- 打开命令提示符窗口(按下Win + R,输入“cmd”并点击“确定”)。

- 在命令提示符中输入“mvn -v”命令,如果成功显示Maven的版本信息,则表示安装和配置成功。

4.添加运行时对应的浏览器驱动

1. 选择合适的浏览器驱动:首先需要确定使用的浏览器,如Chrome、Firefox、Edge等。然后到相应的官方网站或驱动项目的GitHub页面上下载对应的浏览器驱动。

2. 下载对应的浏览器驱动:根据要使用的浏览器,在官方网站或驱动项目的GitHub页面上下载对应版本的驱动。以下是一些常用浏览器驱动的下载链接:

- ChromeDriver:https://sites.google.com/a/chromium.org/chromedriver/

- GeckoDriver(Firefox):GitHub - mozilla/geckodriver: WebDriver for Firefox

- WebDriver(Edge):Microsoft Edge WebDriver | Microsoft Edge Developer

3. 将浏览器驱动添加到系统路径中:将下载的浏览器驱动解压到一个适当的位置,并将该位置添加到系统的环境变量中,以便Selenium能够找到它。

- 找到环境变量设置:在Windows系统中,右键点击“此电脑”(或“我的电脑”),选择“属性”,然后点击左边的“高级系统设置”。

- 找到环境变量按钮:在“高级”选项卡下,点击“环境变量”按钮。

- 编辑系统的环境变量:在“系统变量”部分,找到名为“Path”的变量,并点击“编辑”按钮。

- 添加驱动路径:点击“新建”按钮,然后将浏览器驱动文件所在的文件夹路径添加到列表中。

4. 验证驱动是否安装成功:打开命令

5.配置pom.xml,添加依赖

selenium依赖:

  1. 浏览器驱动支持:Selenium依赖包含了各个主流浏览器的驱动程序,如Chrome Driver、Firefox Driver、Edge Driver等。这些驱动程序负责与浏览器进行交互,控制浏览器的行为,实现自动化测试。
  2. 其他浏览器特定依赖:Selenium支持不同类型的浏览器,每个浏览器可能需要特定的依赖。例如,要在Chrome浏览器中使用Selenium,需要引入Chrome浏览器驱动程序,并且系统中需要安装Chrome浏览器。
  3. 浏览器支持库:Selenium依赖中还包含了浏览器支持库,如WebDriver库、Chrome DevTools Protocol库等。这些库提供了与浏览器交互的API和功能,使得开发者可以通过代码控制浏览器,模拟用户操作。

testng依赖:

  1. 测试执行和管理:TestNG依赖包含了执行和管理测试的功能,包括测试套件、测试用例和测试方法的定义和组织,以及测试执行的顺序控制和失败重试机制等。通过引入TestNG依赖,开发者可以方便地创建和管理测试,并获得详细的测试报告。
  2. 参数化测试支持:TestNG提供了丰富的参数化测试支持,可以通过在测试方法上标注参数化注解,自动运行多组参数的测试用例,并生成详细的测试报告。通过引入TestNG依赖,开发者可以轻松实现参数化测试,提高测试用例的覆盖率和复用性。
  3. 并发测试支持:TestNG支持并行执行测试用例,可以同时在多个线程或多个虚拟机中执行测试,提高测试效率和速度。通过引入TestNG依赖,开发者可以简单地配置测试并发执行的方式和级别。
  4. 组件化测试支持:TestNG支持将多个测试类组织成测试组或测试套件,并可以定义测试组之间的依赖关系和执行顺序。通过引入TestNG依赖,开发者可以将测试用例按照逻辑关系进行组织和管理,提高测试的可维护性和可扩展性。

log4j依赖:

  1. 日志记录:Log4j依赖提供了强大的日志记录功能,可以将应用程序的运行日志输出到控制台或文件中。开发者可以使用Log4j的API,在应用程序中任意位置插入日志记录代码,记录程序的运行状态、错误信息等。
  2. 日志级别控制:Log4j支持不同的日志级别,如DEBUG、INFO、WARN、ERROR等。通过配置Log4j依赖,可以灵活地控制只输出指定级别及以上的日志信息,方便在不同的应用场景下开启或关闭日志输出。
  3. 日志格式化:Log4j依赖支持对日志信息进行格式化,开发者可以定义自己的日志格式,包括时间戳、日志级别、线程名、类名等。通过配置Log4j的布局,可以按照特定的格式输出日志信息,便于查看和分析。
  4. 日志输出目标管理:Log4j支持将日志信息输出到多个不同的目标,包括控制台、文件、数据库等。通过配置Log4j依赖,可以指定输出目标和目标的格式,灵活地进行日志管理和存储。
  5. 日志异步记录:Log4j支持异步记录日志,即将日志信息放入队列中,由单独的线程进行实际的写入操作,避免对应用程序的性能造成影响。

commons-email依赖

  1. 邮件发送:commons-email库提供了发送电子邮件的功能,可以方便地发送文本邮件、HTML邮件、带附件的邮件等。通过引入commons-email依赖,开发者可以使用其API来创建和发送电子邮件。
  2. 邮件格式化:commons-email库提供了丰富的格式化邮件内容的功能,包括设置邮件主题、发件人、收件人、抄送人、密送人等信息,以及设置邮件正文的内容和格式。
  3. 邮件附件:commons-email库支持发送带有附件的邮件,可以方便地添加和管理邮件的附件文件。通过引入commons-email依赖,开发者可以使用其API来添加附件文件,并发送包含附件的邮件。
  4. 邮件模板:commons-email库支持使用邮件模板来发送邮件,开发者可以定义邮件模板并填充动态数据,然后使用commons-email的API来发送包含动态数据的邮件。
  5. 邮件发送状态检查:commons-email库提供了发送邮件后的状态检查功能,可以查看邮件发送是否成功,并获取相关的错误信息。

TestNG是Java中的一个测试框架,是一个目前很流行实用的单元测试框架,有完善的用例管理模块,配合Maven能够很方便管理依赖第三方插件。使用TestNG可以做功能、接口、单元、集成的自动化测试,最常见的是结合selenium做功能自动化测试

一. 安装运行TestNG

Maven配置

在工程的pom.xml中需要添加如下依赖:

二、TestNG常用注解

注解

描述

@BeforeSuite

被注释的方法将在所有测试运行前运行(相当于前置条件)

@AfterSuite

被注释的方法将在所有测试运行后运行比如关闭浏览器(使执行其他用例时处于初始状态)

@BeforeTest

被注释的方法将在测试运行前运行

@AfterTest

被注释的方法将在测试运行后运行

@BeforeGroups

被配置的方法将在列表中的gourp前运行。这个方法保证在第一个属于这些组的测试方法调用

前立即执行

@AfterGroups

被配置的方法将在列表中的gourp后运行。这个方法保证在最后一个属于这些组的测试方法调

用后立即执行

@BeforeClass

被注释的方法将在当前类的第一个测试方法调用前运行,且只执行一次,通常用来为后面测试方法的准备工作,如加载配置、进行数据库的连接等

@AfterClass

被注释的方法将在当前类的所有测试方法调用后运行,注解修饰的方法(该方法要用static修饰)会在所有方法执行结束后执行一次,且也只执行一次,通常用来对资源进行释放,比如数据库连接的关闭等,无论测试用例里的其他方法有没有抛出异常,该方法最终都会被执行。

@BeforeMethod

被注释的方法将在每一个测试方法调用前运行

@AfterMethod

被注释的方法将在每一个测试方法调用后运行

@DataProvider

标记一个方法用于为测试方法提供数据。 被注释的方法必须返回Object[][],其中每个Object[]

可以指派为这个测试方法的参数列表。从这个DataProvider接收数@Test方法需要使用一个和

当前注释相同名称的dataProvider名称

@Factory

标记方法作为一个返回对象的工厂, 这些对象将被TestNG用于作为测试类。这个方法必须返回

Object[]

@Listeners

定义一个测试类的监听器

@Parameters

描述如何传递参数给@Test方法

@Test

表示此注解的方法会被认定为是一个测试方法,即一个测试用例

备注:

Before开头的注解一般用于初始化环境、 准备测试环境

after开头的注解一般用于执行测试的环境清理工作

DataProvider一般用作参数化用的, 属于数据驱动自动化(即不同的测试数据测试相同的测试逻辑)

Listeners 自定义日志或者监控一些testNG用例执行成功或者失败的时候做些特别的事情

三、TestNG常用断言

assertEqual ([String message], expected value, actual value) 断言两个值相等

byte, char or java.lang.Object. 第一个参数是一个可选的字符串消息;

assertTrue([String message], boolean condition) 断言一个条件为真;

assertFalse([String message],boolean condition) 断言一个条件为假;

assertNotNull([String message], java.lang.Object object) 断言一个对象不为空(null);

assertNull([String message], java.lang.Object object) 断言一个对象为空(null);

assertSame([String message], java.lang.Object expected, java.lang.Object actual) 断言两个对象引用相同的对象;

assertNotSame([String message], java.lang.Object unexpected, java.lang.Object actual) 断言两个对象不是引用同一个对象;

assertArrayEquals([String message], expectedArray, resultArray) 断言预期数组和结果数组相等

示例代码如下:

四、使用maven运行

需要在pom文件中,指明testng.xml文件的位置。

五、TestNG忽略测试

通过注解@Test(enabled = false)来将其忽略掉,此用例就不会运行了,示例代码如下:

六、TestNG超时测试

超时”表示如果单元测试花费的时间超过指定的毫秒数,那么TestNG将会中止它并将其标记为失败。示例代码如下:

七、分组测试

顾名思义,是将不同的用例分组,然后再testng.xml文件中配置信息,而执行相应组的用例,示例代码如下:

testng.xml文件配置如下:

八、自定义执行顺序测试

按照一定的顺序去执行测试方法, 通过priority属性去设 置,如下代码实现:

执行顺序为print1--->print2--->print3--->print4--->print5

还可以在testng.xml文件中设置,设置如下:

九、参数化测试

TestNG可以通过两种不同的方式将参数直接传递给测试方法:

下面分别介绍两种传参方式

1、使用textng.xml传送参数

范例代码如下:

xml配置:

2、使用@DataProvider传递参数

复杂参数一般使用@DataProvider传递,传参的类型必须要一致,且带有@DataProvider注解的函数返回的必然是Object[][]

示例代码如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值