在放心的通话后获得不受支持的字符集 \"ISO-8859-1\ 错误

如何解决在放心的通话后获得不受支持的字符集 \"ISO-8859-1\ 错误

我试图使用 Best Buy api playground 进行后期调用,我编写了常用代码来放心地进行后期调用,但是我收到了 500 错误,不受支持的字符集“ISO-8859-1。我正在使用数据提供程序类来传递 json 有效负载以发布调用

这是 swagger API 文档

Image1

Image2

这是控制台日志:-

2021-06-18 11:48:15 INFO  BestBuy Rest API:29 - ----Create new product request test started----
2021-06-18 11:48:16 INFO  BestBuy Rest API:57 - The response for create product
{
    "name": "GeneralError","message": "unsupported charset \"ISO-8859-1\"","code": 500,"className": "general-error","data": {
        
    },"errors": {
        
    }
}
2021-06-18 11:48:16 INFO  BestBuy Rest API:36 - ----Create new product request test completed

===============================================
Default Suite
Total tests run: 1,Passes: 1,Failures: 0,Skips: 0
===============================================


Process finished with exit code 0

这是后调用代码

public class TC002_BestBuy_CreateProduct extends TestBase{

    private static String prodID;

    public static String getvariable(){
        return prodID;
    }

    public static void setvariable(String var){
        prodID = var;
    }

    @BeforeClass
    public void createProductData(){
        logger.info("----Create new product request test started----");

        TestBase.initialization();
    }

    @AfterClass
    public void tearDown(){
        logger.info("----Create new product request test completed");
    }

    @Test(priority = 1,dataProvider = "apiDataProvider",dataProviderClass = APIDataProvider.class,description = "post call and status check for create product")
    public void createProduct(String name,String type,String price,String shipping,String upc,String description,String manufacturer,String model,String url,String image){

        TestBase.response= given()
                .baseUri(property.getProperty("BaseURI"))
                .queryParam("name",name)
                .queryParam("type",type)
                .queryParam("price",price)
                .queryParam("shipping",shipping)
                .queryParam("upc",upc)
                .queryParam("description",description)
                .queryParam("manufacturer",manufacturer)
                .queryParam("model",model)
                .queryParam("url",url)
                .queryParam("image",image)
                .post(property.getProperty("createProductURL"));


        logger.info("The response for create product");
        TestBase.response.prettyPrint();

        String productId=TestBase.response.jsonPath().get("id");
        setvariable(productId);

    }
  }

这里是excel实用类读取excel数据的代码

public static int getRowCount(String xlfile,String xlsheet) throws IOException
    {
        fi=new FileInputStream(xlfile);
        wb=new XSSFWorkbook(fi);
        ws=wb.getSheet(xlsheet);
        int rowcount=ws.getLastRowNum();
        wb.close();
        fi.close();
        return rowcount;
    }


    public static int getCellCount(String xlfile,String xlsheet,int rownum) throws IOException
    {
        fi=new FileInputStream(xlfile);
        wb=new XSSFWorkbook(fi);
        ws=wb.getSheet(xlsheet);
        row=ws.getRow(rownum);
        int cellcount=row.getLastCellNum();
        wb.close();
        fi.close();
        return cellcount;
    }


    public static String getcellData(String sheetname,int rowNum,int colNum) {

        row = ws.getRow(rowNum);
        cell = row.getCell(colNum);
        int index = wb.getSheetIndex(sheetname);

        if (rowNum <= 0) {
            return "";
        } else if (index == -1) {
            return "";
        } else if (cell == null) {
            return "";
        } else if (row == null) {
            return "";
        } else if (cell.getCellTypeEnum() == CellType.STRING) {
            return cell.getStringCellValue();
        } else if (cell.getCellTypeEnum() == CellType.NUMERIC || cell.getCellTypeEnum() == CellType.FORMULA) {
            String cellValue = String.valueOf(cell.getNumericCellValue());
            if (hssfDateUtil.isCellDateFormatted(cell)) {
                DateFormat df = new SimpleDateFormat("dd/mm/yy");
                Date date = cell.getDateCellValue();
                cellValue = df.format(date);
            }
            return cellValue;
        } else if (cell.getCellTypeEnum() == CellType.BLANK) {
            return "";
        } else return String.valueOf(cell.getBooleanCellValue());
    }


    public static void setCellData(String xlfile,int rownum,int colnum,String data) throws IOException
    {
        fi=new FileInputStream(xlfile);
        wb=new XSSFWorkbook(fi);
        ws=wb.getSheet(xlsheet);
        row=ws.getRow(rownum);
        cell=row.createCell(colnum);
        cell.setCellValue(data);
        fo=new FileOutputStream(xlfile);
        wb.write(fo);
        wb.close();
        fi.close();
        fo.close();
    }
}

这里是从excel读取数据后提供数据的数据提供者类

public class APIDataProvider {

    @DataProvider(name = "apiDataProvider")
    public Object[][] getEmpData() throws IOException {

        String path=System.getProperty("user.dir")+"/TestResources/TestData.xlsx";
        int row=ExcelUtils.getRowCount(path,"Sheet1");
        int col=ExcelUtils.getCellCount(path,"Sheet1",1);

        String empdata[][]=new String[row][col];

        for (int i = 1; i <= row; i++) {
            for (int j = 0; j < col; j++) {
                empdata[i - 1][j] = ExcelUtils.getcellData("Sheet1",i,j);
            }
        }
      return (empdata);
    }
}

解决方法

我在 swagger 上看到请求是 POST,而不是 Get,因此您应该更改如何设置 API 调用:更改 queryParam --> 帖子正文。 阅读更多:https://github.com/rest-assured/rest-assured/wiki/Usage#request-body。 示例:

@Test
void demo() {
    BestBuyProduct aProduct = new BestBuyProduct();
    aProduct.setName("apple");
    aProduct.setType("fruit");
    aProduct.setPrice(30);
    aProduct.setShipping(30);
    aProduct.setUpc("DF400");
    aProduct.setDescription("test");
    aProduct.setManufacturer("XYZ");
    aProduct.setModel("AB123");
    aProduct.setUrl("http://example");
    aProduct.setImage("/apple.img");
    
   given().contentType(ContentType.JSON)
           .body(aProduct)
           .post("to_your_api_endpoint");
}

要从 POJO --> json 转换,不要忘记在 classpath 中添加 jackson 或 gson。

    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.10.3</version>
    </dependency>

顺便说一句,您可以使用https://github.com/ozlerhakan/poiji来转换excel --> POJO,而不是直接使用Apache POI。 这将有助于减少读取excel文件的复杂性,也有助于减少测试用例的参数数量。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?