RestAsured测试框架

基础知识

  • testng重试
    实现方法,增加MtxRetryAnalyzer类,使用时@Test(retryAnalyzer = MtxRetryAnalyzer.class)
import org.testng.IRetryAnalyzer;
import org.testng.ITestResult;

public class MtxRetryAnalyzer implements IRetryAnalyzer {//implements 代表实现IRetryAnalyzer接口
    private int retryCountMtx = 0;
    private final int MAX_RETRY_COUNT = 3;
    @Override
    public boolean retry(ITestResult iTestResult) {//0 1  2   3 < 3
        if (retryCountMtx < MAX_RETRY_COUNT) {
            retryCountMtx++;
            return true;
        }
        return false;
    }
}

测试用例

import org.testng.Assert;
import org.testng.annotations.Test;
public class MtxTest5 {
    @Test(retryAnalyzer = MtxRetryAnalyzer.class)
    public void loginSuccessTest(){
        Assert.fail();
    }
     @Test(invocationCount = 3) //跑3次
public void loginSuccessTest(){
        Assert.fail();
    }
}
  • testNG

实现封装

  1. 最原始的代码
import io.restassured.RestAssured;
import io.restassured.response.Response;
import io.restassured.specification.RequestSpecification;
import org.testng.annotations.Test;
@Test
public void run(){
        RestAssured.baseURI = "http://www.mtxshop.com:7002";//定义baseURI
        RequestSpecification request = RestAssured.given();//创建请求对象
        request.header("uuid","56573820-d6ea-11eb-a2ff-77778112c882");
        request.formParam("username", "rainbow2");
        request.formParam("password", "e10adc3949ba59abbe56e057f20f883e");
        request.formParam("captcha", "1512");
        request.formParam("uuid", "56573820-d6ea-11eb-a2ff-77778112c882");
        request.log().all();//打印请求日志
        Response response = request.post("/passport/login");//发起请求,获取应答
        response.then().log().all();//打印应答日志
        String loginResponseStr = response.asString();
        String path = "$.access_token";
        String token = JsonPathUtil.extract(loginResponseStr, path).toString();
        System.out.println("token=======" + token);
        }
  1. 第一次优化
import io.restassured.RestAssured;
import io.restassured.response.Response;
import io.restassured.specification.RequestSpecification;

        String baseURIStr = "http://www.mtxshop.com:7002";
        String urlStr = "/passport/login";
        String uuidStr = TestDataUtil.getUUID();
        Map<String, String> headersMap = new HashMap<>();
        headersMap.put("uuid", uuidStr);
        Map<String, String> paramsMap = new HashMap<>();
        paramsMap.put("username", "rainbow2");
        paramsMap.put("password", "e10adc3949ba59abbe56e057f20f883e");
        paramsMap.put("captcha", "1512");
        paramsMap.put("uuid", uuidStr);//"56573820-d6ea-11eb-a2ff-77778112c882"
        
        RestAssured.baseURI = baseURIStr;//定义baseURI
        RequestSpecification request = RestAssured.given();//创建请求对象
        /*for (Map.Entry<String, String> header : headers.entrySet()) {
            request.header(header.getKey(), header.getValue());
        }*/
        request.headers(headersMap)
         /*for (Map.Entry<String, String> param : params.entrySet()) {
            request.formParam(param.getKey(), param.getValue());//添加表单参数
        }*/
        request.formParams(paramsMap)
        request.log().all();//打印请求日志
        Response response = request.post(urlStr);//发起请求,获取应答
        response.then().log().all();//打印应答日志
        String loginResponseStr = response.asString();
        
        String path = "$.access_token";
        String token = JsonPathUtil.extract(loginResponseStr, path).toString();
        System.out.println("token=======" + token);
  1. 第二次优化

将请求部分封装

   public static String post(String baseURIStr, String urlStr, Map<String, String> headers, Map<String, String> params) {
        RestAssured.baseURI = baseURIStr;//定义baseURI
        RequestSpecification request = RestAssured.given();//创建请求对象
/*        for (Map.Entry<String, String> header : headers.entrySet()) {
            request.header(header.getKey(), header.getValue());
        }*/
        request.headers(headers);
/*        for (Map.Entry<String, String> param : params.entrySet()) {
            request.formParam(param.getKey(), param.getValue());//添加表单参数
        }*/
        request.formParams(params);
        request.log().all();//打印请求日志
        Response response = request.post(urlStr);//发起请求,获取应答
        response.then().log().all();//打印应答日志
        return response.asString();//将应答报体转成String
    }
        String baseURIStr = "http://www.mtxshop.com:7002";
        String urlStr = "/passport/login";
        String uuidStr = TestDataUtil.getUUID();
        Map<String, String> headersMap = new HashMap<>();
        headersMap.put("uuid", uuidStr);
        Map<String, String> paramsMap = new HashMap<>();
        paramsMap.put("username", "rainbow2");
        paramsMap.put("password", "e10adc3949ba59abbe56e057f20f883e");
        paramsMap.put("captcha", "1512");
        paramsMap.put("uuid", uuidStr);//"56573820-d6ea-11eb-a2ff-77778112c882"
        String loginResponseStr = post(baseURIStr, urlStr, headersMap, paramsMap);
        String path = "$.access_token";
        String token = JsonPathUtil.extract(loginResponseStr, path).toString();
        System.out.println("token=======" + token);

在这里插入图片描述

4.封装(重复使用的部分,高内聚,低耦合)
java中静态方法中调用非静态方法

public class MtxClient {
    public static String baseURI;
    public static String url;
    public static Map<String,String> headers = new HashMap<>();//报头
    public static Map<String,String> cookies = new HashMap<>();//cookies
    public static Map<String,String> params = new HashMap<>();//报体
    public static Response response;  //MtxClient.response
    //构造函数
    public MtxClient(String baseURI,String url,Map<String,String> headers,Map<String,String> params){
        if( !baseURI.isEmpty()  &&   !url.isEmpty() ){
            this.baseURI = baseURI;
            this.url = url;
            if(headers.size() >0 ){
                this.headers = headers;
            }if(params.size() >0){
                this.params = params;
            }
        }
        //写一个方法
public Response sendHttp(String methodHttp) {//非静态方法,调用时需要new 对象
        RequestSpecification request = RestAssured.given();
        request.baseUri(baseURI);
        if (headers.size() > 0) {
            request.headers(headers);
           if(!params.isEmpty()){
                request.formParams(params);
            }
        }
        if(cookies.size()>0){
            request.cookies(cookies);
        }
        String methodHttpLower = methodHttp.trim().toLowerCase();//统一化
        //分支
        switch (methodHttpLower) {
            case "post":
                response = request.post(url);
                break;
            default:
                logger.info("HTTP协议暂未提供该方法的实现~");
                break;
        }
        headers.clear();
        params.clear();
        return response;
    }
    }

public class MtxClientBuyer {
    //定义成员变量
    public static final String BASE_BUYER_URI = "http://www.mtxshop.com:7002";
    public static final String LOGIN_URL = "/passport/login";
    public static final String UUID = TestDataUtil.getUUID();
    public static final String CAPTCHA = "1512";
    public static final String TOKEN_JSON_PATH = "$.access_token";
    public static String token = "";

    public static void login(String username,String password){
        Map<String,String> headers =new HashMap<>();
        headers.put("uuid",UUID);
        Map<String, String> paramsMap = new HashMap<>();
        paramsMap.put("username", username);
        paramsMap.put("password", password);
        paramsMap.put("captcha", "1512");
        paramsMap.put("uuid", UUID);//"56573820-d6ea-11eb-a2ff-77778112c882"
       
        MtxClient mtxClient = new MtxClient(BASE_BUYER_URI,LOGIN_URL,headers,params);
        MtxClient.response  = mtxClient.sendHttp("post");//非静态方法,不可以直接MtxClient..sendHttp("post");
        Response responseLogin = MtxClient.response;
        token = JsonPathUtil.extract(responseLogin.asString(),TOKEN_JSON_PATH).toString();   
    }
}    

    @Test
    public void test02_login(){
        login("rainbow2","e10adc3949ba59abbe56e057f20f883e")
    }

日志集成

依赖包

    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.17</version>
    </dependency>

log4j.properties(放置在resources目录下)

log4j.rootLogger = info,rootFile,console
log4j.logger.org.apache.http = OFF
log4j.logger.freemarker.cache =OFF

#日志文件 log4j.appender.rootFile=org.apache.log4j.RollingFileAppender log4j.appender.rootFile.File=logs/clientlog/info.log
log4j.appender.rootFile.Encoding=UTF8
log4j.appender.rootFile.MaxFileSize=2000KB
log4j.appender.rootFile.MaxBackupIndex=30
log4j.appender.rootFile.Threshold=DEBUG
log4j.appender.rootFile.layout=org.apache.log4j.PatternLayout
log4j.appender.rootFile.layout.ConversionPattern=[mtx-api-test]
%d{yyyy/MM/dd HH:mm:s} %x %5p %t %c:%L - %m %n

#控制台 log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Threshold=DEBUG
log4j.appender.console.ImmediateFlush=true
log4j.appender.console.Target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[mtx-api-test]
%d{yyyy/MM/dd HH:mm:s} %x %5p %t %c:%L - %m %n

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class LoggerStudy {
    private static Log log = LogFactory.getLog(LoggerStudy.class);//定义当前类的日志对象成员变量

    public static void main(String[] args) {
        String text = "mtx";
        log.info("this is info :"+text);//中
        log.debug("this is debug:"+text);//低
        log.error("this is error:"+text);//高
    }
}
import org.apache.log4j.Logger;

public class LoggerStudy2 {
    private static Logger log = Logger.getLogger(LoggerStudy2.class);
    public static void main(String[] args) {
        String text = "mtx";
        log.info("this is info :"+text);//中
        log.debug("this is debug:"+text);//低
        log.error("this is error:"+text);//高
    }
}

常用测试数据

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;

/**
 * @ClassName TestDataUtil
 * @Description TODO
 * @Author 彩虹rainbow  QQ3130978832
 * @Date-Time 2022/3/7 9:36
 * @ProjectName Mtx202201
 * @Copyright 北京码同学网络科技有限公司
 **/
public class TestDataUtil {
    public static String getUUID(){
        return UUID.randomUUID().toString();
    }

    public static String getTimeByFormat(String formatStr){
        SimpleDateFormat sdf  = new SimpleDateFormat();//定义格式化时间对象
        if( formatStr.isEmpty() ){
            formatStr = "yyyyMMddHHmmss";
        }
        sdf.applyPattern(formatStr);
        Date date = new Date();//定义当前时间对象
        return sdf.format(date);
    }

    public static String getTimeByFormat(){
        return getTimeByFormat("");
    }
    public static String phoneRand(){
        Random random = new Random();//定义随机数对象
        StringBuilder stringBuilder = new StringBuilder();//定义变长字符串对象
        String[] phoneSegment = {"130","134","135","136","137","138","139","147","150","151","152","157","158","159","182","183","184","186","187","188"};
        stringBuilder.append( phoneSegment[random.nextInt(phoneSegment.length)] );//[0,length-1]
        for (int i=0;i<8;i++){
            stringBuilder.append(random.nextInt(10));//[0,10)
        }
        return stringBuilder.toString();
    }

    public static String nameRand(){
        Random random = new Random();//定义随机数对象random
        StringBuilder stringBuilder = new StringBuilder();//定义变长字符串对象stringBuilder
        String[] xing = {"赵","钱","孙","李","周","吴","郑","王","冯","陈","褚","卫","蒋","沈","韩","杨","朱","秦","尤","许","何","吕","施","张","万俟","司马","上官","欧阳","夏侯","诸葛","东方","公孙","司徒"};
        String[] ming = {"德辉","方旭","飞轩","彬蔚","芳蕤","彬彬","博裕","芳苓","博闻","芳蔼","承德","博容","博文","朝宗","博艺","澄泓","博雅","澹雅","得韬"};
        stringBuilder.append( xing[random.nextInt(xing.length)] );
        stringBuilder.append( ming[random.nextInt(ming.length)] );
        return stringBuilder.toString();
    }

    public static int numRand(int n, int m){
        return  (int)(Math.random()*(m-n+1)+n);
    }
    /**
     * [min,max]
     * @param min
     * @param max
     * @return
     */
    public static int getRandInt(int min,int max){
        Random random = new Random();
        return random.nextInt(max-min+1)+min;
    }

    /**
     * 随机整数[0,bound]
     * @param bound
     * @return
     */
    public static int getRandInt(int bound){
        Random random = new Random();
        return random.nextInt(bound+1);
    }
    public static String getRandStr(int length){
        final String strs = "0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z";
        String[] str  =strs.split(",");
        int strArrLen = str.length;
        StringBuilder randomStrBuilder = new StringBuilder("");
        for(int i=0;i<length;i++){
            Random random = new Random();
            int tmpInt = random.nextInt(strArrLen);
            randomStrBuilder.append(str[tmpInt]);
        }
        return randomStrBuilder.toString();
    }
    public static String getRandStr(String sourceStr,int length){
        StringBuilder randomStrBuilder = new StringBuilder("");
        char[]  charArray = sourceStr.toCharArray();
        for(int i=0;i<length;i++){
            Random random = new Random();
            int randomInt = random.nextInt(sourceStr.length());
            randomStrBuilder.append(charArray[randomInt]);
        }
        return randomStrBuilder.toString();
    }

    /**
     * [1,rightBoundary)
     * @param rightBoundary
     * @return
     */
    public static int getRandIntExcludedZero(int rightBoundary){
        Random random = new Random();
        int tmpInt = 0;
        while (tmpInt == 0){
            tmpInt = random.nextInt(rightBoundary);
        }
        return tmpInt;
    }
    /**
     * 随机数字字符串,由0-9字符随机组合,长度为length
     * @param length
     * @return
     */
    public static String getNumStr(int length){
        StringBuilder stringBuilder = new StringBuilder("");
        while (stringBuilder.length()<length){
            Random random = new Random();
            int tempInt = random.nextInt(10);//[0,10)
            stringBuilder.append(tempInt);
            if(stringBuilder.toString().startsWith("0")){
                stringBuilder.deleteCharAt(0);
            }
        }
        return stringBuilder.toString();
    }

    public static void myRandomStudy(){
        Random random = new Random();
        System.out.println(random.nextLong());//19位随机整数,包括正负
        System.out.println(random.nextInt());//10位随机整数,包括正负
        System.out.println(random.nextDouble());//大于0小于1的小数,小数点后17位
        System.out.println(random.nextDouble()*10);//随机小数扩大10倍
        System.out.println( (long)(random.nextDouble()*100) );//随机小数扩大100倍 再转长整型
        System.out.println(Math.abs(random.nextLong()));//19位随机整数,仅正
        System.out.println(Math.abs(random.nextInt()));//10位随机整数,仅正
    }

    /**
     * 随机13位的时间戳
     * @param begin
     * @param end
     * @return
     */
    public static long getRandTimestamp(long begin,long end){
        long diff = (long)(Math.random()*(end - begin));
        long rand = begin + diff;
        if(rand == begin || rand == end){//StackOverflow
            return getRandTimestamp(begin,end);
        }
        return rand;
    }
    public static String getRandDate(String begin,String end){
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        long randDateLong = 0;
        try {
            Date startDate = format.parse(begin);//将字符串转成Date对象
            Date endDate = format.parse(end);//日期数据由字符串变量存储改为由Date"变量"存储
            if(startDate.getTime() >= endDate.getTime()){
                randDateLong = getRandTimestamp(endDate.getTime(),startDate.getTime());
            }else{
                randDateLong = getRandTimestamp(startDate.getTime(),endDate.getTime());
            }
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return format.format(new Date(randDateLong));
    }
    public static String getRandDateTime(String format,String begin,String end){
        SimpleDateFormat formatDate = null;
        if(format.isEmpty()){
            formatDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        }else{
            formatDate =  new SimpleDateFormat(format);
        }
        long randDateLong = 0;
        try {
            Date startDate = formatDate.parse(begin);
            Date endDate = formatDate.parse(end);
            if(startDate.getTime() >= endDate.getTime()){
                randDateLong = getRandTimestamp(endDate.getTime(),startDate.getTime());
            }else{
                randDateLong = getRandTimestamp(startDate.getTime(),endDate.getTime());
            }
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return formatDate.format(new Date(randDateLong));
    }
        /**
     * 随机数
     * @param minimum
     * @param maximum
     * @return
     */
    public static String randomNumer(String minimum,String maximum) {
        long min = Long.parseLong(minimum.trim());
        long max = Long.parseLong(maximum.trim());
        long rand = ThreadLocalRandom.current().nextLong(min, max + 1L);
        String randString = Long.toString(rand);
        return randString;
    }

Excel文件处理

依赖包

<dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi</artifactId>
      <version>3.12</version>
    </dependency>
    <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi-ooxml</artifactId>
      <version>3.12</version>
    </dependency>

读取excel文件-全

import org.apache.log4j.Logger;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

public class ExcelUtil {
    private static Logger logger = Logger.getLogger(ExcelUtil.class);
    public XSSFWorkbook excelWorkbook;//excel
    public XSSFSheet xssfSheet;//工作表
    public Row row;//行
    public Cell cell;//单元格
    public static final String BASE_PATH_FILE = "src/main/resources/";
    //public static StringBuilder projectPathFile = new StringBuilder();
    public static StringBuilder pathNameFile = new StringBuilder(BASE_PATH_FILE);
    public ExcelUtil(String projectPath,String excelName){
        try {
            FileInputStream fileInputStream = new FileInputStream(new File(pathNameFile.append(projectPath).append(excelName).toString()));
            this.excelWorkbook = new XSSFWorkbook(fileInputStream);
        } catch (Exception e) {
        //e.printStackTrace();
            logger.error(e.getMessage(),e);
        }
    }
//读取全部的工作表内容
    public Object[][] getSheetData(String sheetName){
        int rowNum = excelWorkbook.getSheet(sheetName).getLastRowNum();
        int colNum = excelWorkbook.getSheet(sheetName).getRow(0).getLastCellNum();
        Object[][] data = new Object[rowNum][colNum];
        for (int i = 1; i <=rowNum; i++) {
            for (int j = 0; j < colNum; j++) {
                String cellData = getCellData(sheetName,i,j);
                data[i-1][j] = cellData;
            }
        }
        return data;
    }

//拿到单元格中的数据,
    public String getCellData(String sheetName,int rownum,int colnum){//列数、列数都是从0开始计数 的
        StringBuilder cellValue = new StringBuilder("");
        try{
            xssfSheet = excelWorkbook.getSheet(sheetName);//工作表
            row = xssfSheet.getRow(rownum);
            cell = row.getCell(colnum);
            logger.info(cell.getCellType());
            if( cell.getCellType() == XSSFCell.CELL_TYPE_BOOLEAN ){
                cellValue.append(String.valueOf(cell.getBooleanCellValue()));
            }else if(cell.getCellType() == XSSFCell.CELL_TYPE_STRING){
                cellValue.append( cell.getStringCellValue());
            }else if(cell.getCellType()==XSSFCell.CELL_TYPE_NUMERIC){
                short format = cell.getCellStyle().getDataFormat();
                if(format==14 || format == 31 || format == 57 || format == 58 || format == 177 || format == 179){
                    DateFormat formater = new SimpleDateFormat("yyyy-MM-dd");
                    Date date = DateUtil.getJavaDate(cell.getNumericCellValue());
                    cellValue.append(formater.format(date));
                }else if (format == 20 || format == 32 || format == 180 ) {
                    DateFormat formater = new SimpleDateFormat("HH:mm");
                    Date date = DateUtil.getJavaDate(cell.getNumericCellValue());
                    cellValue.append(formater.format(date));
                }else {
                    DecimalFormat df = new DecimalFormat("0");
                    cellValue.append(df.format(cell.getNumericCellValue()));
                }
            }else if(cell.getCellType()==XSSFCell.CELL_TYPE_BLANK){
                cellValue.append("");
            }else{
                cellValue.append(cell.getStringCellValue());
            }
            logger.info("读取【"+sheetName+"】的第【"+rownum+"】行第【"+colnum+"】列的值是:"+cellValue);
        }catch (Exception e){
            logger.error("行号【"+rownum+"】,列号【"+colnum+"】的单元格内容为空~");
            logger.error(e.getMessage(),e);
        }
        return cellValue.toString();
    }
//关闭读取p流
    public void close(){
        try {
            excelWorkbook.close();
        }catch (IOException e){
            logger.error(e.getMessage(),e);
        }
    }

    public static void main(String[] args) {
        ExcelUtil excelUtil = new ExcelUtil("mtxcrm_params/","crmdata.xlsx");
        excelUtil.getCellData("新建产品",3,1);
    }
}

读取excel文件-01-单元格类型是字符串类型
XSSFCell.CELL_TYPE_STRING

public class ExcelUtil {
    private static Logger logger = Logger.getLogger(ExcelUtil.class);
    public XSSFWorkbook excelWorkbook;//excel
    public XSSFSheet xssfSheet;//sheet
    public Row row;//行
    public Cell cell;//单元格
    public static final String BASE_PATH_FILE = "src/main/resources/";
    //public static StringBuilder projectPathFile = new StringBuilder();
    public static StringBuilder pathNameFile = new StringBuilder(BASE_PATH_FILE);
    
    public ExcelUtil(String projectPath,String excelName){
        try {
            FileInputStream fileInputStream = new FileInputStream(new File(pathNameFile.append(projectPath).append(excelName).toString()));
            this.excelWorkbook = new XSSFWorkbook(fileInputStream);
        } catch (Exception e) {
            logger.error(e.getMessage(),e);
        }
    }
    
    public String getCellData(String sheetName,int rownum,int colnum){//列数、列数都是从0开始计数 的
        StringBuilder cellValue = new StringBuilder("");
        try{
            xssfSheet = excelWorkbook.getSheet(sheetName);
            row = xssfSheet.getRow(rownum);
            cell = row.getCell(colnum);
            logger.info(cell.getCellType());
            logger.info(cell.getStringCellValue());
            
            //(cell.getCellType() == XSSFCell.CELL_TYPE_STRING
            cellValue.append(String.valueOf(cell.getStringCellValue()));//当单元格类型是字符串类型的时候
            
             }catch (Exception e){
            logger.error("行号【"+rownum+"】,列号【"+colnum+"】的单元格内容为空~");
            logger.error(e.getMessage(),e);
        }
        return cellValue.toString();
}        

读取excel文件-02-单元格类型时间&日期类型
cell.getCellType()==XSSFCell.CELL_TYPE_NUMERIC

public String getCellData(String sheetName,int rownum,int colnum){//列数、列数都是从0开始计数 的
        StringBuilder cellValue = new StringBuilder("");
        try{
            xssfSheet = excelWorkbook.getSheet(sheetName);
            row = xssfSheet.getRow(rownum);
            cell = row.getCell(colnum);
            logger.info(cell.getCellType());

//cell.getCellType()==XSSFCell.CELL_TYPE_NUMERIC
            short format = cell.getCellStyle().getDataFormat();
                if(format==14 || format == 31 || format == 57 || format == 58 || format == 177 || format == 179){
                    DateFormat formater = new SimpleDateFormat("yyyy-MM-dd");
                    Date date = DateUtil.getJavaDate(cell.getNumericCellValue());
                    cellValue.append(formater.format(date));
                }else if (format == 20 || format == 32 || format == 180 ) {
                    DateFormat formater = new SimpleDateFormat("HH:mm");
                    Date date = DateUtil.getJavaDate(cell.getNumericCellValue());
                    cellValue.append(formater.format(date));
                }else {//非时间类型的,直接提取数值
                    DecimalFormat df = new DecimalFormat("0");
                    cellValue.append(df.format(cell.getNumericCellValue()));
                }


            logger.info(cell.getStringCellValue());
             }catch (Exception e){
            logger.error("行号【"+rownum+"】,列号【"+colnum+"】的单元格内容为空~");
            logger.error(e.getMessage(),e);
        }
            return cellValue.toString();
            }

读取excel文件-03-单元格类型是布尔类型
XSSFCell.CELL_TYPE_BOOLEAN

    public String getCellData(String sheetName,int rownum,int colnum){//列数、列数都是从0开始计数 的
        StringBuilder cellValue = new StringBuilder("");
        try{
            xssfSheet = excelWorkbook.getSheet(sheetName);
            row = xssfSheet.getRow(rownum);
            cell = row.getCell(colnum);
            logger.info(cell.getCellType());
            logger.info(cell.getStringCellValue());
            
            //(cell.getCellType() == XSSFCell.CELL_BOOLEAN
            cellValue.append(String.valueOf(cell.getBooleanCellValue()));
            
             }catch (Exception e){
            logger.error("行号【"+rownum+"】,列号【"+colnum+"】的单元格内容为空~");
            logger.error(e.getMessage(),e);
        }
        return cellValue.toString();
}       

读取excel文件-04-单元格类型是空
XSSFCell.CELL_TYPE_CELL_TYPE_BLANK

    public String getCellData(String sheetName,int rownum,int colnum){//列数、列数都是从0开始计数 的
        StringBuilder cellValue = new StringBuilder("");
        try{
            xssfSheet = excelWorkbook.getSheet(sheetName);
            row = xssfSheet.getRow(rownum);
            cell = row.getCell(colnum);
            logger.info(cell.getCellType());
            logger.info(cell.getStringCellValue());
            
            //(cell.getCellType() == XSSFCell.CELL_BLANK
            cellValue.append("");
            
             }catch (Exception e){
            logger.error("行号【"+rownum+"】,列号【"+colnum+"】的单元格内容为空~");
            logger.error(e.getMessage(),e);
        }
        return cellValue.toString();
}       

JsonUtil

<dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.17</version>
    </dependency>
    <dependency>
      <groupId>org.glassfish</groupId>
      <artifactId>javax.json</artifactId>
      <version>1.1.4</version>
    </dependency>
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.2.70</version>
    </dependency>
import com.alibaba.fastjson.JSONArray;
import org.apache.log4j.Logger;

import javax.json.Json;
import javax.json.stream.JsonParser;
import java.io.*;
import java.nio.charset.StandardCharsets;

public class JsonsUtil {

    private static Logger logger = Logger.getLogger(JsonsUtil.class);
    public final static String BASE_PATH = "src/main/resources/";
    public static JSONArray getJsonArray(String fileNameStr) {
        logger.info("-----------------------文件相对路径以及名称为:"+fileNameStr);
        StringBuilder stringBuilderFilePathName = new StringBuilder();
        if(fileNameStr.contains(BASE_PATH)){
            stringBuilderFilePathName.append(fileNameStr);
        }else{
            stringBuilderFilePathName.append(BASE_PATH+fileNameStr);
        }
        logger.info("====================文件路径以及名称为:"+stringBuilderFilePathName);
        JSONArray jsonArray = new JSONArray();
        try {
            JsonParser parser = Json.createParser(new FileReader(stringBuilderFilePathName.toString()));
            logger.info("文件路径以及文件名为:"+stringBuilderFilePathName);
            while (parser.hasNext()) {
                JsonParser.Event event = parser.next();
                switch (event) {
                    case START_ARRAY:
                    case START_OBJECT:
                    case KEY_NAME:
                    case END_OBJECT:
                    case END_ARRAY:
                        String jsonStr = parser.getValue().toString();
                        jsonArray = JSONArray.parseArray(jsonStr);
                        break;
                    default:
                        break;
                }
            }
        } catch (Exception exception) {
            logger.error(exception.getMessage(),exception);
        }
        stringBuilderFilePathName.setLength(0);
        return jsonArray;
    }

    public static void writeJson(String str, String filePathStr) {
        StringBuilder stringBuilderFilePathName = new StringBuilder();
        try {
            if(filePathStr.contains(BASE_PATH)){
                stringBuilderFilePathName.append(filePathStr);
            }else {
                stringBuilderFilePathName.append(BASE_PATH+filePathStr);
            }
            OutputStream outputStream = new FileOutputStream(stringBuilderFilePathName.toString(), false);//覆盖写入
            logger.info("文件路径以及文件名为:"+stringBuilderFilePathName);
            outputStream.write(str.getBytes(StandardCharsets.UTF_8));
            Json.createWriter(outputStream);
            outputStream.flush();
            outputStream.close();
        } catch (Exception e) {
            logger.error(e.getMessage(),e);
        }
    }

    public static String readJson(String fileNameStr) {
        String filePathNameStr = BASE_PATH + fileNameStr;
        logger.info("文件路径以及文件名为:"+BASE_PATH+fileNameStr);
        String lineStr = "";
        StringBuilder stringBuilder = new StringBuilder();
        File file = new File(filePathNameStr);//创建文件对象
        if (file.exists()) {//如果该文件存在
            try {
                BufferedReader bufferedReader = new BufferedReader(new FileReader(filePathNameStr));
                while (  (lineStr=bufferedReader.readLine())  !=null ) {//空行
                    stringBuilder.append(lineStr);
                }
                bufferedReader.close();
            } catch (IOException exception) {
                exception.printStackTrace();
                logger.error(exception.getMessage(),exception);
            }
        }
        return stringBuilder.toString();
    }

DBUtil

import java.sql.*;
import java.util.*;

import groovy.util.logging.Slf4j;
import org.apache.log4j.Logger;

@Slf4j
public class DBUtil {

    private static Logger logger = Logger.getLogger(DBUtil.class);
    private static Map<String, String> connStrs = new HashMap<>();
    private static Map<String, Connection> conns = new HashMap<>();

    public static Connection connection;//null

    public static void getConnect(String url, String username, String password) {
        try {
            connection = DriverManager.getConnection(url, username, password);
            System.out.println("建立数据库连接");
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }

    public static void getConnect(String db) {
        String dburl = connStrs.get(db);
        int i = dburl.lastIndexOf(":");
        String strPassword = dburl.substring(i + 1);
        dburl = dburl.substring(0, i);
        i = dburl.lastIndexOf(":");
        String strUserName = dburl.substring(i + 1);
        dburl = dburl.substring(0, i);
        logger.info(dburl + "@@" + strUserName + "##" + strPassword);
        try {
//            Class.forName(dburl.contains("mysql") ? "com.mysql.cj.jdbc.Driver" : "oracle.jdbc.driver.OracleDriver");
            connection = DriverManager.getConnection(dburl, strUserName, strPassword);
            connection.setAutoCommit(false);//关闭自动commit
            conns.put(db, connection);
            System.out.println("建立数据库连接");
        } catch (Exception e) {
            assert false : "load db conn failed," + dburl + "," + e.getMessage();
//            e.printStackTrace();
        }
    }

    public static Connection getDbConn(String db) {
        getConnect(db);
        return conns.get(db);
    }

    public static String getConnStr(String db) {
        return connStrs.get(db);
    }


    public static boolean executeUpdate(String db, String strSql) throws SQLException {
        connection = getDbConn(db);
        Statement stat = null;
        strSql = strSql.trim();
        if (strSql.endsWith(";")) {
            strSql = strSql.substring(0, strSql.length() - 1);
        }
        try {
            stat = connection.createStatement();
            stat.executeUpdate(strSql);
        } catch (SQLException e) {
            logger.error(e.getMessage() + "->" + strSql);
        } finally {
            stat.close();
            connection.commit();
        }
        return true;
    }

    public static void closeConnect() {
        if (connection != null) {
            try {
                connection.close();
                System.out.println("关闭数据库连接");
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }

    }

    public static void closeConn() throws SQLException {
        if (conns != null) {

            for (String Key1 : conns.keySet()
            ) {
                conns.get(Key1).close();
                System.out.println("关闭数据库连接");
            }

        }

    }

    private static void load() {
        if (connStrs.size() > 2)
            return;//如果不加花括号,那么当条件不成立时,只会执行最近的一句代码
        Map<String, String> date = new HashMap<>();
        connStrs = date;
    }

    public static List<Map<String, Object>> read(String sql) {
        List<Map<String, Object>> lines = new ArrayList<>();
        try {
            PreparedStatement preparedStatement = connection.prepareStatement(sql);
            ResultSet resultSet = preparedStatement.executeQuery();
            ResultSetMetaData metaData = resultSet.getMetaData();
            int columnCount = metaData.getColumnCount();//列数
            while (resultSet.next()) {//1行
                Map<String, Object> line = new HashMap<>();
                for (int i = 1; i <= columnCount; i++) {
                    //从1开始计数
                    String colName = metaData.getColumnLabel(i);//字段名
                    Object colValue = resultSet.getObject(i);//字段值
                    line.put(colName, colValue);
                }
                lines.add(line);
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return lines;
    }

    public static List<Map<String, Object>> read(String db, String strSql, int row) throws SQLException {

        connection = getDbConn(db);
        strSql = strSql.trim();
        if (strSql.endsWith(";"))
            strSql = strSql.substring(0, strSql.length() - 1);
        List<Map<String, Object>> lines = new ArrayList<>();

        Statement stmt = null;
        ResultSet rs = null;
        try {
            stmt = connection.createStatement();
            rs = stmt.executeQuery(strSql);
            ResultSetMetaData rmd = rs.getMetaData();
            int columnCount = rmd.getColumnCount();//列数
            int t = 0;
            while (rs.next()) {//1行
                t++;
                Map<String, Object> result = new LinkedHashMap<>();
                for (int i = 1; i <= columnCount; i++) {
                    //从1开始计数
                    String colName = rmd.getColumnLabel(i).toLowerCase();//字段名
//                    Object colValue = rs.getObject(i);//字段值
                    Object colValue = rmd.getColumnClassName(i).equals("oracle.sql.TIMESTAMP") ? rs.getTimestamp(i) : rs.getString(i);//字段值
                    result.put(colName, colValue);
                }
                lines.add(result);
                if (row == t) break;
            }
        } catch (SQLException e) {
            logger.error(e.getMessage() + "->" + strSql);
        }
        finally {
            if(rs!= null)
                rs.close();
            System.out.println("关闭rs");
            if(stmt != null)
                stmt.close();
            System.out.println("关闭stmt");
        }
        connection.commit();
        return lines;
    }
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值