test(qms-sampling-plan): 完善抽样方案接口测试用例及相关代码

- QmsSamplingPlanAddQO中SamplingPlanInspectionQO类添加链式调用支持
- 测试类QmsSamplingPlanApiTest完善注释和常量格式
- 引入RandomUtil和DateTimeUtil生成动态抽样方案名称
- 调整抽样方案构造逻辑,大幅简化字码列表只包含"A"
- 补充字码矩阵数据,增加多个检查项矩阵配置
- 扩充抽样方案检验列表,添加多个InspectionDictionaryItemId项
- 统一post接口调用格式,修正断言提示信息文案
- 删除冗余AQL优先值,优化构造流程和代码清晰度
This commit is contained in:
曹鹏飞 2026-05-09 16:04:09 +08:00
parent 5576c446ce
commit 9c32bbb9ed
2 changed files with 99 additions and 31 deletions

View File

@ -2,17 +2,20 @@ package com.nflg.qms.admin;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.lang.TypeReference;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.json.JSONUtil;
import com.nflg.wms.common.pojo.ApiResult;
import com.nflg.wms.common.pojo.qo.QmsSamplingPlanAddQO;
import com.nflg.wms.common.util.DateTimeUtil;
import org.junit.jupiter.api.MethodOrderer;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestMethodOrder;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
@ -28,13 +31,19 @@ import java.util.List;
public class QmsSamplingPlanApiTest {
// ===================== 配置区 =====================
/** 服务地址 */
/**
* 服务地址
*/
private static final String BASE_URL = "http://localhost:8105";
/** 当前登录用户的 token */
private static final String TOKEN = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpblR5cGUiOiJsb2dpbiIsImxvZ2luSWQiOjEsInJuU3RyIjoidVFwSWM2R3RJeUoxcFNSczBadzJzb1hvMUZLZXB3czkiLCJuYW1lIjoi6LaF57qn566h55CG5ZGYIiwiY29kZSI6ImFkbWluIiwicm9sZXMiOlsiU3VwZXJBZG1pbiJdLCJ0eXBlIjoxfQ.FtQ2uVwvuxsjAFbXnB006hV1pODtRhZT0z_9nfuR0So";
/**
* 当前登录用户的 token
*/
private static final String TOKEN = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpblR5cGUiOiJsb2dpbiIsImxvZ2luSWQiOjEsInJuU3RyIjoiVVJ0dG9HbTlqMllaRWh0dTV6V1NaUldXZEtxN2VZMmYiLCJuYW1lIjoi6LaF57qn566h55CG5ZGYIiwiY29kZSI6ImFkbWluIiwicm9sZXMiOlsiU3VwZXJBZG1pbiIsIkNBTkdLVUdVQU5MSVlVQU4iXSwidHlwZSI6MX0.b_vTCbb7JpmZx0DT6XM-hTgVC7RlLmr1Vwi7-A26ThQ";
// ===================== 配置区结束 =====================
/** 测试过程中创建的抽样方案编号(用于验证) */
/**
* 测试过程中创建的抽样方案编号用于验证
*/
private static String createdPlanCode;
// ==================== HTTP 工具方法 ====================
@ -78,7 +87,8 @@ public class QmsSamplingPlanApiTest {
public void test01_addSamplingPlan_Success() {
QmsSamplingPlanAddQO request = buildValidRequest();
ApiResult<Void> result = post("/sampling-plan/add", request, new TypeReference<>() {});
ApiResult<Void> result = post("/sampling-plan/add", request, new TypeReference<>() {
});
assertSuccess(result, "新增抽样方案失败");
System.out.println(" ✅ 新增抽样方案成功");
}
@ -93,7 +103,8 @@ public class QmsSamplingPlanApiTest {
QmsSamplingPlanAddQO request = buildValidRequest();
request.setPlanName(null);
ApiResult<Void> result = post("/sampling-plan/add", request, new TypeReference<>() {});
ApiResult<Void> result = post("/sampling-plan/add", request, new TypeReference<>() {
});
assertFailed(result, "方案名称为空应返回失败");
System.out.println(" ✅ 方案名称为空校验通过");
}
@ -108,7 +119,8 @@ public class QmsSamplingPlanApiTest {
QmsSamplingPlanAddQO request = buildValidRequest();
request.setAqlPriorityValues(null);
ApiResult<Void> result = post("/sampling-plan/add", request, new TypeReference<>() {});
ApiResult<Void> result = post("/sampling-plan/add", request, new TypeReference<>() {
});
assertFailed(result, "AQL优先值列表为空应返回失败");
System.out.println(" ✅ AQL优先值列表为空校验通过");
}
@ -123,7 +135,8 @@ public class QmsSamplingPlanApiTest {
QmsSamplingPlanAddQO request = buildValidRequest();
request.setStrictnessTransferRules(null);
ApiResult<Void> result = post("/sampling-plan/add", request, new TypeReference<>() {});
ApiResult<Void> result = post("/sampling-plan/add", request, new TypeReference<>() {
});
assertFailed(result, "严格性转移规则列表为空应返回失败");
System.out.println(" ✅ 严格性转移规则列表为空校验通过");
}
@ -138,7 +151,8 @@ public class QmsSamplingPlanApiTest {
QmsSamplingPlanAddQO request = buildValidRequest();
request.setCodeLetters(null);
ApiResult<Void> result = post("/sampling-plan/add", request, new TypeReference<>() {});
ApiResult<Void> result = post("/sampling-plan/add", request, new TypeReference<>() {
});
assertFailed(result, "字码列表为空应返回失败");
System.out.println(" ✅ 字码列表为空校验通过");
}
@ -153,7 +167,8 @@ public class QmsSamplingPlanApiTest {
QmsSamplingPlanAddQO request = buildValidRequest();
request.setCodeLetterMatrices(null);
ApiResult<Void> result = post("/sampling-plan/add", request, new TypeReference<>() {});
ApiResult<Void> result = post("/sampling-plan/add", request, new TypeReference<>() {
});
assertFailed(result, "字码矩阵维护列表为空应返回失败");
System.out.println(" ✅ 字码矩阵维护列表为空校验通过");
}
@ -168,7 +183,8 @@ public class QmsSamplingPlanApiTest {
QmsSamplingPlanAddQO request = buildValidRequest();
request.setSamplingPlanInspections(null);
ApiResult<Void> result = post("/sampling-plan/add", request, new TypeReference<>() {});
ApiResult<Void> result = post("/sampling-plan/add", request, new TypeReference<>() {
});
assertFailed(result, "抽样方案检验列表为空应返回失败");
System.out.println(" ✅ 抽样方案检验列表为空校验通过");
}
@ -184,7 +200,8 @@ public class QmsSamplingPlanApiTest {
request.setPlanName("完整参数抽样方案_" + System.currentTimeMillis());
request.setRemark("这是接口测试创建的抽样方案");
ApiResult<Void> result = post("/sampling-plan/add", request, new TypeReference<>() {});
ApiResult<Void> result = post("/sampling-plan/add", request, new TypeReference<>() {
});
assertSuccess(result, "带备注的新增抽样方案失败");
System.out.println(" ✅ 带备注的新增抽样方案成功");
}
@ -196,7 +213,7 @@ public class QmsSamplingPlanApiTest {
*/
private QmsSamplingPlanAddQO buildValidRequest() {
QmsSamplingPlanAddQO request = new QmsSamplingPlanAddQO();
request.setPlanName("测试抽样方案_" + System.currentTimeMillis());
request.setPlanName("抽样方案_" + DateTimeUtil.format(LocalDate.now()) + "_" + RandomUtil.randomNumbers(4));
request.setRemark("接口测试备注");
// 构建AQL优先值列表
@ -204,9 +221,6 @@ public class QmsSamplingPlanApiTest {
QmsSamplingPlanAddQO.AqlPriorityValueQO aql1 = new QmsSamplingPlanAddQO.AqlPriorityValueQO();
aql1.setPriorityValue(new BigDecimal("0.010"));
aqlPriorityValues.add(aql1);
QmsSamplingPlanAddQO.AqlPriorityValueQO aql2 = new QmsSamplingPlanAddQO.AqlPriorityValueQO();
aql2.setPriorityValue(new BigDecimal("0.065"));
aqlPriorityValues.add(aql2);
request.setAqlPriorityValues(aqlPriorityValues);
// 构建严格性转移规则列表
@ -227,7 +241,7 @@ public class QmsSamplingPlanApiTest {
// 构建字码列表
List<QmsSamplingPlanAddQO.CodeLetterQO> codeLetters = new ArrayList<>();
String[] letters = {"A", "B", "C", "D", "E", "F", "G", "H", "J"};
String[] letters = {"A"};
for (String letter : letters) {
QmsSamplingPlanAddQO.CodeLetterQO codeLetter = new QmsSamplingPlanAddQO.CodeLetterQO();
codeLetter.setCodeLetter(letter);
@ -239,24 +253,76 @@ public class QmsSamplingPlanApiTest {
// 使用字码内容和AQL优先值来关联而不是ID
// 字码内容需要在codeLetters列表中存在AQL优先值需要在aqlPriorityValues列表中存在
List<QmsSamplingPlanAddQO.CodeLetterMatrixQO> matrices = new ArrayList<>();
QmsSamplingPlanAddQO.CodeLetterMatrixQO matrix = new QmsSamplingPlanAddQO.CodeLetterMatrixQO();
matrix.setInspectionType((short) 0); // 正常检查
matrix.setCodeLetter("A"); // 关联字码列表中的"A"
matrix.setAqlPriorityValue(new BigDecimal("0.010")); // 关联AQL优先值列表中的0.010
matrix.setSampleSize(125);
matrix.setReValue(3);
matrix.setAcValue(3);
matrices.add(matrix);
QmsSamplingPlanAddQO.CodeLetterMatrixQO matrix1 = new QmsSamplingPlanAddQO.CodeLetterMatrixQO();
matrix1.setInspectionType((short) 0); // 正常检查
matrix1.setCodeLetter("A"); // 关联字码列表中的"A"
matrix1.setAqlPriorityValue(new BigDecimal("0.010")); // 关联AQL优先值列表中的0.010
matrix1.setSampleSize(125);
matrix1.setReValue(3);
matrix1.setAcValue(3);
matrices.add(matrix1);
QmsSamplingPlanAddQO.CodeLetterMatrixQO matrix2 = new QmsSamplingPlanAddQO.CodeLetterMatrixQO();
matrix2.setInspectionType((short) 1); // 正常检查
matrix2.setCodeLetter("A"); // 关联字码列表中的"A"
matrix2.setAqlPriorityValue(new BigDecimal("0.010")); // 关联AQL优先值列表中的0.010
matrix2.setSampleSize(125);
matrix2.setReValue(3);
matrix2.setAcValue(3);
matrices.add(matrix2);
QmsSamplingPlanAddQO.CodeLetterMatrixQO matrix3 = new QmsSamplingPlanAddQO.CodeLetterMatrixQO();
matrix3.setInspectionType((short) 2); // 正常检查
matrix3.setCodeLetter("A"); // 关联字码列表中的"A"
matrix3.setAqlPriorityValue(new BigDecimal("0.010")); // 关联AQL优先值列表中的0.010
matrix3.setSampleSize(125);
matrix3.setReValue(3);
matrix3.setAcValue(3);
matrices.add(matrix3);
request.setCodeLetterMatrices(matrices);
// 构建抽样方案检验列表
List<QmsSamplingPlanAddQO.SamplingPlanInspectionQO> inspections = new ArrayList<>();
QmsSamplingPlanAddQO.SamplingPlanInspectionQO inspection = new QmsSamplingPlanAddQO.SamplingPlanInspectionQO();
inspection.setRangeStart(1201);
inspection.setRangeEnd(3200);
inspection.setInspectionDictionaryItemId(1L);
inspection.setCodeLetter("A"); // 关联字码列表中的"A"
inspections.add(inspection);
inspections.add(new QmsSamplingPlanAddQO.SamplingPlanInspectionQO()
.setRangeStart(1)
.setRangeEnd(10000)
.setInspectionDictionaryItemId(2043862841552723969L)
.setCodeLetter("A")
);
inspections.add(new QmsSamplingPlanAddQO.SamplingPlanInspectionQO()
.setRangeStart(1)
.setRangeEnd(10000)
.setInspectionDictionaryItemId(2043862877426606081L)
.setCodeLetter("A")
);
inspections.add(new QmsSamplingPlanAddQO.SamplingPlanInspectionQO()
.setRangeStart(1)
.setRangeEnd(10000)
.setInspectionDictionaryItemId(2043862910502887425L)
.setCodeLetter("A")
);
inspections.add(new QmsSamplingPlanAddQO.SamplingPlanInspectionQO()
.setRangeStart(1)
.setRangeEnd(10000)
.setInspectionDictionaryItemId(2043862949837070338L)
.setCodeLetter("A")
);
inspections.add(new QmsSamplingPlanAddQO.SamplingPlanInspectionQO()
.setRangeStart(1)
.setRangeEnd(10000)
.setInspectionDictionaryItemId(2043863106863423489L)
.setCodeLetter("A")
);
inspections.add(new QmsSamplingPlanAddQO.SamplingPlanInspectionQO()
.setRangeStart(1)
.setRangeEnd(10000)
.setInspectionDictionaryItemId(2043863143576166401L)
.setCodeLetter("A")
);
inspections.add(new QmsSamplingPlanAddQO.SamplingPlanInspectionQO()
.setRangeStart(1)
.setRangeEnd(10000)
.setInspectionDictionaryItemId(2043863182146985986L)
.setCodeLetter("A")
);
request.setSamplingPlanInspections(inspections);
return request;

View File

@ -5,6 +5,7 @@ import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
import java.util.List;
@ -159,6 +160,7 @@ public class QmsSamplingPlanAddQO {
* 抽样方案检验
*/
@Data
@Accessors(chain = true)
public static class SamplingPlanInspectionQO {
/**
* 范围起始值批量下限