TestNG + 数据库 + 断言 1. pom.xml 依赖全覆盖xmldependencies dependency groupIdorg.testng/groupId artifactIdtestng/artifactId version7.8.0/version scopetest/scope /dependency !-- MySQL -- dependency groupIdcom.mysql/groupId artifactIdmysql-connector-j/artifactId version8.0.33/version /dependency !-- Oracle -- dependency groupIdcom.oracle.database.jdbc/groupId artifactIdojdbc8/artifactId version21.1.0.0/version /dependency !-- PostgreSQL -- dependency groupIdorg.postgresql/groupId artifactIdpostgresql/artifactId version42.6.0/version /dependency !-- SQL Server -- dependency groupIdcom.microsoft.sqlserver/groupId artifactIdmssql-jdbc/artifactId version12.4.0.jre11/version /dependency /dependencies2. 数据库连接工具类你只改这里 4 行DBUtil.javajava运行import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; public class DBUtil { // 你只改这 4 行 private static final String DB_TYPE mysql; // mysql/oracle/pg/sqlserver private static final String IP localhost; private static final String DB_NAME testdb; private static final String USER root; private static final String PASSWORD 123456; // private static String getUrl() { return switch (DB_TYPE) { case mysql - jdbc:mysql:// IP :3306/ DB_NAME ?useSSLfalseserverTimezoneUTC; case oracle - jdbc:oracle:thin:// IP :1521/ DB_NAME; case pg - jdbc:postgresql:// IP :5432/ DB_NAME; case sqlserver - jdbc:sqlserver:// IP :1433;databaseName DB_NAME ;encryptfalse; default - throw new RuntimeException(不支持的数据库); }; } public static Connection getConnection() { try { Connection conn DriverManager.getConnection(getUrl(), USER, PASSWORD); System.out.println(✅ 数据库连接成功); return conn; } catch (Exception e) { e.printStackTrace(); return null; } } public static void close(Connection conn, PreparedStatement pstmt, ResultSet rs) { try { if (rs ! null) rs.close(); if (pstmt ! null) pstmt.close(); if (conn ! null) conn.close(); System.out.println(✅ 资源已关闭); } catch (Exception e) { e.printStackTrace(); } } }3. TestNG 数据库断言测试类最常用 5 种断言DbAssertTest.javajava运行import org.testng.Assert; import org.testng.annotations.AfterTest; import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; public class DbAssertTest { private Connection conn; BeforeTest public void connect() { conn DBUtil.getConnection(); } // 数据库断言核心 Test public void testDataFromDB() { String sql SELECT username, age, status FROM user WHERE id?; // 改你的SQL try (PreparedStatement pstmt conn.prepareStatement(sql)) { pstmt.setInt(1, 1001); // 参数 ResultSet rs pstmt.executeQuery(); if (rs.next()) { // 1. 相等断言 Assert.assertEquals(rs.getString(username), zhangsan, 用户名错误); // 2. 数字断言 Assert.assertEquals(rs.getInt(age), 25, 年龄错误); // 3. 非空断言 Assert.assertNotNull(rs.getString(username), 用户名不能为空); // 4. 布尔/状态断言 Assert.assertEquals(rs.getInt(status), 1, 状态必须为启用); // 5. 真/假断言 Assert.assertTrue(rs.getInt(age) 18, 年龄必须大于18); } else { Assert.fail(❌ 未查询到数据); } } catch (Exception e) { e.printStackTrace(); Assert.fail(❌ 数据库执行失败 e.getMessage()); } } AfterTest public void close() { DBUtil.close(conn, null, null); } }