restassured[报错]Cannot determine which path implementation to use because the content-type text/plain

问题描述:

rest-assured -使用response.path(“xxx”).toString()方法报错
报错信息如下:

java.lang.IllegalStateException: Cannot determine which path implementation to use because the content-type text/plain;charset=UTF-8 doesn't map to a path implementation.

	at io.restassured.internal.RestAssuredResponseOptionsGroovyImpl.path(RestAssuredResponseOptionsGroovyImpl.groovy:402)
	at io.restassured.internal.RestAssuredResponseOptionsImpl.path(RestAssuredResponseOptionsImpl.java:200)
	at com.dongao.DaQsAiTest.MyTest.test1(MyTest.java:58)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

经过百度、谷歌都没有搜到正确答案,于是自己查看源码
RestAssuredResponseOptionsGroovyImpl.groovy 查看这个文件里

在这里插入图片描述
这个文件内,发现返回消息体格式为:content-type text/plain;charset=UTF-8 ,而text 在这段源码里是不存在的,所以抛了异常,找到了报错所在,就可以解决问题了。

解决方案

解决方案有2种,最终的目的就是将返回消息变为json格式即可

方法一:通过restassured提供的json解析的from静态方法转换response为json格式

import static io.restassured.path.json.JsonPath.from; 
 @Test
    void test1(){
        query.put("userExtendId","2079");
        query.put("userId","1879");
   
        String response = given().contentType("application/json").log().all().queryParams(query).request("get", "your api url ")
            			  .then().log().all()
            			 .extract().asString();
        HashMap obj=from(response).get("obj");

方法二:使用 ResponseBuilder重构response,修改ContentType,创建一个新的response,

import io.restassured.builder.ResponseBuilder;
 @Test
    void test1(){
		query.put("userExtendId","2079");
        query.put("userId","1879");
        
        Response response = given().log().all().queryParams(query).request("get", "http://qs.api.test.com/studyApi/study/V3/index")
                .then().log().all()
                .extract().response();
        ResponseBuilder responseBuilder=new ResponseBuilder().clone(response);
        responseBuilder.setContentType("application/json; charset=UTF-8");
        Response finalresponse=responseBuilder.build();
        HashMap obj=finalresponse.path("obj");

备注:如果所有的测试用例都有这个问题,在@BeforeAll 增加filter,在filter里增加对response的处理

 @BeforeAll
    static void beforeAll(){
        RestAssured.filters((req, res, ctx)->{
            Response originalResponse=ctx.next(req,res);
            ResponseBuilder responseBuilder=new ResponseBuilder().clone(originalResponse);
            responseBuilder.setContentType("application/json; charset=UTF-8");
            return responseBuilder.build();
        });

    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
RestAssured是一个流行的Java自动化测试框架,用于编写和执行RESTful API测试。它可以通过简单的API来处理HTTP请求和响应,并且可以轻松地将请求和响应转换为可读性强的代码。RestAssured还可以使用Gherkin语言编写BDD测试,并且支持与JUnit和TestNG等测试框架集成。 使用RestAssured可以快速编写和执行HTTP请求,验证响应状态码、响应头、响应体等细节,并且可以使用各种验证方式进行验证,如JSON Schema验证、XPath验证、正则表达式验证等等。同时,RestAssured还支持多种HTTP身份验证方式,包括基本身份验证、摘要身份验证、OAuth等。 使用RestAssured编写自动化测试用例的步骤如下: 1. 引入RestAssured依赖。 2. 编写测试用例,包括HTTP请求和验证响应的代码。 3. 运行测试用例并查看测试结果。 下面是一个使用RestAssured编写的示例测试用例: ```java import io.restassured.RestAssured; import org.junit.Test; import static io.restassured.RestAssured.given; public class RestAssuredTest { @Test public void testGet() { // 发送GET请求 given() .get("https://jsonplaceholder.typicode.com/posts/1") // 验证响应状态码和响应体 .then() .statusCode(200) .body("title", equalTo("sunt aut facere repellat provident occaecati excepturi optio reprehenderit")); } } ``` 上面的示例测试用例发送了一个GET请求,验证了响应状态码和响应体。使用RestAssured,可以非常方便地编写和执行各种HTTP请求和自动化测试用例。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值