Serenity框架执行Rest请求时遇FieldsRecordingFilter运行时错误求助
我在Serenity框架中运行以下Rest请求代码时,遇到了一个运行时异常:
Response authenticationResponse = SerenityRest.given() .relaxedHTTPSValidation() .header("Cookie", **Validvalue**) .queryParam("response_type", "code") .queryParam("state", "nothing") .queryParam("client_id", **Validvalue**) .queryParam("scope", "openid") .queryParam("redirect_uri", "http%3A%2F%2Flocalhost%3A4200%2Flogin%2Fsuccess") .get("https://account.tst.com/auth");
抛出的错误信息如下:
Some exception during recording fields java.lang.RuntimeException: Some exception during recording fields at net.serenitybdd.rest.filters.FieldsRecordingFilter.filter(FieldsRecordingFilter.java:52) at io.restassured.filter.Filter$filter.call(Unknown Source)
结合经验,给你几个可行的解决方案:
1. 直接禁用FieldsRecordingFilter
这个异常的根源是Serenity内置的字段记录过滤器在处理请求时出了问题。最简单的解决办法就是直接禁用这个过滤器:
在你的Serenity配置文件(serenity.properties或serenity.conf)中添加以下配置:
serenity.rest.filter.fields.recording.enabled=false
添加后重启测试,应该就能绕过这个异常了。
2. 检查依赖版本兼容性
这类问题很多时候是Serenity和RestAssured的版本不匹配导致的。确保你的项目中serenity-core和serenity-rest-assured的版本完全一致,并且是官方推荐的稳定版本。比如在Maven的pom.xml里统一版本号:
<dependency> <groupId>net.serenity-bdd</groupId> <artifactId>serenity-core</artifactId> <version>3.9.2</version> <!-- 替换为最新稳定版本 --> <scope>test</scope> </dependency> <dependency> <groupId>net.serenity-bdd</groupId> <artifactId>serenity-rest-assured</artifactId> <version>3.9.2</version> <!-- 和core版本保持一致 --> <scope>test</scope> </dependency>
3. 简化请求定位问题
先把请求简化,逐步排查是哪个参数或配置触发了异常。比如暂时移除Cookie头或者relaxedHTTPSValidation(),看看请求能否正常运行:
Response authenticationResponse = SerenityRest.given() .queryParam("response_type", "code") .queryParam("state", "nothing") .queryParam("client_id", **Validvalue**) .queryParam("scope", "openid") .queryParam("redirect_uri", "http%3A%2F%2Flocalhost%3A4200%2Flogin%2Fsuccess") .get("https://account.tst.com/auth");
如果简化后请求正常,再逐个加回参数。比如发现是Cookie导致的问题,那可以考虑手动调整Cookie格式,或者结合第一个方案禁用过滤器。
4. 升级到最新Serenity版本
这个FieldsRecordingFilter的异常可能是框架的已知bug,后续版本已经修复。建议你升级到Serenity BDD的最新稳定版本,查看官方更新日志确认是否有相关修复记录。
内容的提问来源于stack exchange,提问作者sridhar sekar

