添加数据驱动工具
This commit is contained in:
parent
4739333623
commit
4a38428371
2
pom.xml
2
pom.xml
|
@ -87,7 +87,7 @@
|
|||
<dependency>
|
||||
<groupId>net.sourceforge.tess4j</groupId>
|
||||
<artifactId>tess4j</artifactId>
|
||||
<version>4.3.0</version>
|
||||
<version>4.5.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
|
|
|
@ -0,0 +1,149 @@
|
|||
package pres.auxiliary.tool.http;
|
||||
|
||||
/**
|
||||
* <p><b>文件名:</b>EasyHttp.java</p>
|
||||
* <p><b>用途:</b>
|
||||
* 可用于进行简单的接口请求
|
||||
* </p>
|
||||
* <p><b>编码时间:</b>2020年6月18日上午7:02:54</p>
|
||||
* <p><b>修改时间:</b>2020年6月18日上午7:02:54</p>
|
||||
* @author 彭宇琦
|
||||
* @version Ver1.0
|
||||
*
|
||||
*/
|
||||
public class EasyHttp {
|
||||
/**
|
||||
* 存储指定的请求方式
|
||||
*/
|
||||
private RequestType requestType;
|
||||
|
||||
/**
|
||||
* 存储接口请求地址,及相应拼接的参数,用于最终请求
|
||||
*/
|
||||
private StringBuilder url = new StringBuilder();
|
||||
|
||||
/**
|
||||
* 存储接口请求协议
|
||||
*/
|
||||
private String agreement = "http://";
|
||||
/**
|
||||
* 存储主机,IP或者域名
|
||||
*/
|
||||
private String host = "";
|
||||
/**
|
||||
* 存储端口
|
||||
*/
|
||||
private String port = "";
|
||||
/**
|
||||
* 存储接口路径
|
||||
*/
|
||||
private String address = "";
|
||||
|
||||
|
||||
/**
|
||||
* 用于设置请求方式,传入请求方式枚举类{@link RequestType}
|
||||
* @param requestType {@link RequestType}枚举类
|
||||
* @return 类本身
|
||||
*/
|
||||
public EasyHttp requestType(RequestType requestType) {
|
||||
this.requestType = requestType;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 指定接口请求url,当未指定协议时,将默认以http为请求协议
|
||||
* @param host 请求url
|
||||
* @return 类本身
|
||||
*/
|
||||
public EasyHttp url(String url) {
|
||||
String inter = "";
|
||||
String pram = "";
|
||||
|
||||
//替换中文冒号为英文冒号
|
||||
inter.replaceAll(":", ":");
|
||||
//判断传入的url是否存在参数
|
||||
if (url.indexOf("?") > -1) {
|
||||
inter = url.substring(0, url.indexOf("?"));
|
||||
pram = url.substring(url.indexOf("?") + 1);
|
||||
} else {
|
||||
inter = url;
|
||||
}
|
||||
|
||||
//判断传参是否包含协议,若未包含,则默认拼接http
|
||||
int index = inter.indexOf("://");
|
||||
if (index > -1) {
|
||||
agreement(inter.substring(0, index + "://".length()));
|
||||
//裁剪协议
|
||||
inter = inter.substring(index + "://".length());
|
||||
}
|
||||
|
||||
//按照“/”符号,拆分IP及端口
|
||||
if((index = inter.indexOf("/")) > -1) {
|
||||
//获取接口地址
|
||||
address(inter.substring(index));
|
||||
//裁剪接口地址
|
||||
inter = inter.substring(0, index);
|
||||
}
|
||||
|
||||
//判断获取的ip是否包含冒号,若包含冒号,则按照冒号切分ip及端口
|
||||
if ((index = inter.indexOf(":")) > -1) {
|
||||
port(inter.substring(index + 1));
|
||||
host(inter.substring(0, index));
|
||||
} else {
|
||||
host(inter);
|
||||
//若其中未包含冒号,则表示端口为80
|
||||
port("80");
|
||||
}
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 用于设置接口请求协议,默认为“http://”
|
||||
* @param agreement 协议
|
||||
* @return 类本身
|
||||
*/
|
||||
public EasyHttp agreement(String agreement) {
|
||||
this.agreement = agreement;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 用于设置接口请求的IP或域名
|
||||
* @param host IP或域名
|
||||
* @return 类本身
|
||||
*/
|
||||
public EasyHttp host(String host) {
|
||||
this.host = host;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 用于设置接口路径
|
||||
* @param host 接口路径
|
||||
* @return 类本身
|
||||
*/
|
||||
public EasyHttp address(String address) {
|
||||
this.address = address;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 用于设置端口号
|
||||
* @param port 端口号
|
||||
* @return 类本身
|
||||
*/
|
||||
public EasyHttp port(String port) {
|
||||
this.port = port;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回设置的url
|
||||
* @return url
|
||||
*/
|
||||
public String getUrlString() {
|
||||
url.delete(0, url.length());
|
||||
return url.append(agreement).append(host).append(":" + port).append(address).toString();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
package pres.auxiliary.tool.http;
|
||||
|
||||
/**
|
||||
* <p><b>文件名:</b>RequestType.java</p>
|
||||
* <p><b>用途:</b>
|
||||
* 定义接口请求的方式
|
||||
* </p>
|
||||
* <p><b>编码时间:</b>2020年6月17日下午7:50:54</p>
|
||||
* <p><b>修改时间:</b>2020年6月17日下午7:50:54</p>
|
||||
* @author 彭宇琦
|
||||
* @version Ver1.0
|
||||
*
|
||||
*/
|
||||
public enum RequestType {
|
||||
/**
|
||||
* get请求
|
||||
*/
|
||||
GET,
|
||||
/**
|
||||
* post请求
|
||||
*/
|
||||
POST;
|
||||
}
|
|
@ -4,6 +4,17 @@ import pres.auxiliary.tool.date.Time;
|
|||
import pres.auxiliary.tool.randomstring.RandomString;
|
||||
import pres.auxiliary.tool.randomstring.StringMode;
|
||||
|
||||
/**
|
||||
* <p><b>文件名:</b>Functions.java</p>
|
||||
* <p><b>用途:</b>
|
||||
* 提供部分默认的函数,在编写数据驱动时,可直接调用相应的方法
|
||||
* </p>
|
||||
* <p><b>编码时间:</b>2020年6月16日下午7:25:36</p>
|
||||
* <p><b>修改时间:</b>2020年6月16日下午7:25:36</p>
|
||||
* @author
|
||||
* @version Ver1.0
|
||||
*
|
||||
*/
|
||||
public class Functions {
|
||||
/**
|
||||
* <p>
|
||||
|
@ -85,11 +96,34 @@ public class Functions {
|
|||
|
||||
/**
|
||||
* <p>
|
||||
* 定义对指定时间处理函数
|
||||
* 定义对指定时间处理的函数,用法:<br>
|
||||
* ${time(时间, 增减时间方式)}
|
||||
* </p>
|
||||
* @return 处理后的时间
|
||||
* <p>
|
||||
* <b>参数解释:</b>
|
||||
* </p>
|
||||
* <p>
|
||||
* <b>时间:</b>指定的时间,可传入年、月、日、时、分、秒,允许只传入“年、月、日”,也允许只传入“时、分、秒”。
|
||||
* 当只传入“年、月、日”时,表示当前日期的0时0分0秒;当只传入“时、分、秒”时,表示当天日期的时间;当传入
|
||||
* 完整的时间时,其“年、月、日”与“时、分、秒”之间用空格隔开。<br>
|
||||
* “年、月、日”之间,允许使用的分隔符有:年(或月或日)、“/”、“\”、“.”和“-”<br>
|
||||
* “时、分、秒”之间,允许使用的分隔符有:时(或分或秒)、“:”<br>
|
||||
* <b>增减时间方式:</b>指定对时间进行增减的方式,使用英文单位表示需要操作的内容,包括:
|
||||
* y(年)、m(月)、w(周)、d(日)、h(小时)、s(秒)、min(分钟)。不带符号表示增加时间,带“-”符号
|
||||
* 表示减少时间,允许传入小数,允许使用连续式,每个单位之间没有顺序,允许一个单位传入多个(如“9d-2d-5m8y-3.66min”)
|
||||
*
|
||||
* <p>
|
||||
* <b>示例:</b><br>
|
||||
* ${time(2020-06-08 11:20:12, 1d)}——表示生成“2020-06-08 11:20:12”增加1天的时间<br>
|
||||
* ${time(2020年06月08日 11时20分12秒, -1d2.3y)}——表示生成“2020年06月08日 11时20分12秒”减少一天并增加2.3年的时间<br>
|
||||
* ${time(2020-06-08,1d)}——表示生成“2020-06-08 00:00:00”增加1天的时间<br>
|
||||
* ${time(11:20:12, 1h)}——表示生成“当天11:20:12”增加1天的时间<br>
|
||||
* </p>
|
||||
* <p>
|
||||
* <b>注意:</b>计算小数点的日期时,可能存在精度丢失,计算跨度越大,精度丢失越多
|
||||
* </p>
|
||||
* @return {@link DataDriverFunction}类对象
|
||||
*/
|
||||
|
||||
public static DataDriverFunction getTime() {
|
||||
//定义规则
|
||||
String regex = "time\\(((\\d{4}[-\\.年\\\\/][01]?\\d[-\\.月\\\\\\/][0123]?\\d日?"
|
||||
|
@ -109,8 +143,29 @@ public class Functions {
|
|||
}
|
||||
|
||||
/**
|
||||
* 定义对当前时间处理函数
|
||||
* @return 处理后的时间
|
||||
* <p>
|
||||
* 定义对当前时间处理的函数,用法:<br>
|
||||
* ${time(增减时间方式)}
|
||||
* </p>
|
||||
* <p>
|
||||
* <b>参数解释:</b>
|
||||
* </p>
|
||||
* <p>
|
||||
* <b>增减时间方式:</b>指定对时间进行增减的方式,使用英文单位表示需要操作的内容,包括:
|
||||
* y(年)、m(月)、w(周)、d(日)、h(小时)、s(秒)、min(分钟)。不带符号表示增加时间,带“-”符号
|
||||
* 表示减少时间,允许传入小数,允许使用连续式,每个单位之间没有顺序,允许一个单位传入多个(如“9d-2d-5m8y-3.66min”)。
|
||||
* 该参数允许不传,当不传入该参数时返回为当前时间
|
||||
*
|
||||
* <p>
|
||||
* <b>示例:</b><br>
|
||||
* ${time(1d)}——表示生成当前时间增加1天的时间<br>
|
||||
* ${time(-1d2.3y)}——表示生成当前时间减少一天并增加2.3年的时间<br>
|
||||
* ${time()}——表示生成当前时间<br>
|
||||
* </p>
|
||||
* <p>
|
||||
* <b>注意:</b>计算小数点的日期时,可能存在精度丢失,计算跨度越大,精度丢失越多
|
||||
* </p>
|
||||
* @return {@link DataDriverFunction}类对象
|
||||
*/
|
||||
public static DataDriverFunction getNowTime() {
|
||||
//定义规则
|
||||
|
|
|
@ -2,6 +2,7 @@ package pres.auxiliary.work.selenium.datadriven;
|
|||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
@ -34,6 +35,9 @@ import pres.auxiliary.tool.date.Time;
|
|||
* </pre>
|
||||
* 从数据驱动中读取到的数据有${test}、${select(1)},则按照字符串的形式输出后分别得到“HelloWorld”、“function1”。
|
||||
* </p>
|
||||
* <p>
|
||||
* 除自定义函数外,构造类时将默认加载部分函数,可直接调用,详见{@link Functions}
|
||||
* </p>
|
||||
* <p><b>编码时间:</b>2020年6月3日上午7:04:51</p>
|
||||
* <p><b>修改时间:</b>2020年6月3日上午7:04:51</p>
|
||||
* @author 彭宇琦
|
||||
|
@ -55,13 +59,26 @@ public class TestNGDataDriver {
|
|||
* 用于存储自定义的公式
|
||||
*/
|
||||
private HashMap<String, DataFunction> dataFunctionMap = new HashMap<>(16);
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 用于对日期格式或特殊字段输入的日期进行转换
|
||||
*/
|
||||
private Time time = new Time();
|
||||
|
||||
/**
|
||||
* 构造类,并将默认的数据驱动函数({@link Functions})加载至类中
|
||||
*/
|
||||
public TestNGDataDriver() {
|
||||
//构造Functions,通过反射,将所有Functions中的所有方法执行并添加至dataFunctionMap中
|
||||
Functions functions = new Functions();
|
||||
for (Method method : functions.getClass().getDeclaredMethods()) {
|
||||
try {
|
||||
addFunction((DataDriverFunction) method.invoke(functions));
|
||||
} catch (Exception e) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 用于返回数据驱动中列表的元素个数,即当前数据驱动中最大行元素个数
|
||||
* @return 列元素个数
|
||||
|
@ -181,15 +198,15 @@ public class TestNGDataDriver {
|
|||
//将rowDataList之前的列都置为空串
|
||||
int oldListSize = dataList.get(rowInde - 1).dataList.size();
|
||||
for (int index = 0; index < oldListSize - rowDataList.size(); index++) {
|
||||
data.dataList.add("");
|
||||
data.addData("");
|
||||
}
|
||||
}
|
||||
|
||||
//存储数据
|
||||
rowDataList.forEach(data.dataList :: add);
|
||||
rowDataList.forEach(data :: addData);
|
||||
dataList.add(data);
|
||||
} else {
|
||||
rowDataList.forEach(dataList.get(rowInde).dataList :: add);
|
||||
rowDataList.forEach(dataList.get(rowInde) :: addData);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -241,7 +258,6 @@ public class TestNGDataDriver {
|
|||
* @return 字符串形式的数据
|
||||
*/
|
||||
public String getString(int index) {
|
||||
|
||||
return index < dataList.size() ? disposeContent(dataList.get(index)) : "";
|
||||
}
|
||||
|
||||
|
@ -359,6 +375,14 @@ public class TestNGDataDriver {
|
|||
return new Time(getString(listName));
|
||||
}
|
||||
|
||||
/**
|
||||
* 用于添加元素
|
||||
* @param content 元素内容
|
||||
*/
|
||||
private void addData(String content) {
|
||||
dataList.add(disposeContent(content));
|
||||
}
|
||||
|
||||
/**
|
||||
* 用于处理读取得到的内容,并将处理后的内容进行返回
|
||||
* @param content 读取的内容
|
||||
|
|
|
@ -10,6 +10,9 @@ import java.util.Date;
|
|||
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import pres.auxiliary.tool.randomstring.RandomString;
|
||||
import pres.auxiliary.tool.randomstring.StringMode;
|
||||
|
||||
public class TimeTest {
|
||||
Time time = new Time();
|
||||
|
||||
|
@ -42,6 +45,10 @@ public class TimeTest {
|
|||
time = new Time();
|
||||
time.addTime("-90d+1min");
|
||||
System.out.println(time.getFormatTime());
|
||||
|
||||
Time time = new Time();
|
||||
time.setTimeFormat("2020-05-32 HH:mm:ss");
|
||||
time.addTime("-" + new RandomString(StringMode.NUM).toString(2, 4) + "s");
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -0,0 +1,38 @@
|
|||
package pres.auxiliary.tool.http;
|
||||
|
||||
import org.testng.annotations.AfterMethod;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
public class EasyHttpTest {
|
||||
EasyHttp eh = new EasyHttp();
|
||||
|
||||
@AfterMethod
|
||||
public void showUrl() {
|
||||
System.out.println(eh.getUrlString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void urlTest_All() {
|
||||
eh.url("http://127.0.0.1:8080/a/b");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void urlTest_NotAgreement() {
|
||||
eh.url("127.0.0.1:8080/a/b");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void urlTest_NotPort() {
|
||||
eh.url("http://127.0.0.1/a/b");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void urlTest_NotAddress() {
|
||||
eh.url("http://127.0.0.1:8080");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void urlTest_Host() {
|
||||
eh.url("http://www.hao123.com/a/b");
|
||||
}
|
||||
}
|
|
@ -15,22 +15,21 @@ import pres.auxiliary.work.selenium.datadriven.TestNGDataDriver.Data;
|
|||
public class TestNGDataDriverTest {
|
||||
TestNGDataDriver testNGData = new TestNGDataDriver();
|
||||
|
||||
File docxFile = new File("src/test/java/pres/auxiliary/work/selenium/datadriven/Test.docx");
|
||||
File xlsxFile = new File("src/test/java/pres/auxiliary/work/selenium/datadriven/AddTest.xlsx");
|
||||
File functionFile = new File("src/test/java/pres/auxiliary/work/selenium/datadriven/Functions.xlsx");
|
||||
|
||||
/**
|
||||
* 测试{@link TestNGDataDriver#addExcelData(java.io.File, String, boolean)}方法
|
||||
* @throws IOException
|
||||
*/
|
||||
@BeforeClass
|
||||
public void initData() throws IOException {
|
||||
File docxFile = new File("src/test/java/pres/auxiliary/work/selenium/datadriven/Test.docx");
|
||||
File xlsxFile = new File("src/test/java/pres/auxiliary/work/selenium/datadriven/AddTest.xlsx");
|
||||
File functionFile = new File("src/test/java/pres/auxiliary/work/selenium/datadriven/Functions.xlsx");
|
||||
|
||||
String patten = SplitType.SPLIT_TAB.getSplitSign();
|
||||
String sheetName = "Sheet1";
|
||||
|
||||
testNGData.addDataDriver(docxFile, patten, true);
|
||||
testNGData.addDataDriver(xlsxFile, sheetName, true);
|
||||
testNGData.addDataDriver(functionFile, "Sheet1", true);
|
||||
}
|
||||
|
||||
@AfterMethod
|
||||
|
@ -66,7 +65,8 @@ public class TestNGDataDriverTest {
|
|||
*/
|
||||
@Test
|
||||
public void addFunctiontest_Functions_Rs() throws IOException {
|
||||
testNGData.addFunction(Functions.randomString());
|
||||
// testNGData.addFunction(Functions.randomString());
|
||||
testNGData.addDataDriver(functionFile, "Sheet1", true);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -77,5 +77,6 @@ public class TestNGDataDriverTest {
|
|||
public void addFunctiontest_Functions_Time() throws IOException {
|
||||
testNGData.addFunction(Functions.getNowTime());
|
||||
testNGData.addFunction(Functions.getTime());
|
||||
testNGData.addDataDriver(functionFile, "Sheet1", true);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue