Commit 39a1dd26 by 齐文博

自动化

parent 50167dbb
...@@ -282,7 +282,7 @@ ...@@ -282,7 +282,7 @@
</dependency> </dependency>
<dependency> <dependency>
<groupId>CGLIB</groupId> <groupId>cglib</groupId>
<artifactId>cglib</artifactId> <artifactId>cglib</artifactId>
<version>3.3.0</version> <!-- 确保版本适合您的项目 --> <version>3.3.0</version> <!-- 确保版本适合您的项目 -->
</dependency> </dependency>
......
...@@ -13,7 +13,6 @@ import com.lemon.utils.HttpUtils; ...@@ -13,7 +13,6 @@ import com.lemon.utils.HttpUtils;
import io.qameta.allure.Step; import io.qameta.allure.Step;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import org.springframework.test.context.testng.AbstractTestNGSpringContextTests;
import org.testng.annotations.AfterSuite; import org.testng.annotations.AfterSuite;
import org.testng.annotations.BeforeSuite; import org.testng.annotations.BeforeSuite;
......
package com.lemon.cases;
import cn.hutool.core.lang.UUID;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.google.common.collect.Maps;
import com.lemon.pojo.Case;
import com.lemon.pojo.TestRecord;
import com.lemon.testng.WebSocketManager;
import com.lemon.utils.ExcelUtils;
import com.pcloud.llm.cockpit.api.domain.dto.request.WorkflowRequestBody;
import com.pcloud.llm.cockpit.api.domain.dto.response.CompletionResponse;
import org.apache.http.client.utils.DateUtils;
import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import java.net.URISyntaxException;
import java.util.*;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import static com.lemon.utils.Robot.sendAlarm;
public class OverseasMultimediaServeCase extends BaseCase {
private WebSocketManager webSocketManager;
//excel用例路径 todo 此处需要根据具体书籍进行更换 --书名:多媒体制作与人工智能运用繁体
public static final String EXCEL_PATH = "src/test/resources/多媒体制作与人工智能运用繁体(1).xls";
private static final String ramdonUserId = UUID.randomUUID().toString();
private String caseTraceId;
@BeforeClass()
public void setup() throws URISyntaxException {
webSocketManager = new WebSocketManager();
webSocketManager.connect();
// 清空所有共享变量
ExcelUtils.wbdList.clear();
ExcelUtils.caseList.clear();
ExcelUtils.parameterList.clear();
ExcelUtils.apiList.clear();
webSocketManager.scheduler.scheduleAtFixedRate(() -> {
if (webSocketManager.webSocketClient.isOpen()) {
// todo 此处需要根据具体书籍进行更换
String heartbeatMessage = "{\"event\":0,\"sendType\":0,\"userId\":\"271235256\"," +
"\"officialAccountsId\":600,\"messageBody\":\"\",\"origin\":\"WEB_H5\",\"bookId\":\"12633157\"}";
webSocketManager.webSocketClient.send(heartbeatMessage);
log.info("发送心跳消息: " + heartbeatMessage);
}
}, 1, 5, TimeUnit.SECONDS);
}
@Test(dataProvider = "data1", priority = 1, description = "接收event-3响应")
public void testSendEvent2AndReceiveEvent3(Case cas) {
try {
// 重置参数
webSocketManager.event5Messages = new ArrayList<>();
caseTraceId = UUID.randomUUID().toString();
log.info(caseTraceId + caseTraceId + "本次执行的case是:" + JSONUtil.toJsonStr(cas) + "caseTraceId是" + caseTraceId);
webSocketManager.messageCount = cas.getMessageCount();
// 设置 latch,等待服务端 event-3 响应
webSocketManager.latch4Event3 = new CountDownLatch(1);
// 定义 requestId,发送 event-2 消息时使用,并在接收 event-3 时验证
String event2Message = cas.getParams();
log.info(caseTraceId + "发送event2的消息是" + event2Message);
JSONObject sendJson = JSONUtil.parseObj(event2Message);
webSocketManager.sendMessage(event2Message);
webSocketManager.expectedRequestId = sendJson.getStr("requestId");
log.info(caseTraceId + "expectedRequestId是" + webSocketManager.expectedRequestId);
// 等待最多 10 秒
boolean event3Received = webSocketManager.latch4Event3.await(60, TimeUnit.SECONDS);
Assert.assertTrue(event3Received, "未在规定时间内收到 event-3 响应");
log.info(caseTraceId + "收到的msgRemoteId是: " + webSocketManager.msgRemoteId);
// 验证 msgRemoteId 非空
Assert.assertNotNull(webSocketManager.msgRemoteId, "msgRemoteId 不应为空");
// 验证 event-3 的 requestId 是否匹配
log.info(caseTraceId + "receivedRequestId 是: " + webSocketManager.receivedRequestId + "expectedRequestId 是: " + webSocketManager.expectedRequestId);
Assert.assertEquals(webSocketManager.receivedRequestId, webSocketManager.expectedRequestId, "收到的 requestId 不匹配");
} catch (Exception e) {
log.info(caseTraceId + "testSendEvent2AndReceiveEvent3,WebSocket出错: " + e.getMessage());
}
// 接收event-5响应
try {
// 设置 latch,等待服务端 event-5 响应
webSocketManager.latch4Event5 = new CountDownLatch(webSocketManager.messageCount);
// 等待并验证 event-5 消息
boolean event5Received = webSocketManager.latch4Event5.await(120, TimeUnit.SECONDS);
Assert.assertTrue(event5Received, "未在规定时间内收到 event-5 响应");
// 验证 event-5 消息的内容
log.info(caseTraceId + "event5 收到的消息是: " + JSONUtil.toJsonStr(webSocketManager.event5Messages));
Assert.assertNotNull(webSocketManager.event5Messages, "event-5 消息不应为空");
if (webSocketManager.event5Messages.size() > 1) {
addWBD(Integer.parseInt(cas.getId()), 6, JSONUtil.toJsonStr(webSocketManager.event5Messages));
cas.setActualValue(JSONUtil.toJsonStr(webSocketManager.event5Messages));
} else {
addWBD(Integer.parseInt(cas.getId()), 6, JSONUtil.toJsonStr(webSocketManager.event5Messages.get(0)));
cas.setActualValue(JSONUtil.toJsonStr(webSocketManager.event5Messages.get(0)));
}
} catch (Exception e) {
log.info(caseTraceId + "testReceiveEvent5Responses,WebSocket出错: " + e.getMessage());
} finally {
// 同时将测试结果新增到数据库中
TestRecord testRecord = new TestRecord();
testRecord.setCaseId(Integer.valueOf(cas.getId()));
testRecord.setCaseDesc(cas.getDesc());
testRecord.setInquiry(cas.getParams());
testRecord.setExpectContent(cas.getExpectValue());
testRecord.setInputContent(cas.getParams());
testRecord.setOutputContent(JSONUtil.toJsonStr(webSocketManager.event5Messages));
testRecord.setState(cas.getPass());
testRecord.setTestVersion(DateUtils.formatDate(new Date(), "yyyyMMdd HH:mm"));
testRecord.setCreateTime(new Date());
testRecord.setUpdateTime(new Date());
testRecord.setIsDelete(0);
// SqlUtils.insertTestRecord(testRecord);
// 如果失败则发送消息提醒
if (cas.getPass() == null || cas.getPass() == 0)
sendAlarm(cas.getParams());
}
}
/*
@Test(dataProvider = "data1", priority = 2, dependsOnMethods = "testSendEvent2AndReceiveEvent3", description = "接收event-5响应")
public void testReceiveEvent5Responses(Case cas) {
}
*/
@AfterClass
public void tearDown() {
// 关闭连接
webSocketManager.close();
// 先将数据写到excel中 并置空
ExcelUtils.batchWrite(EXCEL_PATH);
ExcelUtils.wbdList = new ArrayList<>();
// 将执行结果发给模型进行判断用例是否通过
List<Case> caseList4Excel = ExcelUtils.read(EXCEL_PATH, 0, Case.class);
// 转换为只保留指定字段的 JSON 数组
List<JSONObject> filteredList = new ArrayList<>();
for (Case item : caseList4Excel) {
log.info("item:" + JSONUtil.toJsonStr(item));
// 构造一个只包含所需字段的 JSONObject
JSONObject jsonObject = new JSONObject();
jsonObject.putOpt("id", item.getId());
if (item.getExpectValue() != null && item.getExpectValue().startsWith("[")) {
jsonObject.putOpt("expectValue", JSONUtil.parseArray(item.getExpectValue()));
} else {
jsonObject.putOpt("expectValue", JSONUtil.parseObj(item.getExpectValue()));
}
if (item.getActualValue() != null && item.getActualValue().startsWith("[")) {
jsonObject.putOpt("actualValue", Optional.ofNullable(item.getActualValue()).map(JSONUtil::parseArray).orElse(new JSONArray()));
} else {
jsonObject.putOpt("actualValue", Optional.ofNullable(item.getActualValue()).map(JSONUtil::parseObj).orElse(new JSONObject()));
}
filteredList.add(jsonObject);
}
// 转换为 JSON 字符串
String jsonStr = JSONUtil.toJsonStr(filteredList);
log.info(caseTraceId + "本次执行的测试结果是: " + jsonStr);
//调用dify
Map<String, Object> inputs = Maps.newHashMap();
inputs.put("inquery", jsonStr);
log.info("转义后的参数是:" + jsonStr);
// 去掉所有的转义符号
WorkflowRequestBody requestBody = WorkflowRequestBody.builder().user(ramdonUserId).inputs(inputs).build();
log.info(caseTraceId + "调用dify请求参数:" + JSONUtil.toJsonStr(requestBody));
String res = "";
try {
CompletionResponse aiTopicScience = webSocketManager.workflowsRunBlocking("ai_autotest", requestBody);
Map<String, Object> outputs = aiTopicScience.getData().getOutputs();
res = (String) outputs.get("result");
res = res.replace("```json", "").replace("```", "");
List<Case> resultList = JSONUtil.toList(res,Case.class);
for (Case item : resultList) {
addWBD(Integer.parseInt(item.getId()), 7, Optional.ofNullable(item.getPass()).map(String::valueOf).orElse(""));
}
} catch (Exception e) {
log.warn("请求dify异常:{}" + e.getMessage(),e);
}
log.info(caseTraceId + "dify返回的内容======>{}" + res);
log.info("===================批量回写===================");
ExcelUtils.batchWrite(EXCEL_PATH);
log.info("===================项目结束===================");
}
@DataProvider(name = "data1")
public Object[][] data1() {
Object[][] totalCase = ExcelUtils.getTotalCase(EXCEL_PATH);
return totalCase;
}
}
package com.lemon.cases; package com.lemon.cases;
import com.lemon.utils.AuthorizationUtils;
import io.qameta.allure.Description; import io.qameta.allure.Description;
import org.apache.http.Header; import org.apache.http.Header;
import org.apache.http.HttpEntity; import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse; import org.apache.http.HttpResponse;
import org.apache.http.client.CookieStore; import org.apache.http.client.CookieStore;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity; import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils; import org.apache.http.util.EntityUtils;
import org.testng.Assert; import org.testng.Assert;
import org.testng.annotations.DataProvider; import org.testng.annotations.DataProvider;
......
...@@ -4,7 +4,6 @@ import com.alibaba.fastjson.JSONPath; ...@@ -4,7 +4,6 @@ import com.alibaba.fastjson.JSONPath;
import com.lemon.constants.Constants; import com.lemon.constants.Constants;
import com.lemon.pojo.API; import com.lemon.pojo.API;
import com.lemon.pojo.Case; import com.lemon.pojo.Case;
import com.lemon.utils.AuthorizationUtils;
import com.lemon.utils.ExcelUtils; import com.lemon.utils.ExcelUtils;
import com.lemon.utils.SqlUtils; import com.lemon.utils.SqlUtils;
import io.qameta.allure.Step; import io.qameta.allure.Step;
......
package com.lemon.cases; package com.lemon.cases;
import com.alibaba.fastjson.JSONObject;
import com.lemon.constants.Constants; import com.lemon.constants.Constants;
import com.lemon.pojo.API; import com.lemon.pojo.API;
import com.lemon.pojo.Case; import com.lemon.pojo.Case;
import com.lemon.utils.AuthorizationUtils;
import com.lemon.utils.ExcelUtils; import com.lemon.utils.ExcelUtils;
import com.lemon.utils.HttpUtils;
import com.lemon.utils.SqlUtils; import com.lemon.utils.SqlUtils;
import netscape.javascript.JSObject;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.testng.Assert; import org.testng.Assert;
import org.testng.annotations.DataProvider; import org.testng.annotations.DataProvider;
import org.testng.annotations.Test; import org.testng.annotations.Test;
import java.util.HashMap;
import java.util.List;
import java.util.Set;
/** /**
* @program: Lemon * @program: Lemon
* @description: * @description:
......
package com.lemon.cases; package com.lemon.cases;
import com.alibaba.fastjson.JSONPath;
import com.lemon.constants.Constants; import com.lemon.constants.Constants;
import com.lemon.pojo.API; import com.lemon.pojo.API;
import com.lemon.pojo.Case; import com.lemon.pojo.Case;
...@@ -11,16 +10,12 @@ import com.lemon.utils.SqlUtils; ...@@ -11,16 +10,12 @@ import com.lemon.utils.SqlUtils;
/*import com.pcloud.universe.wework.client.MessageBuilder; /*import com.pcloud.universe.wework.client.MessageBuilder;
import com.pcloud.universe.wework.client.WeworkRobotSender;*/ import com.pcloud.universe.wework.client.WeworkRobotSender;*/
import io.qameta.allure.Description; import io.qameta.allure.Description;
import io.qameta.allure.Step;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.client.utils.DateUtils; import org.apache.http.client.utils.DateUtils;
import org.testng.annotations.DataProvider; import org.testng.annotations.DataProvider;
import org.testng.annotations.Test; import org.testng.annotations.Test;
import org.testng.Assert; import org.testng.Assert;
import java.util.Date; import java.util.Date;
import java.math.BigDecimal;
import java.text.DecimalFormat;
public class ServerCase extends BaseCase { public class ServerCase extends BaseCase {
@Test(dataProvider = "data1", description = "1A:A段和B段sql完全匹配") // DTO数据传输 @Test(dataProvider = "data1", description = "1A:A段和B段sql完全匹配") // DTO数据传输
......
package com.lemon.cases;
import cn.hutool.core.lang.UUID;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.google.common.collect.Maps;
import com.lemon.pojo.Case;
import com.lemon.pojo.TestRecord;
import com.lemon.testng.WebSocketManager;
import com.lemon.utils.ExcelUtils;
import com.pcloud.llm.cockpit.api.domain.dto.request.WorkflowRequestBody;
import com.pcloud.llm.cockpit.api.domain.dto.response.CompletionResponse;
import org.apache.http.client.utils.DateUtils;
import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import java.net.URISyntaxException;
import java.util.*;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import static com.lemon.utils.Robot.sendAlarm;
public class ThegoldentimeofphotographyServeCase extends BaseCase {
private WebSocketManager webSocketManager;
//excel用例路径 todo 此处需要根据具体书籍进行更换
public static final String EXCEL_PATH = "src/test/resources/摄影的黄金时间.xls";
private static final String ramdonUserId = UUID.randomUUID().toString();
private String caseTraceId;
@BeforeClass()
public void setup() throws URISyntaxException {
webSocketManager = new WebSocketManager();
webSocketManager.connect();
// 清空所有共享变量
ExcelUtils.wbdList.clear();
ExcelUtils.caseList.clear();
ExcelUtils.parameterList.clear();
ExcelUtils.apiList.clear();
webSocketManager.scheduler.scheduleAtFixedRate(() -> {
if (webSocketManager.webSocketClient.isOpen()) {
// todo 此处需要根据具体书籍进行更换
String heartbeatMessage = "{\"event\":0,\"sendType\":0,\"userId\":\"208338832\"," +
"\"officialAccountsId\":997,\"messageBody\":\"\",\"origin\":\"WEB_H5\",\"bookId\":\"12632286\"}";
webSocketManager.webSocketClient.send(heartbeatMessage);
log.info("发送心跳消息: " + heartbeatMessage);
}
}, 1, 5, TimeUnit.SECONDS);
}
@Test(dataProvider = "data1", priority = 1, description = "接收event-3响应")
public void testSendEvent2AndReceiveEvent3(Case cas) {
try {
// 重置参数
webSocketManager.event5Messages = new ArrayList<>();
caseTraceId = UUID.randomUUID().toString();
log.info(caseTraceId + caseTraceId + "本次执行的case是:" + JSONUtil.toJsonStr(cas) + "caseTraceId是" + caseTraceId);
webSocketManager.messageCount = cas.getMessageCount();
// 设置 latch,等待服务端 event-3 响应
webSocketManager.latch4Event3 = new CountDownLatch(1);
// 定义 requestId,发送 event-2 消息时使用,并在接收 event-3 时验证
String event2Message = cas.getParams();
log.info(caseTraceId + "发送event2的消息是" + event2Message);
JSONObject sendJson = JSONUtil.parseObj(event2Message);
webSocketManager.sendMessage(event2Message);
webSocketManager.expectedRequestId = sendJson.getStr("requestId");
log.info(caseTraceId + "expectedRequestId是" + webSocketManager.expectedRequestId);
// 等待最多 10 秒
boolean event3Received = webSocketManager.latch4Event3.await(60, TimeUnit.SECONDS);
Assert.assertTrue(event3Received, "未在规定时间内收到 event-3 响应");
log.info(caseTraceId + "收到的msgRemoteId是: " + webSocketManager.msgRemoteId);
// 验证 msgRemoteId 非空
Assert.assertNotNull(webSocketManager.msgRemoteId, "msgRemoteId 不应为空");
// 验证 event-3 的 requestId 是否匹配
log.info(caseTraceId + "receivedRequestId 是: " + webSocketManager.receivedRequestId + "expectedRequestId 是: " + webSocketManager.expectedRequestId);
Assert.assertEquals(webSocketManager.receivedRequestId, webSocketManager.expectedRequestId, "收到的 requestId 不匹配");
} catch (Exception e) {
log.info(caseTraceId + "testSendEvent2AndReceiveEvent3,WebSocket出错: " + e.getMessage());
}
// 接收event-5响应
try {
// 设置 latch,等待服务端 event-5 响应
webSocketManager.latch4Event5 = new CountDownLatch(webSocketManager.messageCount);
// 等待并验证 event-5 消息
boolean event5Received = webSocketManager.latch4Event5.await(120, TimeUnit.SECONDS);
Assert.assertTrue(event5Received, "未在规定时间内收到 event-5 响应");
// 验证 event-5 消息的内容
log.info(caseTraceId + "event5 收到的消息是: " + JSONUtil.toJsonStr(webSocketManager.event5Messages));
Assert.assertNotNull(webSocketManager.event5Messages, "event-5 消息不应为空");
if (webSocketManager.event5Messages.size() > 1) {
addWBD(Integer.parseInt(cas.getId()), 6, JSONUtil.toJsonStr(webSocketManager.event5Messages));
cas.setActualValue(JSONUtil.toJsonStr(webSocketManager.event5Messages));
} else {
addWBD(Integer.parseInt(cas.getId()), 6, JSONUtil.toJsonStr(webSocketManager.event5Messages.get(0)));
cas.setActualValue(JSONUtil.toJsonStr(webSocketManager.event5Messages.get(0)));
}
} catch (Exception e) {
log.info(caseTraceId + "testReceiveEvent5Responses,WebSocket出错: " + e.getMessage());
} finally {
// 同时将测试结果新增到数据库中
TestRecord testRecord = new TestRecord();
testRecord.setCaseId(Integer.valueOf(cas.getId()));
testRecord.setCaseDesc(cas.getDesc());
testRecord.setInquiry(cas.getParams());
testRecord.setExpectContent(cas.getExpectValue());
testRecord.setInputContent(cas.getParams());
testRecord.setOutputContent(JSONUtil.toJsonStr(webSocketManager.event5Messages));
testRecord.setState(cas.getPass());
testRecord.setTestVersion(DateUtils.formatDate(new Date(), "yyyyMMdd HH:mm"));
testRecord.setCreateTime(new Date());
testRecord.setUpdateTime(new Date());
testRecord.setIsDelete(0);
// SqlUtils.insertTestRecord(testRecord);
// 如果失败则发送消息提醒
if (cas.getPass() == null || cas.getPass() == 0)
sendAlarm(cas.getParams());
}
}
/*
@Test(dataProvider = "data1", priority = 2, dependsOnMethods = "testSendEvent2AndReceiveEvent3", description = "接收event-5响应")
public void testReceiveEvent5Responses(Case cas) {
}
*/
@AfterClass
public void tearDown() {
// 关闭连接
webSocketManager.close();
// 先将数据写到excel中 并置空
ExcelUtils.batchWrite(EXCEL_PATH);
ExcelUtils.wbdList = new ArrayList<>();
// 将执行结果发给模型进行判断用例是否通过
List<Case> caseList4Excel = ExcelUtils.read(EXCEL_PATH, 0, Case.class);
// 转换为只保留指定字段的 JSON 数组
List<JSONObject> filteredList = new ArrayList<>();
for (Case item : caseList4Excel) {
log.info("item:" + JSONUtil.toJsonStr(item));
// 构造一个只包含所需字段的 JSONObject
JSONObject jsonObject = new JSONObject();
jsonObject.putOpt("id", item.getId());
if (item.getExpectValue() != null && item.getExpectValue().startsWith("[")) {
jsonObject.putOpt("expectValue", JSONUtil.parseArray(item.getExpectValue()));
} else {
jsonObject.putOpt("expectValue", JSONUtil.parseObj(item.getExpectValue()));
}
if (item.getActualValue() != null && item.getActualValue().startsWith("[")) {
jsonObject.putOpt("actualValue", Optional.ofNullable(item.getActualValue()).map(JSONUtil::parseArray).orElse(new JSONArray()));
} else {
jsonObject.putOpt("actualValue", Optional.ofNullable(item.getActualValue()).map(JSONUtil::parseObj).orElse(new JSONObject()));
}
filteredList.add(jsonObject);
}
// 转换为 JSON 字符串
String jsonStr = JSONUtil.toJsonStr(filteredList);
log.info(caseTraceId + "本次执行的测试结果是: " + jsonStr);
//调用dify
Map<String, Object> inputs = Maps.newHashMap();
inputs.put("inquery", jsonStr);
log.info("转义后的参数是:" + jsonStr);
// 去掉所有的转义符号
WorkflowRequestBody requestBody = WorkflowRequestBody.builder().user(ramdonUserId).inputs(inputs).build();
log.info(caseTraceId + "调用dify请求参数:" + JSONUtil.toJsonStr(requestBody));
String res = "";
try {
CompletionResponse aiTopicScience = webSocketManager.workflowsRunBlocking("ai_autotest", requestBody);
Map<String, Object> outputs = aiTopicScience.getData().getOutputs();
res = (String) outputs.get("result");
res = res.replace("```json", "").replace("```", "");
List<Case> resultList = JSONUtil.toList(res,Case.class);
for (Case item : resultList) {
addWBD(Integer.parseInt(item.getId()), 7, Optional.ofNullable(item.getPass()).map(String::valueOf).orElse(""));
}
} catch (Exception e) {
log.warn("请求dify异常:{}" + e.getMessage(),e);
}
log.info(caseTraceId + "dify返回的内容======>{}" + res);
log.info("===================批量回写===================");
ExcelUtils.batchWrite(EXCEL_PATH);
log.info("===================项目结束===================");
}
@DataProvider(name = "data1")
public Object[][] data1() {
Object[][] totalCase = ExcelUtils.getTotalCase(EXCEL_PATH);
return totalCase;
}
}
...@@ -35,7 +35,7 @@ public class WonderfulChinaInTheMuseumServeCase extends BaseCase { ...@@ -35,7 +35,7 @@ public class WonderfulChinaInTheMuseumServeCase extends BaseCase {
//excel用例路径 todo 此处需要根据具体书籍进行更换 //excel用例路径 todo 此处需要根据具体书籍进行更换
public static final String EXCEL_PATH = "src/test/resources/WonderfulChinaInTheMuseum.xls"; public static final String EXCEL_PATH = "src/test/resources/博物馆里的奇妙中国(1).xls";
private static final String ramdonUserId = UUID.randomUUID().toString(); private static final String ramdonUserId = UUID.randomUUID().toString();
...@@ -53,8 +53,8 @@ public class WonderfulChinaInTheMuseumServeCase extends BaseCase { ...@@ -53,8 +53,8 @@ public class WonderfulChinaInTheMuseumServeCase extends BaseCase {
webSocketManager.scheduler.scheduleAtFixedRate(() -> { webSocketManager.scheduler.scheduleAtFixedRate(() -> {
if (webSocketManager.webSocketClient.isOpen()) { if (webSocketManager.webSocketClient.isOpen()) {
// todo 此处需要根据具体书籍进行更换 // todo 此处需要根据具体书籍进行更换
String heartbeatMessage = "{\"event\":0,\"sendType\":0,\"userId\":\"33624445\"," + String heartbeatMessage = "{\"event\":0,\"sendType\":0,\"userId\":\"260513294\"," +
"\"officialAccountsId\":23,\"messageBody\":\"\",\"origin\":\"WEB_H5\",\"bookId\":\"12623004\"}"; "\"officialAccountsId\":997,\"messageBody\":\"\",\"origin\":\"WEB_H5\",\"bookId\":\"12623004\"}";
webSocketManager.webSocketClient.send(heartbeatMessage); webSocketManager.webSocketClient.send(heartbeatMessage);
log.info("发送心跳消息: " + heartbeatMessage); log.info("发送心跳消息: " + heartbeatMessage);
} }
......
...@@ -27,7 +27,6 @@ import java.util.Optional; ...@@ -27,7 +27,6 @@ import java.util.Optional;
import java.util.concurrent.CountDownLatch; import java.util.concurrent.CountDownLatch;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class WebSocketManager { public class WebSocketManager {
......
...@@ -10,7 +10,6 @@ import com.lemon.pojo.WriteBackData; ...@@ -10,7 +10,6 @@ import com.lemon.pojo.WriteBackData;
import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.usermodel.*;
import java.io.*; import java.io.*;
import java.net.URL;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
......
package com.lemon.utils; package com.lemon.utils;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.lemon.constants.Constants;
import org.apache.http.Header; import org.apache.http.Header;
import org.apache.http.HttpEntity; import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.CloseableHttpResponse;
...@@ -13,7 +12,6 @@ import org.apache.http.impl.client.CloseableHttpClient; ...@@ -13,7 +12,6 @@ import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients; import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils; import org.apache.http.util.EntityUtils;
import java.sql.SQLOutput;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.Set; import java.util.Set;
......
...@@ -2,8 +2,6 @@ package com.lemon.utils; ...@@ -2,8 +2,6 @@ package com.lemon.utils;
import com.lemon.constants.Constants; import com.lemon.constants.Constants;
import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler; import org.apache.commons.dbutils.handlers.ScalarHandler;
import java.sql.Connection; import java.sql.Connection;
......
...@@ -3,27 +3,32 @@ ...@@ -3,27 +3,32 @@
<!-- <test name="睿思数据"> &lt;!&ndash; 模块&ndash;&gt;--> <!-- <test name="睿思数据"> &lt;!&ndash; 模块&ndash;&gt;-->
<!-- <classes>--> <!-- <classes>-->
<!-- <class name="com.lemon.cases.RaysDataCase"/> &lt;!&ndash; 测试类/用例类&ndash;&gt;--> <!-- <class name="cases.com.lemon.RaysDataCase"/> &lt;!&ndash; 测试类/用例类&ndash;&gt;-->
<!-- </classes>--> <!-- </classes>-->
<!-- </test>--> <!-- </test>-->
<!-- <test name="RAYS支付"> &lt;!&ndash; 模块&ndash;&gt;--> <!-- <test name="RAYS支付"> &lt;!&ndash; 模块&ndash;&gt;-->
<!-- <classes>--> <!-- <classes>-->
<!-- <class name="com.lemon.cases.PayCase"/> &lt;!&ndash; 测试类/用例类&ndash;&gt;--> <!-- <class name="cases.com.lemon.PayCase"/> &lt;!&ndash; 测试类/用例类&ndash;&gt;-->
<!-- </classes>--> <!-- </classes>-->
<!-- </test>--> <!-- </test>-->
<!-- <test name="RAYS7标准化"> &lt;!&ndash; 模块&ndash;&gt;--> <!-- <test name="RAYS7标准化"> &lt;!&ndash; 模块&ndash;&gt;-->
<!-- <classes>--> <!-- <classes>-->
<!-- <class name="com.lemon.cases.Rays7Case"/> &lt;!&ndash; 测试类/用例类&ndash;&gt;--> <!-- <class name="cases.com.lemon.Rays7Case"/> &lt;!&ndash; 测试类/用例类&ndash;&gt;-->
<!-- </classes>--> <!-- </classes>-->
<!-- </test>--> <!-- </test>-->
<!-- <test name="RAYS7服务"> &lt;!&ndash; 模块&ndash;&gt; <!-- <test name="RAYS7服务"> &lt;!&ndash; 模块&ndash;&gt;
<classes> <classes>
<class name="com.lemon.cases.changjiangzuoyeserveCase"/> &lt;!&ndash; 测试类/用例类&ndash;&gt; <class name="cases.com.lemon.changjiangzuoyeserveCase"/> &lt;!&ndash; 测试类/用例类&ndash;&gt;
</classes> </classes>
</test>--> </test>-->
<test name="多媒体制作与人工智能运用繁体"> <!-- 模块-->
<classes>
<class name="com.lemon.cases.OverseasMultimediaServeCase"/> <!-- 测试类/用例类-->
</classes>
</test>
<test name="博物馆里的奇妙中国"> <!-- 模块--> <test name="博物馆里的奇妙中国"> <!-- 模块-->
<classes> <classes>
...@@ -31,9 +36,20 @@ ...@@ -31,9 +36,20 @@
</classes> </classes>
</test> </test>
<test name="摄影的黄金时间"> <!-- 模块-->
<classes>
<class name="com.lemon.cases.ThegoldentimeofphotographyServeCase"/> <!-- 测试类/用例类-->
</classes>
</test>
<test name="2024幼小衔接"> <!-- 模块-->
<classes>
<class name="com.lemon.cases.youxiaoxianjieServeCase"/> <!-- 测试类/用例类-->
</classes>
</test>
<!-- <test name="注册模块"> &lt;!&ndash; 模块&ndash;&gt;--> <!-- <test name="注册模块"> &lt;!&ndash; 模块&ndash;&gt;-->
<!-- <classes>--> <!-- <classes>-->
<!-- <class name="com.lemon.cases.RegisterDemoCase"/> &lt;!&ndash; 测试类/用例类&ndash;&gt;--> <!-- <class name="cases.com.lemon.RegisterDemoCase"/> &lt;!&ndash; 测试类/用例类&ndash;&gt;-->
<!-- </classes>--> <!-- </classes>-->
<!-- </test>--> <!-- </test>-->
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment