第二版_TestNG+Excel+(HTTP+JSON) 简单接口测试
-----------------------------------------------------------------------------------------------------------------------------------------
说明:
>1.首先必须在指定目录创建 指定文件 ; c:/c/TEST1.xlsx
>2.ExcleUtil类只读取了TEST1.xlsx 前4列的值 ;
>3.ExcleUtil类将接口的返回的json值写入到excle中 ;
>4.HttpInterfaceTest 类中的testSendPost()方法使用Object ... obj 进行参数接收 ;
------------------------------------------------------------------------------------------------------------------------------------------
1.ExcelReader --读取*.xls,*.xlsx 格式的 excle ;
package main.java; import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.ss.usermodel.*; import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; public class ExcelReader {
public Object[][] results;
private String filePath;
private String sheetName;
private Workbook workBook;
private Sheet sheet;
private List<String> columnHeaderList;
private List<List<String>> listData;
private List<Map<String, String>> mapData;
private boolean flag; public ExcelReader(String filePath, String sheetName) {
this.filePath = filePath;
this.sheetName = sheetName;
this.flag = false;
this.load();
} public static void main(String[] args) { Object[][] obj1;
ExcelReader eh = new ExcelReader("C:\\C\\TEST1.xlsx", "Sheet1");
Object[][] sheetData2 = eh.getSheetData2();
System.out.println(sheetData2.length + "------------");
for (int i = 1; i < sheetData2.length - 1; i++) {
for (int j = 0; j < sheetData2[i].length - 1; j++) {
System.out.print(sheetData2[i][j] + " | ");
}
System.out.println();
} } private void load() {
FileInputStream inStream = null;
try {
File files = new File(filePath);
if (files.exists()) {
inStream = new FileInputStream(files);
workBook = WorkbookFactory.create(inStream);
sheet = workBook.getSheet(sheetName);
} else {
System.out.println("请在这个目录下创建这个文件,不然程序无法执行!; C:/C/TEST1.xlsx");
} } catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (inStream != null) {
inStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
} private String getCellValue(Cell cell) {
String cellValue = "";
DataFormatter formatter = new DataFormatter();
if (cell != null) {
switch (cell.getCellType()) {
case Cell.CELL_TYPE_NUMERIC:
if (HSSFDateUtil.isCellDateFormatted(cell)) {
cellValue = formatter.formatCellValue(cell);
} else {
double value = cell.getNumericCellValue();
int intValue = (int) value;
cellValue = value - intValue == 0 ? String.valueOf(intValue) : String.valueOf(value);
}
break;
case Cell.CELL_TYPE_STRING:
cellValue = cell.getStringCellValue();
break;
case Cell.CELL_TYPE_BOOLEAN:
cellValue = String.valueOf(cell.getBooleanCellValue());
break;
case Cell.CELL_TYPE_FORMULA:
cellValue = String.valueOf(cell.getCellFormula());
break;
case Cell.CELL_TYPE_BLANK:
cellValue = "";
break;
case Cell.CELL_TYPE_ERROR:
cellValue = "";
break;
default:
cellValue = cell.toString().trim();
break;
}
}
return cellValue.trim();
} private void getSheetData() { listData = new ArrayList<>();
mapData = new ArrayList<>();
columnHeaderList = new ArrayList<>();
int numOfRows = sheet.getLastRowNum() + 1;
for (int i = 0; i < numOfRows; i++) {
Row row = sheet.getRow(i);
Map<String, String> map = new HashMap<>();
List<String> list = new ArrayList<>(); if (row != null) {
for (int j = 0; j < row.getLastCellNum(); j++) {
Cell cell = row.getCell(j);
if (i == 0) {
columnHeaderList.add(getCellValue(cell));
} else { map.put(columnHeaderList.get(j), this.getCellValue(cell)); }
list.add(this.getCellValue(cell));
}
}
if (i > 0) {
mapData.add(map);
}
listData.add(list); } flag = true; for (int i = 0; i < listData.size(); i++) {
for (int j = 0; j < listData.get(i).size(); j++) {
System.out.println(listData.get(i).get(j).toString());
}
} } public String getCellData(int row, int col) {
if (row <= 0 || col <= 0) {
return null;
}
if (!flag) {
this.getSheetData();
}
if (listData.size() >= row && listData.get(row - 1).size() >= col) {
return listData.get(row - 1).get(col - 1);
} else {
return null;
}
} public String getCellData(int row, String headerName) {
if (row <= 0) {
return null;
}
if (!flag) {
this.getSheetData();
}
if (mapData.size() >= row && mapData.get(row - 1).containsKey(headerName)) {
return mapData.get(row - 1).get(headerName);
} else {
return null;
}
} public Object[][] getSheetData2() { List<Object[]> result = new ArrayList<>();
listData = new ArrayList<>();
mapData = new ArrayList<>();
columnHeaderList = new ArrayList<>(); int numOfRows = sheet.getLastRowNum() + 1;
// System.out.println("总共有 " + numOfRows + " 行 !");
for (int i = 0; i < numOfRows; i++) {
Row row = sheet.getRow(i);
Map<String, String> map = new HashMap<>();
List<String> list = new ArrayList<>();
Object[] o1 = new Object[row.getLastCellNum()]; if (row != null) {
for (int j = 0; j <= 3/*row.getLastCellNum()*/; j++) {
// System.out.println("第 "+i+" 行--- row.getLastCellNum()===="+row.getLastCellNum());
Cell cell = row.getCell(j);
if (i == 0) {
o1[j] = this.getCellValue(cell);
// System.out.println(j+"------this.getCellValue(cell)="+this.getCellValue(cell));
columnHeaderList.add(getCellValue(cell));
} else {
o1[j] = this.getCellValue(cell);
// System.out.println(j+"------this.getCellValue(cell)="+this.getCellValue(cell));
map.put(columnHeaderList.get(j), this.getCellValue(cell)); }
list.add(this.getCellValue(cell));
}
}
if (i > 0) {
mapData.add(map);
}
result.add(o1);
listData.add(list);
}
// 测试数据excel数据用 ;
/* for (int i = 0; i < result.size(); i++) {
for (int j = 0; j < result.get(i).length; j++) {
System.out.print(result.get(i)[j]+" | ");
}
System.out.println();
}*/
results = new Object[result.size()][]; for (int i = 0; i < result.size(); i++) {
results[i] = result.get(i);
}
flag = true; System.out.println("results.length==" + results.length);
return results;
}
}
1.1 20180131——setCellData2()方法的更新 ;
public static void setCellData2(int rownum, int colnum, String result) {
FileOutputStream out = null;
if (null == sheet.getRow(rownum)) {
Row row1 = sheet.createRow(rownum);
if (null == row1.getCell(colnum)) {
row1.createCell(colnum).setCellValue(result);
} else {
row.getCell(colnum).setCellValue(result);
}
} else {
sheet.getRow(rownum).createCell(colnum).setCellValue(result); } try {
out = new FileOutputStream(ExcelFilePath);
workBook.write(out);
out.flush(); } catch (IOException e) {
e.printStackTrace();
}finally {
try {
out.close();
System.out.println("-----写入成功!------");
} catch (Exception e) {
e.printStackTrace();
}
} }
2.ExcleUtil --读取和设置单元格的值 ;
package main.java; import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List; import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class ExcleUtil {
private static XSSFSheet ExcelWSheet;
private static XSSFWorkbook ExcelWBook;
private static XSSFCell Cell;
private static XSSFRow Row;
private static String ExcelFilePath="C:\\C\\TEST1.xlsx"; // 设定要设置的Excel的文件路径和Excel 中Sheet名;
// 在读/写Excel 的时候先要调用此方法
public static void setExcleFile(String FilePath, String sheetName) throws Exception {
FileInputStream ExcleFile;
try {
// 实例化Excle文件的FileInputStream 对象;
ExcleFile = new FileInputStream(FilePath);
// 实例化Excle文件的XSSFWorkbook 对象;
ExcelWBook = new XSSFWorkbook(ExcleFile);
/*
* 实例化XSSFSheet 对象,指定ExcelFile中的sheet名称,用于后续对sheet中行和列的操作;
*
*/
ExcelWSheet = ExcelWBook.getSheet(sheetName); } catch (Exception e) {
e.getStackTrace();
} }
/*
* 读取excle文件指定单元格的函数 ;
*
*/ public static String getCell(int row, int col) throws Exception { try {
// 通过函数参数指定单元格的行号和列,获取指定单元格的对象;
Cell = ExcelWSheet.getRow(row).getCell(col);
/*
* 1.如果单元格的类型为字符串类型,使用getStringCellValue();来获取单元格的内容;
* 2.如果单元格的类型为数字类型,使用getNumberricCellValue();来获取单元格的内容;
* 注意:getNumberricCellValue();返回的值为double类型,转为为字符串类型,必须在
* getNumberricCellValue();前面加上(" ")双引号,用于强制转换为String类型,不加双引号
* 则会抛错;double类型无法转换为String类型的异常;
*
*/
String CellData = Cell.getCellType() == XSSFCell.CELL_TYPE_STRING ? Cell.getStringCellValue() + ""
: String.valueOf(Math.round(Cell.getNumericCellValue()));
return CellData;
} catch (Exception e) {
e.getStackTrace();
return "";
} }
/*
* 在Excle中执行单元格写入数据;
*
*
*/ public static void setCellData(int rownum, int colnum, String Result) throws Exception { try {
// 获取excle文件的中行对象;
Row = ExcelWSheet.getRow(rownum);
// 如果单元格为空则返回null;
Cell = Row.getCell(colnum, Row.RETURN_BLANK_AS_NULL);
if (Cell == null) {
// 当单元格为空是则创建单元格
// 如果单元格为空无法调用单元格对象的setCellValue方法设定单元格的值 ;
Cell = Row.createCell(colnum);
// 创建单元格和后可以通过调用单元格对象的setCellValue方法设置单元格的值了;
Cell.setCellValue(Result);
} else {
// 单元格中有内容,则可以直接调用单元格对象的 setCellValue 方法来设置单元格的值;
Cell.setCellValue(Result);
}
FileOutputStream fileout = new FileOutputStream(ExcelFilePath);
// 将内容写到Excel文件中 ;
ExcelWBook.write(fileout);
// j调用flush方法强制刷新写入文件;
fileout.flush();
fileout.close();
System.out.println("-----写入成功!------");
} catch (Exception e) {
System.out.println(e.getMessage() + e.getStackTrace());
throw (e);
} } public static void TangsetCellData(int RowNum, int ColNum, String Result) {
try {
// 获取行对象
Row = ExcelWSheet.getRow(RowNum);
// 如果单元格为空,则返回null
Cell = Row.getCell(ColNum, Row.RETURN_BLANK_AS_NULL);
if (Cell == null) {
// 当单元格对象是Null时,则创建单元格
// 如果单元格为空,无法直接调用单元格的setCellValue方法设定单元格的值
Cell = Row.createCell(RowNum);
// 调用setCellValue方法设定单元格的值
Cell.setCellValue(Result);
} else {
// 单元格中有内容,则可以直接调用seCellValue方法设定单元格的值
Cell.setCellValue(Result);
}
// 实例化写入Excel文件的文件输出流对象
FileOutputStream fileOut = new FileOutputStream(ExcelFilePath);
// 将内容写入Excel中
ExcelWBook.write(fileOut);
fileOut.flush();
fileOut.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
} // 从excel 文件中获取测试数据的静态方法;
public static Object[][] getTestData(String excelFilePath, String sheetName) throws Exception {
// 根据参数传入的数据文件路径和文件名称,组合出Excel 数据文件的绝对路径
// 声明一个文件;
File file = new File(excelFilePath);
// 创建FileInputStream 来读取Excel文件内容;
FileInputStream inputStream = new FileInputStream(file);
// 声明Workbook 对象;
Workbook workbook = null;
// 获取文件名参数的扩展名,判断是“.xlsx” 还是 “.xls” ;
String fileExtensionName = excelFilePath.substring(excelFilePath.indexOf('.'));
if (fileExtensionName.equals(".xlsx")) {
workbook = new XSSFWorkbook(inputStream); } else if (fileExtensionName.equals(".xls")) {
workbook = new HSSFWorkbook(inputStream); }
Sheet sheet = workbook.getSheet(sheetName);
// 获取Excel 数据文件Sheet1 中数据的行数,getLastRowNum 方法获取数据的最后一行的行号,
// getFistRowNum 获取第一行 最后一行减去第一行就是总行数了
// 注意excle 的行和列都是从0开始的;
int rowCount = sheet.getLastRowNum() - sheet.getFirstRowNum();
// 创建名为records 的List对象来存储从Excel文件中读取的数据;
List<Object[]> records = new ArrayList<Object[]>();
// 使用for循环遍历Excel 数据文件的所有数据(除了第一行,第一行为标题行),所以i从1开始而不是从0开始; for (int i = 1; i < rowCount + 1; i++) {
// 使用getRow来获取行对象;
Row row = sheet.getRow(i);
/*
* 声明一个数据,用来存储Excel数据文件每行中的测试用例和数据,数据的大小用getLastCellNum-2
* 来进行动态声明,实现测试数据个数和数组大小一致,
* 因为Excel数据文件中的测试数据行的最后一个单元格是测试执行结果,倒数第二个单元格为此测试数据行是否运行的状态位,
* 所以最后俩列的单元格数据并
* 不需要传入测试方法中,所以是用getLastCellNum-2的方式去掉每行中的最后俩个单元格数据,计算出需要存储的测试数据个数,
* 并作为测试数据数组的初始化大小
*
*/
String fields[] = new String[row.getLastCellNum() - 2]; /*
* 判断数据行是否要参与测试的执行,Excel 文件的倒数第二列为数据行的状态位, 标记为“y”
* 表示此数据行要被测试脚本执行,标记为非“y”的数据行均被认为不会参数测试脚本执行,会被跳过;
*/ if (row.getCell(row.getLastCellNum() - 2).getStringCellValue().equals("y")) {
for (int j = 0; j < row.getLastCellNum() - 2; j++) {
/*
* 判断Excel 单元格的内容是数字还是字符, 字符格式调用:
* row.getCell(j).getStringCellValue();
* 数字格式调用:row.getCell(j).getNumericCellValue();
*/
fields[j] = (String) (row.getCell(j).getCellType() == XSSFCell.CELL_TYPE_STRING
? row.getCell(j).getStringCellValue() : "" + row.getCell(j).getNumericCellValue()); }
// fields 存储到数组当中;
records.add(fields); }
} /*
* 定义函数的返回值,即Object[] [] 将存储测试数据的list 转换为一个Object 的二维数组;
*/
Object[][] results = new Object[records.size()][];
for (int i = 0; i < records.size(); i++) {
results[i] = records.get(i);
} return results; } public static int getLastColumnNum() { return ExcelWSheet.getRow(0).getLastCellNum() - 1;
} public static void main(String[] args) throws Exception { //ExcleUtil.setCellData(3,3,"hellojava!");
//System.out.println(ExcleUtil.getCell(3,1) );
; } }
3.HttpInterfaceTest --接口 get 和 post 的方法 ;
package main.java;
import net.sf.json.JSONObject;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import java.util.Map; /**
* Created by ty on 2017/8/17.
*/
public class HttpInterfaceTest { public String sendGet(String url, String param) {
String result = "";
BufferedReader in = null;
try {
String urlName = url + "?" + param;
System.out.println("Get请求接口:" + urlName);
URL realUrl = new URL(urlName);
// 打开和URL之间的连接
URLConnection conn = realUrl.openConnection();
// 设置通用的请求属性
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");
// 建立实际的连接
conn.connect();
// 获取所有响应头字段
Map<String, List<String>> map = conn.getHeaderFields();
// 遍历所有的响应头字段
for (String key : map.keySet()) {
System.out.println(key + "--->" + map.get(key));
}
// 定义BufferedReader输入流来读取URL的响应
in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
result += "\n" + line;
}
} catch (Exception e) {
// System.out.println("发送GET请求出现异常!" + e);
e.printStackTrace();
}
// 使用finally块来关闭输入流
finally {
try {
if (in != null) {
in.close();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
return result;
} /**
* 向指定URL发送POST方法的请求
*
* @param url 发送请求的URL
* @param param 请求参数,请求参数应该是name1=value1&name2=value2的形式或者是json。
* @return URL所代表远程资源的响应
*/
public String sendPost(String url, String param) {
PrintWriter out = null;
BufferedReader in = null;
String result = "";
String jsonName="Content=";
try {
URL realUrl = new URL(url);
// 打开和URL之间的连接
URLConnection conn = realUrl.openConnection();
// 设置通用的请求属性
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)") ;
//Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0)
// conn.setRequestProperty("Content-Type", "application/json; charset=utf-8");
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
// application/x-www-form-urlencoded
// 发送POST请求必须设置如下两行
conn.setDoOutput(true);
conn.setDoInput(true); // 获取URLConnection对象对应的输出流
out = new PrintWriter(conn.getOutputStream());
// 发送请求参数
out.print(jsonName+param);
System.out.println("jsonName+param="+jsonName+param);
// flush输出流的缓冲
out.flush();
// 定义BufferedReader输入流来读取URL的响应
in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
result += "\n" + line;
}
} catch (Exception e) {
System.out.println("Send Post Excepion :" + e);
e.printStackTrace();
}
// 使用finally块来关闭输出流、输入流
finally {
try {
if (out != null) {
out.close();
}
if (in != null) {
in.close();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
return result;
} /* public static void main(String[] args) { HttpInterfaceTest httpInterfaceTest = new HttpInterfaceTest(); System.out.println("----------------");
String cissUrl="http://192.168.1.110:7001/CISS/MSG/callTrxMsgManager.action";
String PostValue = "{MESSAGEID:'ZTS00120170914110859000043',\n" +
"INTERFACETYPE:'S001',\n" +
"UNITID:'10001',\n" +
"CNFULLNAME:'测试机构12222',\n" +
"CNABBRNAME:'测试机构12222',\n" +
"PINYIN:'CSJG1222',\n" +
"ENFULLNAME:'CESHIJIGOU',\n" +
"ENABBRNAME:'CESHIJIGOU'\n" +
"}"; JSONObject CissjsonPostParams = JSONObject.fromObject(PostValue);
String postResult = httpInterfaceTest.sendPost(cissUrl, CissjsonPostParams.toString());
System.out.println("POST请求参数二:" + CissjsonPostParams);
System.out.println( postResult);
}*/
}
4.TestHttpInterfaceTest ---1 。2 。3 联合测试接口;
package main.test; import main.java.DateUtil;
import main.java.ExcelReader;
import main.java.ExcleUtil;
import main.java.HttpInterfaceTest;
import net.sf.json.JSONException;
import net.sf.json.JSONObject;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test; import java.text.SimpleDateFormat;
import java.util.Date; /**
* Created by on 2017/9/5.
*/
public class TestHttpInterfaceTest {
public static HttpInterfaceTest ht;
static ExcleUtil excleUtil;
ExcelReader ex;
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
;
@BeforeTest
public void init() {
String ExcelFilePath = "C:\\C\\TEST1.xlsx";
String sheetName = "Sheet1";
ht = new HttpInterfaceTest();
ex = new ExcelReader(ExcelFilePath, sheetName);
try {
excleUtil.setExcleFile(ExcelFilePath, sheetName);
} catch (Exception e) {
e.printStackTrace();
}
} @Test(dataProvider = "dp")
public void testSendPost(Object... obj) throws Exception {
String rowNum = "";
String Url = "";
String effect = "";
String paras = "";
String Contents = "";
String times = "";
for (int i = 0; i < obj.length; i++) {
rowNum = (String) obj[0];
Url = (String) obj[1];
effect = (String) obj[2];
paras = (String) obj[3]; }
//String rowNum, String Url, String effect, String paras,String Contents ,String times
System.out.println("rowNum=" + rowNum + "; URL=" + Url + " ;" + effect + " paras=" + paras + Contents + times);
Integer it = new Integer(rowNum);
int row = it.intValue();
if (paras.contains("&")) {
String s1 = ht.sendPost(Url, paras);
String date = DateUtil.format();
excleUtil.setCellData(row, 3, s1);
excleUtil.setCellData(row, 4, date);
System.out.println(s1);
} else {
try {
/* JSONObject jsonObject = JSONObject.fromObject(paras);
String s = ht.sendPost(Url, jsonObject.toString());*/
String testTimes =df.format(new Date());
String s = ht.sendPost(Url, paras);
JSONObject jsonObject = JSONObject.fromObject(s);
String MESSAGEID = jsonObject.getString("MESSAGEID");
String RESULTCODE = jsonObject.getString("RESULTCODE");
if (RESULTCODE.equals("0")) {
excleUtil.setCellData(row, 4, RESULTCODE + ":ACK成功");
excleUtil.setCellData(row, 5, df.format(new Date()));
} else if (RESULTCODE.equals("E000")) {
excleUtil.setCellData(row, 4, RESULTCODE + "其他");
excleUtil.setCellData(row, 5, df.format(new Date()));
} else if (RESULTCODE.equals("E001")) {
excleUtil.setCellData(row, 4, RESULTCODE + "必填项数据为空值");
excleUtil.setCellData(row, 5, df.format(new Date()));
} else if (RESULTCODE.equals("E002")) {
excleUtil.setCellData(row, 4, RESULTCODE + "必填项在数据库中没有匹配数据");
excleUtil.setCellData(row, 5, df.format(new Date()));
} else if (RESULTCODE.equals("E003")) {
excleUtil.setCellData(row, 4, RESULTCODE + "唯一项在数据库中重复");
excleUtil.setCellData(row, 5, df.format(new Date()));
} else if (RESULTCODE.equals("E004")) {
excleUtil.setCellData(row, 4, RESULTCODE + "传过来的关键字段不同属于一条记录;");
excleUtil.setCellData(row, 5, df.format(new Date()));
} else if (RESULTCODE.equals("E005")) {
excleUtil.setCellData(row, 4, RESULTCODE + "没有满足前提条件。如:当前日期范围内还没有维护汇率信息,请先行维护!");
excleUtil.setCellData(row, 5, df.format(new Date()));
} else if (RESULTCODE.equals("E006")) {
excleUtil.setCellData(row, 4, RESULTCODE + "类型转化异常,");
excleUtil.setCellData(row, 5, df.format(new Date()));
} else if (RESULTCODE.equals("E007")) {
excleUtil.setCellData(row, 4, RESULTCODE + " 所填数据不在给定范围内 ");
excleUtil.setCellData(row, 5, df.format(new Date()));
} else if (RESULTCODE.equals("E008")) {
excleUtil.setCellData(row, 4, RESULTCODE + " 数据格式不正确 ");
excleUtil.setCellData(row, 5, df.format(new Date()));
} else if (RESULTCODE.equals("E009")) {
excleUtil.setCellData(row, 4, RESULTCODE + "在当前数据状态下不能进行操作");
excleUtil.setCellData(row, 5, df.format(new Date()));
} else if (RESULTCODE.equals("E010")) {
excleUtil.setCellData(row, 4, RESULTCODE + " 该经纪人已在清算系统中存在,状态:正常 ");
excleUtil.setCellData(row, 5, df.format(new Date()));
} else if (RESULTCODE.equals("E011")) {
excleUtil.setCellData(row, 4, RESULTCODE + " 该经纪人已在清算系统中存在,状态:禁用");
excleUtil.setCellData(row, 5, df.format(new Date()));
} System.out.println(s);
} catch (JSONException jsonException) {
excleUtil.setCellData(row, 4, " 响应结果 ");
excleUtil.setCellData(row, 5, " 响应时间 ");
System.out.println("标题行不能进行转换!");
} catch (Exception e) {
excleUtil.setCellData(row, 4, " Exception ");
excleUtil.setCellData(row, 5, " Exception");
e.printStackTrace();
System.out.println("标题行不能进行转换!");
} } } @DataProvider
public Object[][] dp() {
Object[][] sheetData2 = ex.getSheetData2();
System.out.println(sheetData2.length + "------------");
for (int i = 1; i < sheetData2.length; i++) {
for (int j = 0; j < sheetData2[i].length - 1; j++) {
System.out.print(sheetData2[i][j] + " | ");
}
System.out.println();
} return sheetData2;
}
}
第二版_TestNG+Excel+(HTTP+JSON) 简单接口测试的更多相关文章
- TestNG+Excel+(HTTP+JSON) 简单接口测试
说明: 1.使用Exce作为数据存放地: 2.使用TestNG的Datarprovide 做数据供应: 3.不足的地方没有指定明确的result_code , error_code , ERROR_M ...
- 《代码大全(第二版)》【PDF】下载
<代码大全(第二版)>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382264 内容简介 <代码大全(第2版)>是著 ...
- 利用MYSQL的函数实现用户登录功能,进出都是JSON(第二版)
利用MYSQL的函数实现用户登录功能,进出都是JSON(第二版) CREATE DEFINER=`root`@`%` FUNCTION `uc_session_login`( `reqjson` JS ...
- 一套简单的web即时通讯——第二版
前言 接上一版,这一版的页面与功能都有所优化,具体如下: 1.优化登录拦截 2.登录后获取所有好友并区分显示在线.离线好友,好友上线.下线都有标记 3.将前后端交互的值改成用户id.显示值改成昵称ni ...
- 简单的web三层架构系统【第二版】
昨天写了 web三层架构的第一版,准确的说是三层架构的前期,顶多算是个二层架构,要慢慢完善. 第一版里,程序虽说能运行起来,但是有一个缺陷,就是里面的SQL语句,是使用的拼接字符进行执行.这样安全系数 ...
- Lucene.net站内搜索—6、站内搜索第二版
目录 Lucene.net站内搜索—1.SEO优化 Lucene.net站内搜索—2.Lucene.Net简介和分词Lucene.net站内搜索—3.最简单搜索引擎代码Lucene.net站内搜索—4 ...
- 锋利的jQuery(第二版)学习总结
通过对<锋利的jQuery>(第二版)一书的学习,发现此书讲解通俗易懂,是学习jQuery的一本很好的指导书,特作如下总结. 此书主要讲解了jQuery的常用操作,包括认识jQuery,j ...
- Python核心编程(第二版)PDF
Python核心编程(第二版) 目录 第1部分 Python核心第1章 欢迎来到Python世界1.1 什么是Python1.2 起源1.3 特点1.3.1 高级1.3.2 面向对象1.3.3 可升级 ...
- Python——Excel转Json工具
Python工具Excel转Json 前置条件 1.安装python 下载python 我下载的是2.7: 2.配置环境变量 我的电脑右键--属性--高级系统设置--环境变量: 添加python的安装 ...
随机推荐
- linux 监控文件变化
介绍 有时候我们常需要当文件变化的时候便触发某些脚本操作,比如说有文件更新了就同步文件到远程机器.在实现这个操作上,主要用到两个工具,一个是rsync,一个是inotifywait .inotifyw ...
- PostgreSQL的HOT(Heap-Only Tuples)
磨砺技术珠矶,践行数据之道,追求卓越价值 回到上一级页面:PostgreSQL内部结构与源代码研究索引页 回到顶级页面:PostgreSQL索引页 HOT的解释: 如下的日文文档中,有几个图示, ...
- SpringCloud-微服务网关ZUUL(六)
前言:前面说过,由于微服务过多,可能某一个小业务就需要调各种微服务的接口,不可避免的就会需要负载均衡和反向代理了,以确保ui不直接与所有的微服务接口接触,所以我们需要使用一个组件来做分发,跨域等各种请 ...
- restful framework之权限组件
一.权限简介 只用超级用户才能访问指定的数据,普通用户不能访问,所以就要有权限组件对其限制 二.局部使用 from rest_framework.permissions import BasePerm ...
- SQL Server 内存和换页(Paging)
在进程开始执行时,进程首先申请虚拟地址空间VAS(Virtural Address Space),VAS是进程能够访问的地址空间,由于VAS不是真正的物理内存空间,操作系统必须将VAS隐射到物理内存空 ...
- Jsp中格式化时间戳的常用标签
接下来一段时间的记录,虽然不是一些什么全新的知识,但是作为后台开发人员都是应该必须掌握的前端基础技能,说实话,每一个后台程序员的短板就在于前端技能的弱而造就了不能更上一层楼.从今天开始,我将彻底开启菜 ...
- springboot 前后端分离开发 从零到整(三、登录以及登录状态的持续)
今天来写一下怎么登录和维持登录状态. 相信登录验证大家都比较熟悉,在Javaweb中一般保持登录状态都会用session.但如果是前后端分离的话,session的作用就没有那么明显了.对于前后端分离的 ...
- VGGnet——从TFrecords制作到网络训练
作为一个小白中的小白,多折腾总是有好处的,看了入门书和往上一些教程,很多TF的教程都是从MNIST数据集入手教小白入TF的大门,都是直接import MNIST,然后直接构建网络,定义loss和opt ...
- Windows下用HackRF和SDR#收听FM
本文内容.开发板及配件仅限用于学校或科研院所开展科研实验! 淘宝店铺名称:开源SDR实验室 HackRF链接:https://item.taobao.com/item.htm?spm=a1z10.1- ...
- jobs命令详解
基础命令学习目录首页 在用管理员执行一个命令后,用Ctrl+Z把命令转移到了后台.导致无法退出root的. 输入命令:exit终端显示:There are stopped jobs. 解决方法:方法一 ...