如何解决在放心的通话后获得不受支持的字符集 \"ISO-8859-1\ 错误
我试图使用 Best Buy api playground 进行后期调用,我编写了常用代码来放心地进行后期调用,但是我收到了 500 错误,不受支持的字符集“ISO-8859-1。我正在使用数据提供程序类来传递 json 有效负载以发布调用
这是控制台日志:-
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 举报,一经查实,本站将立刻删除。