使用Java+Maven+TestNG进行自动化测试

本文介绍了Java基础知识,重点讲解了TestNG自动化测试框架,包括其特点、注解及其在项目中的应用,以及如何通过Maven搭建TestNG项目,创建测试类和方法,以及不同方式运行测试。还探讨了实际项目中的测试结构和常见测试场景的扩展。
摘要由CSDN通过智能技术生成

写作背景:有点Java基础的功能测试人员(点点点工程师),所在项目有"去QE"的趋势,所以自己要多点亮其他技能,让路子走宽点。
简单说一下去QE:项目测试不再有专职的测试工程师来做,而是由开发工程师自己来进行。遵循“谁开发、谁测试、谁上线、谁On call”的原则。

一、Java、TestNG、JSONAssert都是什么

1.1、Java基础教程

我先复习Java的基本简介、语法、写法、使用。参考资料

  • 安装java 开发工具包:JDK8 或更高版本
  • 配置环境变量
  • 安装java开发工具:IDEA
  • Java基本语法:对象、类、实例、方法、实例变量、标识符【类名| 变量名| 方法名】、修饰符【用于修饰类中方法和属性】、变量【局部变量| 类变量/静态变量| 成员变量/非静态变量】、数组、枚举、关键字、注释、空行、继承、接口。
  • Java命名规范:大小写敏感、类名首字母大写的驼峰式、方法名首字母小写的驼峰式、源文件名必须和类名相同
  • Java基本概念:多态、集成、封装、抽象、类、对象、实例、方法、重载等等
  • Java基本类型(八种):byte、short、int、long、float、double、boolean、char
  • Java的运算符、循环结构、条件语句、switch case、Number & Math 类、Character 类、String 类、StringBuffer 和 StringBuilder 类、数组、日期时间、正则表达式、方法、流(Stream)、文件(File)和IO、Scanner 类、异常处理等等
  • Java的数据结构、集合框架、ArrayList、LinkedList、HashSet、HashMap、Iterator(迭代器)、Object 类、泛型、序列化等等
  • Java的网络编程、发送邮件 、多线程编程 、Applet 基础、文档注释、实例等等
1.2、TestNG
  • TestNG基本解释:(即Testing,Next Generation,即下一代测试技术)是Java中的一个开源自动化测试框架。它的灵感来源于JUnit。它的目的是优于JUnit,尤其是在用于测试集成多类时。它借鉴了Java的注解。它旨在涵盖所有类别的测试:单元,功能,端到端,集成等…
    详细使用说明请参考:TestNG官方链接
  • TestNG基本特点:【注解】、【使用Java面向对象的功能】、【支持综合类测试】、【独立的编译时代码自检审核和运行时配置/数据信息】、【支持编译测试不同优先级、不同类别的用例】、【灵活的插件API】、【支持多线程测试】等
  • 使用注解的好处:
    a、TestNG通过查找注释/注解来识别它感兴趣的方法。 因此,方法名称不限于任何模式或格式
    b、可以将其他参数传递给注释。
    c、注释是强类型的,所以编译器会马上标记任何错误。
    d、测试类不再需要扩展任何东西(如TestCase,对于JUnit3)。
1.3、TestNG支持的注释列表:
注解描述
@BeforeSuite             在该套件的所有测试都运行在注释的方法之前,仅运行一次。
@AfterSuite在该套件的所有测试都运行在注释方法之后,仅运行一次。
@BeforeClass在调用当前类的第一个测试方法之前运行,注释方法仅运行一次。
@AfterClass在调用当前类的第一个测试方法之后运行,注释方法仅运行一次
@BeforeTest注释的方法将在属于<test>标签内的类的所有测试方法运行之前运行。
@AfterTest注释的方法将在属于<test>标签内的类的所有测试方法运行之后运行。
@BeforeGroups配置方法将在之前运行组列表。 此方法保证在调用属于这些组中的任何一个的第一个测试方法之前不久运行。
@AfterGroups此配置方法将在之后运行组列表。该方法保证在调用属于任何这些组的最后一个测试方法之后不久运行。
@BeforeMethod注释方法将在每个测试方法之前运行。
@AfterMethod注释方法将在每个测试方法之后运行。
@DataProvider标记一种方法来提供测试方法的数据。注释方法必须返回一个Object [] [],其中每个Object []可以被分配给测试方法的参数列表。DataProvider接收数据的@Test方法需要使用与此注释名称相等的dataProvider名称。
@Factory将一个方法标记为工厂,返回TestNG将被用作测试类的对象。 该方法必须返回Object []
@Listeners定义测试类上的监听器。
@Parameters描述如何将参数传递给 @Test 方法。
@Test将类或方法标记为测试的一部分。
1.4、JSONAssert
  • 将字符串转换为JSON对象,并将逻辑结构和数据与实际JSON进行比较。一个专注于理解 JSON 数据并使用该数据编写复杂 JUnit 测试的库。
  • 当strict(严格模式)设置为false(推荐设置)时,它会允许数据重排序以及结果可扩展(只要对比的JSON包含了所有预期JSON的所有字段),从而使测试不那么脆弱。建议关掉严格模式,除非你要求比较的JSON与预期的JSON中数组顺序相同,或者要求两者具有相同的字段。
/**
 * Asserts that the JSONObject provided matches the expected string.  If it isn't it throws an
 * {@link AssertionError}.
 *
 * @param expectedStr Expected JSON string
 * @param actual JSONObject to compare
 * @param strict Enables strict checking
 * @throws JSONException JSON parsing error
 */
public static void assertEquals(String expectedStr, JSONObject actual, boolean strict)
        throws JSONException {
    assertEquals(expectedStr, actual, strict ? JSONCompareMode.STRICT : JSONCompareMode.LENIENT);
}

二、搭建框架(创建maven项目,配置testng依赖)

2.1、创建普通maven项目即可

2.2、在pom.xml中配置依赖
<dependencies>
    <dependency>
        <groupId>org.testng</groupId>
        <artifactId>testng</artifactId>
        <version>${testng.version}</version>
    </dependency>
</dependencies>

2.3、下载依赖(pom文件重新加载项目)

三、创建Demo测试类和方法

直接复制官网中的simple:

package com.demo.apitest.testcase;

import org.testng.annotations.*;

public class DemoTest {

    @BeforeClass
    public void setUp() {
        // code that will be invoked when this test is instantiated
    }

    @Test(groups = {"fast"})
    public void aFastTest() {
        System.out.println("Fast test");
    }

    @Test(groups = {"slow"})
    public void aSlowTest() {
        System.out.println("Slow test");
    }
}

四、两种方式运行(直接运行、xml方式运行)

4.1、直接运行

直接运行

4.2、xml方式运行

IDEA创建的项目默认不会生成testng.xml(用于控制测试执行的执行)文件,就需要在根目录手动创建该文件,同时需要在pom.xml文件中关联设置testng.xml。testng.xml写法参考官网:官网中testng.xml
基本格式如下:

  • 每一个xml文件只能有一个suite,代表的是一个测试集;
  • 一个suite中可包含多个test,默认情况下,多个test会顺序执行。若希望多个test以不可预知的顺序运行,可将preserve-order 属性设置为false;
  • 每一个test里边可以写需要运行的测试用例的class。如果不写,默认会跑所有的测试用例;
  • 每个class可以指定要执行哪些用例,不执行哪些用例。如果不写method,则默认本类里的全部用例都执行。
    新建testng.xml
    pom文件中关联testng.xml
    xml方式运行

五、实际应用中的常见用例写法

常见项目结构

├── src
│    ├── main
│    │    ├── java
│    │    │     └── com.demo.apitest           # 框架公共服务模块
│    │    │             └── annotations              # 注释
│    │    │             └── api                      # 后端接口定义
│    │    │             └── enums                    # 枚举
│    │    │             └── model                    # Model
│    │    │             └── service                  # 公共方法
│    │    │             └── utils                    # 公共工具方法
│    │    └── resources                              
│    │          ├── driver                           # selenium的chrome驱动,用于本地登陆获取cookie
│    │          └── application.yml                  # 配置文件
│    └── test
│         ├── java
│         │     ├── com.demo.apitest           # 框架公共服务模块
│         │     │      └── testcase                  # 接口测试脚本
│         │     └── MyBaseTestNg.java                # testng基础测试类,所有测试脚本的父类
│         └── resources                              
│               └── testdata                         # 接口测试数据
└── testng.xml                                 # testng测试套件配置

延伸下,在src.main.resources 目录下可创建一个 application .yml文件,用于配置公共参数,普通类型参数可使用 @value注解获取,list类型参数可使用@ConfigurationProperties注解获取

/ / T o D o L i s t 待补充 \color{red}{//ToDoList待补充} //ToDoList待补充

六、扩展:TestNG的常见测试场景

  • 预期异常测试
  • 忽略测试
  • 超时测试
  • 分组测试
  • 套件测试(一起运行多个测试类)
  • 依赖测试
  • 参数化测试
  • 参数测试实例
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

涅槃Ls

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值