从excel中读取数据

package com.common;

import jxl.Sheet;
import jxl.Workbook;
import jxl.WorkbookSettings;
import jxl.format.Colour;
import jxl.format.UnderlineStyle;
import jxl.write.*;
import org.apache.log4j.Logger;
import org.testng.Assert;

import java.io.*;
import java.util.*;


/**
 * Excel放在Data文件夹下</p>
 * Sheet名称为接口名称
 */
public class ExcelDataProvider {

    Map<String, Object> Input = new HashMap<String, Object>();

    private static Logger logger = Logger.getLogger(ExcelDataProvider.class.getName());

    public ExcelDataProvider() {

    }

    public ExcelDataProvider(String classname, String testName, String projectPath) {

        try {
            int dotNum = classname.indexOf(".");
            if (dotNum > 0) {
                classname = classname.substring(classname.lastIndexOf(".") + 1,
                        classname.length());
            }
            String xlFilePath = "testcase/";
            String fileName = xlFilePath + projectPath + ".xls";
            String excelPath = GlobalSettings.USER_DIR + "/" + fileName;
            String excelName = FileUtil.getName(excelPath);
            String projectFullPath = FileUtil.getParent(excelPath);
            String projectName = FileUtil.getName(projectFullPath);
            String productFullPath = FileUtil.getParent(projectFullPath);
            String productName = FileUtil.getName(productFullPath);
            String projectFullType = FileUtil.getParent(productFullPath);
            String projectType = FileUtil.getName(projectFullType);

            GlobalSettings.PRJ_NAME = projectName;
            GlobalSettings.REPORT_PRJ_NAME = excelName.replace(".xls", "");
            WorkbookSettings wbSettings = new WorkbookSettings();
            wbSettings.setSuppressWarnings(true);
            Workbook book = Workbook.getWorkbook(new File(fileName), wbSettings);

            Sheet sheet = book.getSheet("Menu");
            boolean blfg = false;
            boolean readSQL = false;
            boolean isReadExpect = false;
            for (int i = 0; i < sheet.getRows(); i++) {
                if (sheet.getCell(1, i).getContents().toString().trim().equals(classname)) {
                    Input.put("Ishttp", sheet.getCell(4, i).getContents().toString());
                    Input.put("Method", sheet.getCell(5, i).getContents().toString());
                    if (null != sheet.getCell(6, i) && CommonUtil.matchValues(sheet.getCell(6, i).getContents(), "json")) {//Json格式请求
                        String tmpUrl = sheet.getCell(2, i).getContents().toString() + sheet.getCell(3, i).getContents().toString();
                        Input.put("URL", tmpUrl.replace("{{url}}", GlobalSettings.EOS_URL));
                        Sheet sheet2 = book.getSheet(classname);
                        for (int j = 0; j < sheet2.getRows(); j++) {
                            if (sheet2.getCell(1, j).getContents().toString().trim().equals(testName)) {
                                Input.put("Description", sheet2.getCell(2, j).getContents());
                                Input.put("Parameters", sheet2.getCell(3, j).getContents().toString());
                                Input.put("Expect", sheet2.getCell(5, j).getContents().toString());
                                String readSql = sheet2.getCell(4, j).getContents().toString();
                                Input.put("ReadSql", readSql);
                                if (readSql.equals("Y")) {
                                    readSQL = true;
                                }
                                if (sheet2.getColumns() > 6) {
                                    String readExpect = sheet2.getCell(6, j).getContents().toString();
                                    Input.put("ReadExpect", readExpect);
                                    if (readExpect.equals("Y")) {
                                        isReadExpect = true;
                                    }
                                }
                                blfg = true;
                                break;
                            }
                        }
                    } else {//表单提交类型或其他
                        String tempURL = sheet.getCell(2, i).getContents().toString() + sheet.getCell(3, i).getContents().toString();
                        tempURL = tempURL.replace("{{url}}", GlobalSettings.EOS_URL);
                        Sheet sheet2 = book.getSheet(classname);
                        for (int j = 0; j < sheet2.getRows(); j++) {
                            if (sheet2.getCell(1, j).getContents().toString().trim().equals(testName)) {
                                Input.put("URL", tempURL + "?" + sheet2.getCell(3, j).getContents());
                                Input.put("Description", sheet2.getCell(2, j).getContents());
                                Input.put("Parameters", sheet2.getCell(3, j).getContents());
                                Input.put("Expect", sheet2.getCell(5, j).getContents());
                                String readSql = sheet2.getCell(4, j).getContents();
                                Input.put("ReadSql", readSql);
                                if (null != sheet2.getCell(4, j) && CommonUtil.matchValues(sheet2.getCell(4, j).getContents(), "Y")) {
                                    readSQL = true;
                                }
                                if (sheet2.getColumns() > 6) {
                                    String readExpect = sheet2.getCell(6, j).getContents();
                                    Input.put("ReadExpect", readExpect);
                                    if (CommonUtil.matchValues(readExpect, "Y")) {
                                        isReadExpect = true;
                                    }
                                }
                                blfg = true;
                                break;
                            }
                        }
                    }
                    break;
                }

            }
            if (!blfg) {
                logger.info("获取" + classname + "数据失败,错误原因为:未找到接口或对应案例");
            }
            if (readSQL) {
                try {
                    String filePath = "./src/main/java/envision/data/" + projectType + "/sql/" + productName + "/" + GlobalSettings.PRJ_NAME + "/" + classname + "/" + testName + ".txt";
                    String fpath = "";
                    File f = new File(filePath);
                    if (f.exists()) {
                        fpath = f.getAbsolutePath();
                        FileInputStream in = new FileInputStream(fpath);
                        // 指定读取文件时以UTF-8的格式读取
                        BufferedReader br = new BufferedReader(new InputStreamReader(in,
                                "UTF-8"));
                        String str;
                        String tempKey = "";
                        String tempValue = "";
                        List<Map<String, String>> listSql = new ArrayList<Map<String, String>>();
                        while ((str = br.readLine()) != null) {
                            if (str.contains("={")) {
                                tempKey = str.replace("={", "").trim();
                                tempValue = "";
                            } else if (str.trim().equals("}")) {
                                Input.put(tempKey, tempValue);
                                Map<String, String> tempMap = new HashMap<String, String>();
                                tempMap.put(tempKey, tempValue);
                                listSql.add(tempMap);
                            } else {
                                tempValue = tempValue + str;
                            }
                        }
                        Input.put("listSql", listSql);
                    }
                } catch (Exception e) {
                    e.printStackTrace();// 打印错误信息
                }
            }
            if (isReadExpect) {
                try {
                    String filePath = "./src/main/java/envision/data/" + projectType + "/expect/" + productName + "/" + GlobalSettings.PRJ_NAME + "/" + classname + "/" + testName + ".txt";
                    String fpath = "";
                    File f = new File(filePath);
                    if (f.exists()) {
                        fpath = f.getAbsolutePath();
                        FileInputStream in = new FileInputStream(fpath);
                        // 指定读取文件时以UTF-8的格式读取
                        BufferedReader br = new BufferedReader(new InputStreamReader(in,
                                "UTF-8"));
                        String str;
                        String tempValue = "";
                        while ((str = br.readLine()) != null) {
                            tempValue += str;
                        }
                        Input.put("ExpectTxt", tempValue);
                    }
                } catch (Exception e) {
                    e.printStackTrace();// 打印错误信息
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            logger.info("获取" + classname + "数据失败,错误原因为:" + e.toString());
            Assert.fail("unable to read excel data");


        }
    }


    public Iterator<Object[]> getData() {
        List<Object[]> toIter = new ArrayList<>();
        Object[] arrObj = new Object[]{Input};
        toIter.add(arrObj);
        return toIter.iterator();
    }

    public void bakCaseExcel(String excelPath, String projectType, String productName, String projectName, String excelName) throws IOException {
        if (GlobalSettings.TIMESTAMP.isEmpty()) {
            long time = DateFormat.getCurrentTimeMillis();
            String timeT = DateFormat.getDate("yyyyMMddHHmmss", time);
            GlobalSettings.TIMESTAMP = timeT;
            if (!FileUtil.exists(GlobalSettings.RESULT_PATH)) {
                FileUtil.createFloder(GlobalSettings.RESULT_PATH);
            }
            GlobalSettings.RESULT_TYPE_PATH = GlobalSettings.RESULT_PATH + "/" + projectType;
            if (!FileUtil.exists(GlobalSettings.RESULT_TYPE_PATH)) {
                FileUtil.createFloder(GlobalSettings.RESULT_TYPE_PATH);
            }
            GlobalSettings.RESULT_TYPE_PRODUCT_PATH = GlobalSettings.RESULT_TYPE_PATH + "/" + productName;
            if (!FileUtil.exists(GlobalSettings.RESULT_TYPE_PRODUCT_PATH)) {
                FileUtil.createFloder(GlobalSettings.RESULT_TYPE_PRODUCT_PATH);
            }

            GlobalSettings.RESULT_TYPE_PRODUCT_PRJ_PATH = GlobalSettings.RESULT_TYPE_PRODUCT_PATH + "/" + projectName;
            if (!FileUtil.exists(GlobalSettings.RESULT_TYPE_PRODUCT_PRJ_PATH)) {
                FileUtil.createFloder(GlobalSettings.RESULT_TYPE_PRODUCT_PRJ_PATH);
            }

            GlobalSettings.RESULT_TYPE_PRODUCT_PRJ_TIME_PATH = GlobalSettings.RESULT_TYPE_PRODUCT_PRJ_PATH + "/" + timeT;
            FileUtil.createFloder(GlobalSettings.RESULT_TYPE_PRODUCT_PRJ_TIME_PATH);
            GlobalSettings.RESULT_TYPE_PRODUCT_PRJ_TIME_TESTCASE_PATH = GlobalSettings.RESULT_TYPE_PRODUCT_PRJ_TIME_PATH + "/" + excelName;
            // 备份测试用例excel文件
            FileUtil.copyFile(excelPath, GlobalSettings.RESULT_TYPE_PRODUCT_PRJ_TIME_TESTCASE_PATH);
        }
    }

    public void returnData(Map<String, String> mReturn, String classname) {
        if (mReturn == null || mReturn.size() == 0) {
            return;
        }

        WritableWorkbook wwb = null;
        Workbook rwb = null;
        try {
            int dotNum = classname.indexOf(".");

            if (dotNum > 0) {
                classname = classname.substring(classname.lastIndexOf(".") + 1,
                        classname.length());
            }

            String fileName = GlobalSettings.RESULT_TYPE_PRODUCT_PRJ_TIME_TESTCASE_PATH;

            File f = new File(fileName);
            rwb = Workbook.getWorkbook(f);
            //打开一个文件的副本,并且指定数据写回到原文件
            wwb = Workbook.createWorkbook(f, rwb);//copy
            WritableSheet wSheet = wwb.getSheet(classname);

            WritableFont font1 = new WritableFont(WritableFont.ARIAL, 10, WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE, Colour.BLUE);
            WritableCellFormat cf1 = new WritableCellFormat(font1);

            boolean blfg = false;

            for (String str : mReturn.keySet()) {
                for (int i = 1; i < wSheet.getRows(); i++) {
                    if (wSheet.getCell(1, i).getContents().toString().equals(str)) {
                        Label cv = new Label(5, i, mReturn.get(str), cf1);
                        try {
                            wSheet.addCell(cv);
                            break;
                        } catch (Exception e) {
                            e.printStackTrace();
                        }

                    }
                }
            }
            wwb.write();
            wwb.close();
            wwb = null;
            logger.info("finish rebase : " + classname);
        } catch (Exception e) {
            e.printStackTrace();
            logger.info("获取" + classname + "数据失败,错误原因为:" + e.toString());
            Assert.fail("unable to read excel data");

        } finally {
            // 关闭 Excel 工作薄对象
            try {
                if (wwb != null) {
                    wwb.close();
                }
            } catch (WriteException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

}

 

posted on 2018-01-24 15:52  hong_0632  阅读(323)  评论(0编辑  收藏  举报

导航