Selenium执行功能步骤后发送API GET请求的实现方案咨询
混合UI+API校验实现方案
完全可以在Selenium完成指定UI操作后插入API校验逻辑,这种混合测试方案在Cucumber+JUnit的BDD框架中适配性很高,刚好可以解决你部分校验节点无UI访问权限的问题。Java生态下推荐搭配RestAssured库实现API请求的发送与结果校验,和现有框架的集成成本极低。
实现前提
先在项目的pom.xml(Maven)或build.gradle(Gradle)中引入RestAssured依赖,Maven示例:
<dependency> <groupId>io.rest-assured</groupId> <artifactId>rest-assured</artifactId> <version>5.3.0</version> <scope>test</scope> </dependency>
具体实现流程
你可以直接按照你梳理的3步校验逻辑封装代码,和已有的Selenium UI操作步骤完全解耦:
- 步骤1:发送搜索POST请求,提取previewLink
发送POST请求后解析响应JSON,直接提取目标字段即可,参考代码示例:// 从测试上下文获取你上传的资产路径/名称作为搜索入参 String searchBody = "{\"keyword\":\"download.jpg\"}"; String previewLink = given() .contentType(ContentType.JSON) .body(searchBody) // 可从Selenium driver中提取登录态cookie塞到请求里,避免重复登录 .cookies(driver.manage().getCookies().stream().collect(Collectors.toMap(Cookie::getName, Cookie::getValue))) .when() .post("你的搜索接口地址") .then() .statusCode(200) .body("status.success", equalTo(true)) .extract() .path("hits[0].previewLink"); - 步骤2:使用previewLink发送GET请求
直接用提取到的previewLink发请求即可:Response assetResponse = given().when().get(previewLink); - 步骤3:校验资产是否存在
可以根据资产类型选择校验规则,图片类资产可以参考以下校验逻辑:// 校验请求返回状态码为200 assetResponse.then().statusCode(200); // 校验返回内容类型为图片类型 Assert.assertTrue(assetResponse.getContentType().contains("image/")); // 如需强校验内容一致性,可对比返回内容的MD5和本地原文件的MD5是否一致
和Cucumber BDD框架的集成建议
你可以把上述API校验逻辑封装成通用的Cucumber步骤,直接在feature文件中和UI步骤串联使用,示例feature片段:
Scenario: 上传资产后校验所有第三方应用同步成功 Given 我登录到资产管理系统 When 我上传资产download.jpg并完成发布 Then 第三方应用A的UI上存在资产download.jpg # 这步用Selenium实现UI校验 Then 无UI的第三方应用B上存在资产download.jpg # 这步用上述API逻辑实现校验
注意事项
- 资产同步到第三方应用存在一定延迟,建议给API校验增加轮询机制,最多轮询10~30秒,每隔2秒请求一次,直到获取到预期结果或者超时,避免同步延迟导致的用例偶发失败
- 所有测试数据比如资产名称、路径都存在Cucumber的测试上下文中即可,不要硬编码,提高用例的可复用性
- 如果API请求有独立的鉴权逻辑,也可以单独封装API登录的工具方法,不用复用Selenium的登录态
内容的提问来源于stack exchange,提问作者Nagaraju
相关产品推荐
相关产品推荐

