一、环境安装
环境搭建安装见此博客文章链接:https://blog.csdn.net/qq_73471456/article/details/130836494
二、元素定位、等待方式
见此之前的博客文章:selenium操作使用方式
三、下拉框定位
四、iframe 切换元素定位
注意事项:连续定位2个iframe
五、Junit单元测试框架
Junit框架见此博客文章:https://blog.csdn.net/qq_73471456/article/details/130856929
六、Allure测试报告
Allure测试报告有以下好处:
1.它提供了一个直观的、易于阅读的报告界面,可以方便地査看测试结果和统计数据。
2.报告界面具有交互性,可以通过图表和图形化界面快速检索问题和错误。
3.它能够提供丰富的测试数据分析,包括用例执行时间、失败率、通过率等等
4.支持多种编程语言和框架,如Java、Python、Ruby、PHPUnit等,
5.与各种CI/CD工具集成,如Jenkins、TeamCity、Bamboo等。
6.可以生成历史记录报告,并支持跨团队共享。
7.向所有相关人员提供清晰的测试结果,减少沟通,提高团队协作效率。
8.支持自定义插件,可扩展性强。
官方:https://docs.gameta.io/allure-report/
Allure安装配置
第一步:安装Java的JDK环境(推荐1.8版本)
第二步:安装Allure
- 下载commandline地址:https://repo1.maven.org/maven2/io/qameta/allure/allure-commandline/
(1) mac/linux: 下载tar
(2) windows: 下载 zip下载commandline包后,放在c盘或者d盘某个目录下面并解压
- 配置环境变量:解压后将 bin 目录加入PATH环境变量
安装贴子:https://ceshiren.com/t/topic/3386
检测allure有没有安装好(win+r:输入cmd): allure --version
Allure使用生产测试报告
Allure配置依赖+pon.xml
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>RELEASE</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest</artifactId>
<version>2.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.qameta.allure</groupId>
<artifactId>allure-junit5</artifactId>
<version>2.13.6</version>
<scope>test</scope>
</dependency>
</dependencies>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<aspectj.version>1.8.10</aspectj.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M5</version>
<configuration>
<includes>
<include>**/*Test.java</include>
</includes>
</configuration>
</plugin>
</plugins>
</build>
在pom.xml中打开终端
举例
详细包名.类名为com.Test01
定制Allure
@Epic("这是一个大模块注解")
@Feature("这是子模块1注解")
七、关键字封装
作用:项目中经常要做的操作,可以提前封装,使用的时候,直接调用函数即可。
访问 下拉框 iframe 等待 关闭
selenium自动加载浏览器驱动依赖:
<dependency>
<groupId>io.github.bonigarcia</groupId>
<artifactId>webdrivermanager</artifactId>
<version>4.4.1</version>
</dependency>
封装登录不同浏览器的代码示例:
八、PO设计模式
Page Object也就是PO,也可以叫POM,是Selenium自动化测试项目主流的设计模式之一。
该模式将一个 Web项目分解为多个页面对象,每个页面对象代表程序中的一个页面或者一个独立的 UI 组件。通过封装页面元素和方法,可以实现对页面对象的访问和操作。
PageObject设计模式:是将某个页面的所有"元素(包含控件)属性"及"元素操作"封装在1个类(Class)里面。若元素定位发生变化,只需要调整这个类中的代码。
举个例子:拿商城系统来说,商城系统流程为登录-选择商品-添加购物车-下单-支付
现在使用PO模式来设计:登录类来封装登录页面操作相关的,商品类来封装商品页面操作相关的,购物车类来封装购物车页面操作相关
好处:通过对界面元素的封装减少冗余代码,在后期维护中,若元素定位发生变化,只需调整页面元素封装的代码,提高测试用例的可维护性。
九、TestNg测试框架
Testng是一套开源测试的单元测试框架。它的灵感来源于JUnit,它的目的是优于JUnit。
TestNG和JUnit都是Iava中常用的单元测试框架,二者的共同点包括
1.都是基于注解的测试框架
2.都可以对Java代码进行单元测试
3.都支持断言机制
TestNG比Junit的优点如下:
1.TestNG支持更多的注解:@BeforeGroups、@AfterGroups等
2.TestNG支持并行测试,在测试大量数据时运行速度更快
3.TestNG可以在xml文件中配置测试用例,并且可以实现测试用例的分组执行,批量执行等功能
4.TestNG支持更多的参数化方法,比如@DataProvider;
5.TestNG可以在报告中生成时间轴图表,方便测试结果的分析。
TestNG环境依赖准备
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.14.3</version>
<scope>test</scope>
</dependency>
TestNG注解
@BeforeSuite 在该套件的所有测试都运行在注释的方法之前,仅运行一次
@AfterSuite 在该套件的所有测试都运行在注释方法之后,仅运行一次
@BeforeClass 在调用当前类的第一个测试方法之前运行,注释方法仅运行一次
@AfterClass 在调用当前类的第一个测试方法之后运行,注释方法仅运行一次
@BeforeTest 注释的方法将在属于test标签内的类的所有测试方法运行之前运行
@AfterTest 注释的方法将在属于test标签内的类的所有测试方法运行之后运行
@BeforeMethod 注释方法将在每个测试方法之前运行
@AfterMethod 注释方法将在每个测试方法之后运行
@DataProvider 标记一种方法来提供测试方法的数据。 注释方法必须返回一个object[ ][ ],其中每个object[ ]可以被分配给测试方法的参数列表。 要从该DataProvider接收数据的@Test方法需要使用与此注释名称相等的dataProvider名称
@Factory 将一个方法标记为工厂,返回TestNG将被用作测试类的对象。该方法必须返回object[ ]
testng层级管理
BeforeSuite > BeforeTest > BeforeClass > BeforeMethod
TestNg运行方式
1.直接右键运行
2.xml方式运行,IDEA可以右键新建testng.xml来运行,在文件名和文件内部点击均可(具体操作方法自行百度)
(1)IDEA创建的项目默认不会生成testng.xml(用于控制测试执行的执行)文件,就需要在根目录手动创建该文件。
(2)同时需要在pom.xml文件中关联设置testng.xml
(3)testng.xml可以安装testng插件
TestNG 断言
TestNG 断言是用于对测试结果进行验证的方法,可以判断测试是否通过或失败。TestNG 提供了一组方便易用的断言方法,可以在测试中使用。
1.assertEquals(Object expected, Object actual):判断两个对象是否相等,如果不相等则抛出AssertionError异常,并输出错误信息。
2. assertTrue(boolean condition):判断给定条件是否为 true,如果不为 true 则抛出 AssertionError 异常,并输出错误信息。
忽略测试注解@Ignore
用例执行顺序@Test( priority = ?)
超时注解@Test(timeOut = ?)
timeOut的属性的单位为毫秒
依赖测试注解@Test(dependsOnMethods={"测试方法名"})
TestNG并行测试
并行是指同时运行多个测试用例来提高测试效率。可以通过设置testng.xml配置文件中的“parallel”属性来启用并发测试。
@DataProvider 参数化注解
@DataProvider注解必须和@test注解一起使用,不然没有任何意义
1、创建一个方法,方法的返回值必须是object[][] 或者object[]、lteraTor<object[]>的,在方法上加上@dataProvider注解
DataProvider的用途是:
(1)在执行用例的时候dataProvider迭代每组数据都是作为一个用例执行
(2)在测试数据有规律的情况下,免去了添加testXML测试数据的烦恼,直接将测试数据,按个或者组,放到dataProvider中即可
(3)注意:dataProvider作为数据提供者只能返回0bject和lteraTor<object[]>类型的数据。
1.定义一个函数,函数名随意取,使用@DataProvider注解,给provider取名字,该函数返回一个二维数组
2.使用参数时,用例中,带上name名