测试开发面试题一:Java和testNg

6 阅读4分钟

一、TestNG 相关标准答案

  1. TestNG 常用注解有哪些?@BeforeSuite/@AfterSuite@BeforeTest/@AfterTest@BeforeClass/@AfterClass@BeforeMethod/@AfterMethod@Test@DataProvider@Parameters@Listeners。用于分层初始化、数据驱动、用例分组、依赖执行、失败重试等。
  2. TestNG 和 JUnit 区别?
  • TestNG 支持依赖测试、分组执行、并发执行、失败重试、更灵活的生命周期
  • 支持通过 xml 统一管理套件,更适合自动化项目规模化使用
  • JUnit 更轻量,偏单元测试;TestNG 更适合自动化测试框架
  1. 数据驱动 @DataProvider 怎么用?
  • 定义一个返回 Object[][] 的方法,加上 @DataProvider(name="xxx")
  • 测试方法用 @Test(dataProvider = "xxx") 关联。
  • 可以对接 Excel、CSV、数据库,实现外部数据驱动。
  1. TestNG 失败用例自动重试怎么实现?
  • 实现 IRetryAnalyzer 接口,重写 retry 方法。
  • 自定义 Listener 或在 @Test 中指定 retryAnalyzer
  • 达到失败自动重跑、减少偶发失败误报。
  1. TestNG 报告优化怎么做?
  • 默认报告太简单,一般集成 AllureExtentReport
  • 通过监听器拦截用例结果,添加步骤、截图、日志,生成可视化报告。

二、Java + 测开基础标准答案

  1. 接口自动化如何封装?
  • 封装统一 HTTP 工具类(RestAssured/OkHttp)。
  • 全局处理请求头、Token、超时、日志、加解密。
  • 封装通用断言、返回体校验、异常捕获。
  • 用 POJO 接收响应,方便字段断言。
  1. Java 反射 / 注解在测开中的用途?
  • 反射:动态执行用例、读取类信息、初始化对象、调用方法。
  • 注解:自定义用例标记(用例等级、业务模块),配合监听器实现扩展功能。
  1. 自动化用例不稳定怎么处理?
  • 增加显式等待,避免强制等待。
  • 用例之间数据隔离、环境隔离
  • 加入失败重试机制
  • 日志、截图、录屏全量留存,便于定位偶发问题。
  1. 如何做接口依赖(登录→下单→支付)?
  • 使用 dependsOnMethods 控制执行顺序。
  • 提取公共前置方法(@BeforeMethod/@BeforeClass)。
  • 用 ThreadLocal 保存上下文,避免用例间相互污染。
  1. 如何实现分布式 / 多线程执行?
  • TestNG 支持 parallel 属性实现多线程。
  • 结合 Jenkins + 多节点分布式执行。
  • 用例无依赖、无共享数据,才能安全并发。
  1. Java+testNg框架是怎么管理的
  • 我们的 Java+TestNG 框架是基于 Maven 构建的,采用分层封装结构,通过 TestNG.xml 管理测试套件和用例执行,使用注解控制用例生命周期,结合数据驱动、监听器实现失败重试和 Allure 报告,最后通过 Jenkins 做持续集成,整体做到配置分离、易于维护和扩展。
  • 按包结构分层:
    • constant:常量、枚举
    • util:工具类(HTTP、Excel、加密、日志)
    • pojo:实体类,接口返回对象映射
    • testcase:测试用例类
    • listener:自定义监听器
    • config:全局配置文件
  • 用例管理
    • 通过 TestNG.xml 管理测试套件、分组、线程数、执行顺序。
    • @Test 标记用例,支持分组 groups、依赖 dependsOnMethods、优先级 priority
    • @DataProvider 做数据驱动,支持 Excel、YAML、数据库数据源。
  • 生命周期与前置后置管理
    • 使用 @BeforeSuite 做全局初始化(加载配置、登录获取 token)。
    • @BeforeClass/@BeforeMethod 做类级别、方法级别的准备。
    • @AfterMethod 做用例后置处理、日志收尾。

三、实战场景题标准答案

  1. 偶发缺陷怎么处理?
  • 第一时间保留现场日志、抓包、截图、操作步骤
  • 标记复现概率、环境信息,提交规范缺陷。
  • 长时间遍历、边界场景、多设备 / 网络复现。
  • 配合开发抓堆栈、看监控,定位根因。
  • 修复后重点回归,多次验证,闭环。
  1. 你们自动化体系是什么样的?
  • Java + TestNG + RestAssured 做接口自动化。
  • PageObject 模式做 UI 自动化。
  • Jenkins 定时构建、自动执行、发送报告。
  • 用例统一管理,接入 Allure 展示结果。
  1. 自动化如何落地产生价值?
  • 替代大量回归手工测试,缩短发布周期
  • 每日回归快速发现问题,降低线上故障。
  • 统一测试流程,提升团队效率和产品质量。
  1. 一万条用例如何管理?
  • 按模块分组,按优先级标记。
  • 核心用例每次必跑,非核心用例定时执行。
  • 分布式执行 + 多线程,提升执行速度。
  • 沉淀用例库,持续维护,淘汰失效用例。

四、自我介绍可直接用的结尾(加分)

我主要负责测试平台与自动化框架开发,基于 Java + TestNG 搭建过接口自动化体系,实现用例管理、自动执行、失败重试、可视化报告与 Jenkins 持续集成,能够有效提升回归效率,保障版本质量。