第二版_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 ;

  1 package main.java;
  2
  3 import org.apache.poi.hssf.usermodel.HSSFDateUtil;
  4 import org.apache.poi.ss.usermodel.*;
  5
  6 import java.io.File;
  7 import java.io.FileInputStream;
  8 import java.io.IOException;
  9 import java.util.ArrayList;
 10 import java.util.HashMap;
 11 import java.util.List;
 12 import java.util.Map;
 13
 14 public class ExcelReader {
 15     public Object[][] results;
 16     private String filePath;
 17     private String sheetName;
 18     private Workbook workBook;
 19     private Sheet sheet;
 20     private List<String> columnHeaderList;
 21     private List<List<String>> listData;
 22     private List<Map<String, String>> mapData;
 23     private boolean flag;
 24
 25     public ExcelReader(String filePath, String sheetName) {
 26         this.filePath = filePath;
 27         this.sheetName = sheetName;
 28         this.flag = false;
 29         this.load();
 30     }
 31
 32     public static void main(String[] args) {
 33
 34         Object[][] obj1;
 35         ExcelReader eh = new ExcelReader("C:\\C\\TEST1.xlsx", "Sheet1");
 36         Object[][] sheetData2 = eh.getSheetData2();
 37         System.out.println(sheetData2.length + "------------");
 38         for (int i = 1; i < sheetData2.length - 1; i++) {
 39             for (int j = 0; j < sheetData2[i].length - 1; j++) {
 40                 System.out.print(sheetData2[i][j] + " | ");
 41             }
 42             System.out.println();
 43         }
 44
 45
 46     }
 47
 48     private void load() {
 49         FileInputStream inStream = null;
 50         try {
 51             File files = new File(filePath);
 52             if (files.exists()) {
 53                 inStream = new FileInputStream(files);
 54                 workBook = WorkbookFactory.create(inStream);
 55                 sheet = workBook.getSheet(sheetName);
 56             } else {
 57                 System.out.println("请在这个目录下创建这个文件,不然程序无法执行!; C:/C/TEST1.xlsx");
 58             }
 59
 60         } catch (Exception e) {
 61             e.printStackTrace();
 62         } finally {
 63             try {
 64                 if (inStream != null) {
 65                     inStream.close();
 66                 }
 67             } catch (IOException e) {
 68                 e.printStackTrace();
 69             }
 70         }
 71     }
 72
 73     private String getCellValue(Cell cell) {
 74         String cellValue = "";
 75         DataFormatter formatter = new DataFormatter();
 76         if (cell != null) {
 77             switch (cell.getCellType()) {
 78                 case Cell.CELL_TYPE_NUMERIC:
 79                     if (HSSFDateUtil.isCellDateFormatted(cell)) {
 80                         cellValue = formatter.formatCellValue(cell);
 81                     } else {
 82                         double value = cell.getNumericCellValue();
 83                         int intValue = (int) value;
 84                         cellValue = value - intValue == 0 ? String.valueOf(intValue) : String.valueOf(value);
 85                     }
 86                     break;
 87                 case Cell.CELL_TYPE_STRING:
 88                     cellValue = cell.getStringCellValue();
 89                     break;
 90                 case Cell.CELL_TYPE_BOOLEAN:
 91                     cellValue = String.valueOf(cell.getBooleanCellValue());
 92                     break;
 93                 case Cell.CELL_TYPE_FORMULA:
 94                     cellValue = String.valueOf(cell.getCellFormula());
 95                     break;
 96                 case Cell.CELL_TYPE_BLANK:
 97                     cellValue = "";
 98                     break;
 99                 case Cell.CELL_TYPE_ERROR:
100                     cellValue = "";
101                     break;
102                 default:
103                     cellValue = cell.toString().trim();
104                     break;
105             }
106         }
107         return cellValue.trim();
108     }
109
110     private void getSheetData() {
111
112         listData = new ArrayList<>();
113         mapData = new ArrayList<>();
114         columnHeaderList = new ArrayList<>();
115         int numOfRows = sheet.getLastRowNum() + 1;
116         for (int i = 0; i < numOfRows; i++) {
117             Row row = sheet.getRow(i);
118             Map<String, String> map = new HashMap<>();
119             List<String> list = new ArrayList<>();
120
121             if (row != null) {
122                 for (int j = 0; j < row.getLastCellNum(); j++) {
123                     Cell cell = row.getCell(j);
124                     if (i == 0) {
125                         columnHeaderList.add(getCellValue(cell));
126                     } else {
127
128                         map.put(columnHeaderList.get(j), this.getCellValue(cell));
129
130                     }
131                     list.add(this.getCellValue(cell));
132                 }
133             }
134             if (i > 0) {
135                 mapData.add(map);
136             }
137             listData.add(list);
138
139
140         }
141
142         flag = true;
143
144         for (int i = 0; i < listData.size(); i++) {
145             for (int j = 0; j < listData.get(i).size(); j++) {
146                 System.out.println(listData.get(i).get(j).toString());
147             }
148         }
149
150     }
151
152     public String getCellData(int row, int col) {
153         if (row <= 0 || col <= 0) {
154             return null;
155         }
156         if (!flag) {
157             this.getSheetData();
158         }
159         if (listData.size() >= row && listData.get(row - 1).size() >= col) {
160             return listData.get(row - 1).get(col - 1);
161         } else {
162             return null;
163         }
164     }
165
166     public String getCellData(int row, String headerName) {
167         if (row <= 0) {
168             return null;
169         }
170         if (!flag) {
171             this.getSheetData();
172         }
173         if (mapData.size() >= row && mapData.get(row - 1).containsKey(headerName)) {
174             return mapData.get(row - 1).get(headerName);
175         } else {
176             return null;
177         }
178     }
179
180     public Object[][] getSheetData2() {
181
182         List<Object[]> result = new ArrayList<>();
183         listData = new ArrayList<>();
184         mapData = new ArrayList<>();
185         columnHeaderList = new ArrayList<>();
186
187         int numOfRows = sheet.getLastRowNum() + 1;
188         //    System.out.println("总共有 " + numOfRows + " 行 !");
189         for (int i = 0; i < numOfRows; i++) {
190             Row row = sheet.getRow(i);
191             Map<String, String> map = new HashMap<>();
192             List<String> list = new ArrayList<>();
193             Object[] o1 = new Object[row.getLastCellNum()];
194
195             if (row != null) {
196                 for (int j = 0; j <= 3/*row.getLastCellNum()*/; j++) {
197                     //   System.out.println("第 "+i+" 行--- row.getLastCellNum()===="+row.getLastCellNum());
198                     Cell cell = row.getCell(j);
199                     if (i == 0) {
200                         o1[j] = this.getCellValue(cell);
201                         //       System.out.println(j+"------this.getCellValue(cell)="+this.getCellValue(cell));
202                         columnHeaderList.add(getCellValue(cell));
203                     } else {
204                         o1[j] = this.getCellValue(cell);
205                         // System.out.println(j+"------this.getCellValue(cell)="+this.getCellValue(cell));
206                         map.put(columnHeaderList.get(j), this.getCellValue(cell));
207
208                     }
209                     list.add(this.getCellValue(cell));
210                 }
211             }
212             if (i > 0) {
213                 mapData.add(map);
214             }
215             result.add(o1);
216             listData.add(list);
217         }
218         // 测试数据excel数据用 ;
219       /*    for (int i = 0; i < result.size(); i++) {
220             for (int j = 0; j < result.get(i).length; j++) {
221                 System.out.print(result.get(i)[j]+" | ");
222             }
223             System.out.println();
224         }*/
225         results = new Object[result.size()][];
226
227         for (int i = 0; i < result.size(); i++) {
228             results[i] = result.get(i);
229         }
230         flag = true;
231
232         System.out.println("results.length==" + results.length);
233         return results;
234     }
235 }

2.ExcleUtil --读取和设置单元格的值 ;

  1 package main.java;
  2
  3 import java.io.File;
  4 import java.io.FileInputStream;
  5 import java.io.FileOutputStream;
  6 import java.util.ArrayList;
  7 import java.util.List;
  8
  9 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 10 import org.apache.poi.ss.usermodel.Row;
 11 import org.apache.poi.ss.usermodel.Sheet;
 12 import org.apache.poi.ss.usermodel.Workbook;
 13 import org.apache.poi.xssf.usermodel.XSSFCell;
 14 import org.apache.poi.xssf.usermodel.XSSFRow;
 15 import org.apache.poi.xssf.usermodel.XSSFSheet;
 16 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 17
 18
 19 public class ExcleUtil {
 20     private static XSSFSheet ExcelWSheet;
 21     private static XSSFWorkbook ExcelWBook;
 22     private static XSSFCell Cell;
 23     private static XSSFRow Row;
 24     private static String ExcelFilePath="C:\\C\\TEST1.xlsx";
 25
 26     // 设定要设置的Excel的文件路径和Excel 中Sheet名;
 27     // 在读/写Excel 的时候先要调用此方法
 28     public static void setExcleFile(String FilePath, String sheetName) throws Exception {
 29         FileInputStream ExcleFile;
 30         try {
 31             // 实例化Excle文件的FileInputStream 对象;
 32             ExcleFile = new FileInputStream(FilePath);
 33             // 实例化Excle文件的XSSFWorkbook 对象;
 34             ExcelWBook = new XSSFWorkbook(ExcleFile);
 35             /*
 36              * 实例化XSSFSheet 对象,指定ExcelFile中的sheet名称,用于后续对sheet中行和列的操作;
 37              *
 38              */
 39             ExcelWSheet = ExcelWBook.getSheet(sheetName);
 40
 41         } catch (Exception e) {
 42             e.getStackTrace();
 43         }
 44
 45     }
 46     /*
 47      * 读取excle文件指定单元格的函数 ;
 48      *
 49      */
 50
 51     public static String getCell(int row, int col) throws Exception {
 52
 53         try {
 54             // 通过函数参数指定单元格的行号和列,获取指定单元格的对象;
 55             Cell = ExcelWSheet.getRow(row).getCell(col);
 56             /*
 57              * 1.如果单元格的类型为字符串类型,使用getStringCellValue();来获取单元格的内容;
 58              * 2.如果单元格的类型为数字类型,使用getNumberricCellValue();来获取单元格的内容;
 59              * 注意:getNumberricCellValue();返回的值为double类型,转为为字符串类型,必须在
 60              * getNumberricCellValue();前面加上(" ")双引号,用于强制转换为String类型,不加双引号
 61              * 则会抛错;double类型无法转换为String类型的异常;
 62              *
 63              */
 64             String CellData = Cell.getCellType() == XSSFCell.CELL_TYPE_STRING ? Cell.getStringCellValue() + ""
 65                     : String.valueOf(Math.round(Cell.getNumericCellValue()));
 66             return CellData;
 67         } catch (Exception e) {
 68             e.getStackTrace();
 69             return "";
 70         }
 71
 72     }
 73     /*
 74      * 在Excle中执行单元格写入数据;
 75      *
 76      *
 77      */
 78
 79     public static void setCellData(int rownum, int colnum, String Result) throws Exception {
 80
 81         try {
 82             // 获取excle文件的中行对象;
 83             Row = ExcelWSheet.getRow(rownum);
 84             // 如果单元格为空则返回null;
 85             Cell = Row.getCell(colnum, Row.RETURN_BLANK_AS_NULL);
 86             if (Cell == null) {
 87                 // 当单元格为空是则创建单元格
 88                 // 如果单元格为空无法调用单元格对象的setCellValue方法设定单元格的值 ;
 89                 Cell = Row.createCell(colnum);
 90                 // 创建单元格和后可以通过调用单元格对象的setCellValue方法设置单元格的值了;
 91                 Cell.setCellValue(Result);
 92             } else {
 93                 // 单元格中有内容,则可以直接调用单元格对象的 setCellValue 方法来设置单元格的值;
 94                 Cell.setCellValue(Result);
 95             }
 96             FileOutputStream fileout = new FileOutputStream(ExcelFilePath);
 97             // 将内容写到Excel文件中 ;
 98             ExcelWBook.write(fileout);
 99             // j调用flush方法强制刷新写入文件;
100             fileout.flush();
101             fileout.close();
102             System.out.println("-----写入成功!------");
103         } catch (Exception e) {
104             System.out.println(e.getMessage() + e.getStackTrace());
105             throw (e);
106         }
107
108     }
109
110     public static void TangsetCellData(int RowNum, int ColNum, String Result) {
111         try {
112             // 获取行对象
113             Row = ExcelWSheet.getRow(RowNum);
114             // 如果单元格为空,则返回null
115             Cell = Row.getCell(ColNum, Row.RETURN_BLANK_AS_NULL);
116             if (Cell == null) {
117                 // 当单元格对象是Null时,则创建单元格
118                 // 如果单元格为空,无法直接调用单元格的setCellValue方法设定单元格的值
119                 Cell = Row.createCell(RowNum);
120                 // 调用setCellValue方法设定单元格的值
121                 Cell.setCellValue(Result);
122             } else {
123                 // 单元格中有内容,则可以直接调用seCellValue方法设定单元格的值
124                 Cell.setCellValue(Result);
125             }
126             // 实例化写入Excel文件的文件输出流对象
127             FileOutputStream fileOut = new FileOutputStream(ExcelFilePath);
128             // 将内容写入Excel中
129             ExcelWBook.write(fileOut);
130             fileOut.flush();
131             fileOut.close();
132         } catch (Exception e) {
133             // TODO: handle exception
134             e.printStackTrace();
135         }
136     }
137
138     // 从excel 文件中获取测试数据的静态方法;
139     public static Object[][] getTestData(String excelFilePath, String sheetName) throws Exception {
140         // 根据参数传入的数据文件路径和文件名称,组合出Excel 数据文件的绝对路径
141         // 声明一个文件;
142         File file = new File(excelFilePath);
143         // 创建FileInputStream 来读取Excel文件内容;
144         FileInputStream inputStream = new FileInputStream(file);
145         // 声明Workbook 对象;
146         Workbook workbook = null;
147         // 获取文件名参数的扩展名,判断是“.xlsx” 还是 “.xls” ;
148         String fileExtensionName = excelFilePath.substring(excelFilePath.indexOf(‘.‘));
149         if (fileExtensionName.equals(".xlsx")) {
150             workbook = new XSSFWorkbook(inputStream);
151
152         } else if (fileExtensionName.equals(".xls")) {
153             workbook = new HSSFWorkbook(inputStream);
154
155         }
156         Sheet sheet = workbook.getSheet(sheetName);
157         // 获取Excel 数据文件Sheet1 中数据的行数,getLastRowNum 方法获取数据的最后一行的行号,
158         // getFistRowNum 获取第一行 最后一行减去第一行就是总行数了
159         // 注意excle 的行和列都是从0开始的;
160         int rowCount = sheet.getLastRowNum() - sheet.getFirstRowNum();
161         // 创建名为records 的List对象来存储从Excel文件中读取的数据;
162         List<Object[]> records = new ArrayList<Object[]>();
163         // 使用for循环遍历Excel 数据文件的所有数据(除了第一行,第一行为标题行),所以i从1开始而不是从0开始;
164
165         for (int i = 1; i < rowCount + 1; i++) {
166             // 使用getRow来获取行对象;
167             Row row = sheet.getRow(i);
168             /*
169              * 声明一个数据,用来存储Excel数据文件每行中的测试用例和数据,数据的大小用getLastCellNum-2
170              * 来进行动态声明,实现测试数据个数和数组大小一致,
171              * 因为Excel数据文件中的测试数据行的最后一个单元格是测试执行结果,倒数第二个单元格为此测试数据行是否运行的状态位,
172              * 所以最后俩列的单元格数据并
173              * 不需要传入测试方法中,所以是用getLastCellNum-2的方式去掉每行中的最后俩个单元格数据,计算出需要存储的测试数据个数,
174              * 并作为测试数据数组的初始化大小
175              *
176              */
177             String fields[] = new String[row.getLastCellNum() - 2];
178
179             /*
180              * 判断数据行是否要参与测试的执行,Excel 文件的倒数第二列为数据行的状态位, 标记为“y”
181              * 表示此数据行要被测试脚本执行,标记为非“y”的数据行均被认为不会参数测试脚本执行,会被跳过;
182              */
183
184             if (row.getCell(row.getLastCellNum() - 2).getStringCellValue().equals("y")) {
185                 for (int j = 0; j < row.getLastCellNum() - 2; j++) {
186                     /*
187                      * 判断Excel 单元格的内容是数字还是字符, 字符格式调用:
188                      * row.getCell(j).getStringCellValue();
189                      * 数字格式调用:row.getCell(j).getNumericCellValue();
190                      */
191                     fields[j] = (String) (row.getCell(j).getCellType() == XSSFCell.CELL_TYPE_STRING
192                             ? row.getCell(j).getStringCellValue() : "" + row.getCell(j).getNumericCellValue());
193
194                 }
195                 // fields 存储到数组当中;
196                 records.add(fields);
197
198             }
199         }
200
201         /*
202          * 定义函数的返回值,即Object[] [] 将存储测试数据的list 转换为一个Object 的二维数组;
203          */
204         Object[][] results = new Object[records.size()][];
205         for (int i = 0; i < records.size(); i++) {
206             results[i] = records.get(i);
207         }
208
209         return results;
210
211     }
212
213     public static int getLastColumnNum() {
214
215         return ExcelWSheet.getRow(0).getLastCellNum() - 1;
216     }
217
218     public static void main(String[] args) throws Exception {
219
220         //ExcleUtil.setCellData(3,3,"hellojava!");
221         //System.out.println(ExcleUtil.getCell(3,1) );
222                ;
223
224
225
226     }
227
228
229 }

3.HttpInterfaceTest --接口 get 和 post 的方法 ;

  1 package main.java;
  2 import net.sf.json.JSONObject;
  3 import java.io.BufferedReader;
  4 import java.io.IOException;
  5 import java.io.InputStreamReader;
  6 import java.io.PrintWriter;
  7 import java.net.URL;
  8 import java.net.URLConnection;
  9 import java.util.List;
 10 import java.util.Map;
 11
 12 /**
 13  * Created by ty on 2017/8/17.
 14  */
 15 public class HttpInterfaceTest {
 16
 17
 18     public String sendGet(String url, String param) {
 19         String result = "";
 20         BufferedReader in = null;
 21         try {
 22             String urlName = url + "?" + param;
 23             System.out.println("Get请求接口:" + urlName);
 24             URL realUrl = new URL(urlName);
 25             // 打开和URL之间的连接
 26             URLConnection conn = realUrl.openConnection();
 27             // 设置通用的请求属性
 28             conn.setRequestProperty("accept", "*/*");
 29             conn.setRequestProperty("connection", "Keep-Alive");
 30             conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");
 31             // 建立实际的连接
 32             conn.connect();
 33             // 获取所有响应头字段
 34             Map<String, List<String>> map = conn.getHeaderFields();
 35             // 遍历所有的响应头字段
 36             for (String key : map.keySet()) {
 37                 System.out.println(key + "--->" + map.get(key));
 38             }
 39             // 定义BufferedReader输入流来读取URL的响应
 40             in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
 41             String line;
 42             while ((line = in.readLine()) != null) {
 43                 result += "\n" + line;
 44             }
 45         } catch (Exception e) {
 46          //   System.out.println("发送GET请求出现异常!" + e);
 47             e.printStackTrace();
 48         }
 49         // 使用finally块来关闭输入流
 50         finally {
 51             try {
 52                 if (in != null) {
 53                     in.close();
 54                 }
 55             } catch (IOException ex) {
 56                 ex.printStackTrace();
 57             }
 58         }
 59         return result;
 60     }
 61
 62     /**
 63      * 向指定URL发送POST方法的请求
 64      *
 65      * @param url   发送请求的URL
 66      * @param param 请求参数,请求参数应该是name1=value1&name2=value2的形式或者是json。
 67      * @return URL所代表远程资源的响应
 68      */
 69     public String sendPost(String url, String param) {
 70         PrintWriter out = null;
 71         BufferedReader in = null;
 72         String result = "";
 73         String jsonName="Content=";
 74         try {
 75             URL realUrl = new URL(url);
 76             // 打开和URL之间的连接
 77             URLConnection conn = realUrl.openConnection();
 78             // 设置通用的请求属性
 79             conn.setRequestProperty("accept", "*/*");
 80             conn.setRequestProperty("connection", "Keep-Alive");
 81          conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)") ;
 82             //Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0)
 83            // conn.setRequestProperty("Content-Type", "application/json; charset=utf-8");
 84             conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
 85            // application/x-www-form-urlencoded
 86             // 发送POST请求必须设置如下两行
 87             conn.setDoOutput(true);
 88             conn.setDoInput(true);
 89
 90             // 获取URLConnection对象对应的输出流
 91             out = new PrintWriter(conn.getOutputStream());
 92             // 发送请求参数
 93             out.print(jsonName+param);
 94             System.out.println("jsonName+param="+jsonName+param);
 95             // flush输出流的缓冲
 96             out.flush();
 97             // 定义BufferedReader输入流来读取URL的响应
 98             in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
 99             String line;
100             while ((line = in.readLine()) != null) {
101                 result += "\n" + line;
102             }
103         } catch (Exception e) {
104             System.out.println("Send Post Excepion :" + e);
105             e.printStackTrace();
106         }
107         // 使用finally块来关闭输出流、输入流
108         finally {
109             try {
110                 if (out != null) {
111                     out.close();
112                 }
113                 if (in != null) {
114                     in.close();
115                 }
116             } catch (IOException ex) {
117                 ex.printStackTrace();
118             }
119         }
120         return result;
121     }
122
123
124   /*  public static void main(String[] args) {
125
126         HttpInterfaceTest httpInterfaceTest = new HttpInterfaceTest();
127
128         System.out.println("----------------");
129          String cissUrl="http://192.168.1.110:7001/CISS/MSG/callTrxMsgManager.action";
130         String PostValue = "{MESSAGEID:‘ZTS00120170914110859000043‘,\n" +
131                 "INTERFACETYPE:‘S001‘,\n" +
132                 "UNITID:‘10001‘,\n" +
133                 "CNFULLNAME:‘测试机构12222‘,\n" +
134                 "CNABBRNAME:‘测试机构12222‘,\n" +
135                 "PINYIN:‘CSJG1222‘,\n" +
136                 "ENFULLNAME:‘CESHIJIGOU‘,\n" +
137                 "ENABBRNAME:‘CESHIJIGOU‘\n" +
138                 "}";
139
140         JSONObject CissjsonPostParams = JSONObject.fromObject(PostValue);
141         String postResult = httpInterfaceTest.sendPost(cissUrl, CissjsonPostParams.toString());
142         System.out.println("POST请求参数二:" + CissjsonPostParams);
143         System.out.println( postResult);
144     }*/
145 }

4.TestHttpInterfaceTest ---1 。2 。3 联合测试接口;

  1 package main.test;
  2
  3 import main.java.DateUtil;
  4 import main.java.ExcelReader;
  5 import main.java.ExcleUtil;
  6 import main.java.HttpInterfaceTest;
  7 import net.sf.json.JSONException;
  8 import net.sf.json.JSONObject;
  9 import org.testng.annotations.BeforeTest;
 10 import org.testng.annotations.DataProvider;
 11 import org.testng.annotations.Test;
 12
 13 import java.text.SimpleDateFormat;
 14 import java.util.Date;
 15
 16 /**
 17  * Created by  on 2017/9/5.
 18  */
 19 public class TestHttpInterfaceTest {
 20     public static HttpInterfaceTest ht;
 21     static ExcleUtil excleUtil;
 22     ExcelReader ex;
 23     SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 24     ;
 25     @BeforeTest
 26     public void init() {
 27         String ExcelFilePath = "C:\\C\\TEST1.xlsx";
 28         String sheetName = "Sheet1";
 29         ht = new HttpInterfaceTest();
 30         ex = new ExcelReader(ExcelFilePath, sheetName);
 31         try {
 32             excleUtil.setExcleFile(ExcelFilePath, sheetName);
 33         } catch (Exception e) {
 34             e.printStackTrace();
 35         }
 36     }
 37
 38     @Test(dataProvider = "dp")
 39     public void testSendPost(Object... obj) throws Exception {
 40         String rowNum = "";
 41         String Url = "";
 42         String effect = "";
 43         String paras = "";
 44         String Contents = "";
 45         String times = "";
 46         for (int i = 0; i < obj.length; i++) {
 47             rowNum = (String) obj[0];
 48             Url = (String) obj[1];
 49             effect = (String) obj[2];
 50             paras = (String) obj[3];
 51
 52         }
 53         //String rowNum, String Url, String effect, String paras,String Contents ,String times
 54         System.out.println("rowNum=" + rowNum + ";  URL=" + Url + " ;" + effect + "   paras=" + paras + Contents + times);
 55         Integer it = new Integer(rowNum);
 56         int row = it.intValue();
 57         if (paras.contains("&")) {
 58             String s1 = ht.sendPost(Url, paras);
 59             String date = DateUtil.format();
 60             excleUtil.setCellData(row, 3, s1);
 61             excleUtil.setCellData(row, 4, date);
 62             System.out.println(s1);
 63         } else {
 64             try {
 65                /* JSONObject jsonObject = JSONObject.fromObject(paras);
 66                 String s  =  ht.sendPost(Url, jsonObject.toString());*/
 67                 String testTimes =df.format(new Date());
 68                 String s = ht.sendPost(Url, paras);
 69                 JSONObject jsonObject = JSONObject.fromObject(s);
 70                 String MESSAGEID = jsonObject.getString("MESSAGEID");
 71                 String RESULTCODE = jsonObject.getString("RESULTCODE");
 72                 if (RESULTCODE.equals("0")) {
 73                     excleUtil.setCellData(row, 4, RESULTCODE + ":ACK成功");
 74                     excleUtil.setCellData(row, 5, df.format(new Date()));
 75                 } else if (RESULTCODE.equals("E000")) {
 76                     excleUtil.setCellData(row, 4, RESULTCODE + "其他");
 77                     excleUtil.setCellData(row, 5, df.format(new Date()));
 78                 } else if (RESULTCODE.equals("E001")) {
 79                     excleUtil.setCellData(row, 4, RESULTCODE + "必填项数据为空值");
 80                     excleUtil.setCellData(row, 5, df.format(new Date()));
 81                 } else if (RESULTCODE.equals("E002")) {
 82                     excleUtil.setCellData(row, 4, RESULTCODE + "必填项在数据库中没有匹配数据");
 83                     excleUtil.setCellData(row, 5, df.format(new Date()));
 84                 } else if (RESULTCODE.equals("E003")) {
 85                     excleUtil.setCellData(row, 4, RESULTCODE + "唯一项在数据库中重复");
 86                     excleUtil.setCellData(row, 5, df.format(new Date()));
 87                 } else if (RESULTCODE.equals("E004")) {
 88                     excleUtil.setCellData(row, 4, RESULTCODE + "传过来的关键字段不同属于一条记录;");
 89                     excleUtil.setCellData(row, 5, df.format(new Date()));
 90                 } else if (RESULTCODE.equals("E005")) {
 91                     excleUtil.setCellData(row, 4, RESULTCODE + "没有满足前提条件。如:当前日期范围内还没有维护汇率信息,请先行维护!");
 92                     excleUtil.setCellData(row, 5, df.format(new Date()));
 93                 } else if (RESULTCODE.equals("E006")) {
 94                     excleUtil.setCellData(row, 4, RESULTCODE + "类型转化异常,");
 95                     excleUtil.setCellData(row, 5, df.format(new Date()));
 96                 } else if (RESULTCODE.equals("E007")) {
 97                     excleUtil.setCellData(row, 4, RESULTCODE + " 所填数据不在给定范围内 ");
 98                     excleUtil.setCellData(row, 5, df.format(new Date()));
 99                 } else if (RESULTCODE.equals("E008")) {
100                     excleUtil.setCellData(row, 4, RESULTCODE + " 数据格式不正确 ");
101                     excleUtil.setCellData(row, 5, df.format(new Date()));
102                 } else if (RESULTCODE.equals("E009")) {
103                     excleUtil.setCellData(row, 4, RESULTCODE + "在当前数据状态下不能进行操作");
104                     excleUtil.setCellData(row, 5, df.format(new Date()));
105                 } else if (RESULTCODE.equals("E010")) {
106                     excleUtil.setCellData(row, 4, RESULTCODE + " 该经纪人已在清算系统中存在,状态:正常 ");
107                     excleUtil.setCellData(row, 5, df.format(new Date()));
108                 } else if (RESULTCODE.equals("E011")) {
109                     excleUtil.setCellData(row, 4, RESULTCODE + " 该经纪人已在清算系统中存在,状态:禁用");
110                     excleUtil.setCellData(row, 5, df.format(new Date()));
111                 }
112
113                 System.out.println(s);
114             } catch (JSONException jsonException) {
115                 excleUtil.setCellData(row, 4, " 响应结果 ");
116                 excleUtil.setCellData(row, 5, " 响应时间 ");
117                 System.out.println("标题行不能进行转换!");
118             } catch (Exception e) {
119                 excleUtil.setCellData(row, 4, " Exception  ");
120                 excleUtil.setCellData(row, 5, "  Exception");
121                 e.printStackTrace();
122                 System.out.println("标题行不能进行转换!");
123             }
124
125         }
126
127
128     }
129
130     @DataProvider
131     public Object[][] dp() {
132         Object[][] sheetData2 = ex.getSheetData2();
133         System.out.println(sheetData2.length + "------------");
134         for (int i = 1; i < sheetData2.length; i++) {
135             for (int j = 0; j < sheetData2[i].length - 1; j++) {
136                 System.out.print(sheetData2[i][j] + " | ");
137             }
138             System.out.println();
139         }
140
141         return sheetData2;
142     }
143 }

时间: 2024-10-02 22:57:21

第二版_TestNG+Excel+(HTTP+JSON) 简单接口测试的相关文章

TestNG+Excel+(HTTP+JSON) 简单接口测试

说明: 1.使用Exce作为数据存放地: 2.使用TestNG的Datarprovide 做数据供应: 3.不足的地方没有指定明确的result_code , error_code , ERROR_MSG ,如果知道明确规定error_code就可以直接用error_code来作为测试结果: 4.代码有许多需要改动的地方本次是第一版: 5.可以将整个小项目打成jar包执行,将excle的文件放入C盘根目录即可(毕竟每个电脑都有C盘,这样就不受机器的限制了) 6.关于本次用到的jar包有 一,读取

简单的web三层架构系统【第二版】

昨天写了 web三层架构的第一版,准确的说是三层架构的前期,顶多算是个二层架构,要慢慢完善. 第一版里,程序虽说能运行起来,但是有一个缺陷,就是里面的SQL语句,是使用的拼接字符进行执行.这样安全系数很低,如果有心人的话,可能会SQL注入,重新拼接字符,然后篡改我们的数据库内容,导致不可挽回的损失. 在第二版本,也就是这一版里,我对原来的SQL语句进行了重构,使用带参数的SQL语句对数据库进行操作,这样做的好处是,无论用户输入的是什么格式的字符,SQL语句都会原封不动的把这些字符写入到数据库中,

DirectX 9.0c游戏开发手记之“龙书”第二版学习笔记之8: Chap10: Lighting

这一章讲的是光照.光照(lighting)是Direct3D中非常重要的概念,而与之相对应的是材质(material)的概念.如果没有材质的话,那么光照的作用也无法体现. 在较早一些的关于DirectX 9的编程入门书籍里,一般是使用D3DLIGHT9结构体来建立一个光源,而用D3DMATERIAL9结构体来定义物体的材质.我们要做的就是一些很琐碎的家务活,基本上就是创建这些结构体对象.设定其中的参数.启用光照之类的,至于具体实现的细节就非吾等所需(和所能)操心的了. 不过在我们的"龙书&quo

把妹导论第二版(Hunting-Girls Introduction II)

之所以要写这个东西,因为一些感悟.还有就是对前人的尊重.各位看官随便看看. 1.为何叫Hunting-Girls Introduction第二版? History:在ACM界中有一位大师,人送江湖称号白衣少年.人称白神.大家可以再wiki里看: http://acmdiy.org/wiki/index.php?title=白衣少年; Contents:白神精于把妹,有传说与<算法导论>与之相匹的<把妹导论>,正是<Hunting-Girls Introduction>.

python基础学习05(核心编程第二版)部分

# -*- coding: utf-8 -*- # ==================== #File: python #Author: python #Date: 2014 #==================== __author__ = 'Administrator' #dict{键:值} #哈希 #注:字典是无顺序的,所以你懂的 #创建与赋值 dict1={} dict2={'name':'apply','avg':24,'sex':'man'} print dict1,dict2

Python核心编程(第二版) 第四章习题答案

4-1.Python对象.与所有Python对象有关的三个属性是什么?请简单的描述一下.答:与所有Python对象有关的三个属性是身份.类型.值.身份:每一个对象都有一个唯一的身份标识自己,任何对象的身份可以使用内建函数id()来得到.这个值可以被认为是该对象的内存地址.类型:对象的类型决定了该对象可以保存什么类型的值,可以进行什么样的操作,以及遵循什么规则.可以用内建函数type()来查看Python的类型.值:对象表示的数据项.4-2.类型.不可更改(immutable)指的是什么?Pyth

读《构建之法 现代软件工程(第二版)》

1.读后感: 对于计算机相关专业的学生来说,我们学习了很多的专业课程,像编程语言.算法.数据结构.编译原理.软件工程等.但是我相信很多同学和我一样仍然对于我们现在学到的课程在之后有什么用心存疑惑.也就是说,大家都觉得理论和实践之间有着不可逾越的鸿沟.然而在读到邹欣老师的这本书<构建之法 现代软件工程(第二版)>的时候,我解决了我一直纠结的这个问题. 因为作业要求,第一遍是快速阅读,虽然仍然对书里的一些内容有些疑问,但是仍然觉得这本书有很多特点: (1)文字+图画:很多专业书都有一个问题就是整本

Zbus的JFinal插件实现第二版

第一版实现: 实现了Zbus的JFinal插件,JFinal里用Zbus更方便了. 第二版主要实现了以下目标: 1)简化设计,去掉了异步发送,仅支持同步发送. 2)信息发送/接收实现了泛型支持. 3)可直接发送/接收JFinal中特有的Model对象和Record对象. 导入dist目录下的jfinal-zbus-2.0.0.jar 同时还需要导入zbus,znet,fastjson,jfinal等jar包 配置代码如下: ZbusPlugin zp = new ZbusPlugin(); zp

python基础学习07(核心编程第二版)部分

# -*- coding: utf-8 -*- # ==================== #File: python #Author: python #Date: 2014 #==================== __author__ = 'Administrator' #file与input output #文件对象 #简单说来,就是写入和读取的方式 #file(),open()2个操作都是一样的,一般推荐open() #语法 # open(name[, mode[, bufferin