如何使用Java基于Selenium实现RestAssured API与UI框架的集成
Java+Maven栈下RestAssured侧调用Selenium UI框架实现方案
1. 前置Maven依赖配置
<!-- RestAssured 依赖 --> <dependency> <groupId>io.rest-assured</groupId> <artifactId>rest-assured</artifactId> <version>5.3.0</version> <scope>test</scope> </dependency> <!-- Selenium 依赖 --> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>4.9.1</version> </dependency> <!-- 测试框架可选TestNG/JUnit --> <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>7.7.1</version> <scope>test</scope> </dependency>
2. 核心实现逻辑
RestAssured和Selenium都运行在同一个Java进程内,无需跨服务调用,直接在API测试的执行链路中嵌入Selenium的操作逻辑即可,核心步骤如下:
- 先封装Selenium UI公共操作工具类,统一管理WebDriver的初始化、销毁、常用页面操作,推荐用
ThreadLocal存储WebDriver实例,适配多线程用例执行场景,避免实例冲突 - 在RestAssured的API测试用例中,按需调用封装好的Selenium工具类方法即可,比如API侧创建完数据后,直接唤起浏览器访问前端页面校验数据展示效果
3. 代码示例
// Selenium工具类封装 public class SeleniumUtil { private static ThreadLocal<WebDriver> driverThreadLocal = new ThreadLocal<>(); // 初始化浏览器 public static WebDriver initDriver() { WebDriver driver = new ChromeDriver(); driver.manage().window().maximize(); driverThreadLocal.set(driver); return driver; } // 获取当前线程的driver实例 public static WebDriver getDriver() { return driverThreadLocal.get(); } // 销毁浏览器实例 public static void quitDriver() { if (getDriver() != null) { getDriver().quit(); driverThreadLocal.remove(); } } } // API+UI集成测试用例 public class Api2UiTest { @Test public void testCreateDataAndCheckUi() { // 第一步:调用RestAssured发起API请求创建数据 String createDataId = given() .contentType("application/json") .body("{\"name\":\"测试数据\"}") .when() .post("/api/data/create") .then() .statusCode(200) .extract() .path("data.id"); // 第二步:调用Selenium UI框架校验前端展示 SeleniumUtil.initDriver(); WebDriver driver = SeleniumUtil.getDriver(); driver.get("http://前端页面地址/" + createDataId); // 校验数据是否正常展示 String showName = driver.findElement(By.id("data-name")).getText(); assert showName.equals("测试数据"); // 销毁浏览器实例 SeleniumUtil.quitDriver(); } }
注意:如果不需要每次用例都重新启动浏览器,可以调整WebDriver的生命周期管理逻辑,比如整套用例执行完再销毁实例,减少执行耗时
内容的提问来源于stack exchange,提问作者Pavani
相关产品推荐
相关产品推荐

