基础知识
- 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
实现封装
- 最原始的代码
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);
}
- 第一次优化
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);
- 第二次优化
将请求部分封装
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;
}