Commit 6ccafa64 by xyy

新增ai能力case

parent 2325e33c
package com.xiaomai.cases.polar.training;
import com.alibaba.fastjson.JSONObject;
import com.xiaomai.basetest.BaseTestImpl;
import com.xiaomai.cases.lunar.user.UserTools;
import com.xiaomai.client.DataUserInfo;
import com.xiaomai.enums.ApiModule;
import com.xiaomai.enums.LoginAccount;
import com.xiaomai.enums.RequestType;
import com.xiaomai.enums.Terminal;
import com.xiaomai.utils.XMJSONPath;
import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import javax.annotation.Resource;
public class TestAiChat extends BaseTestImpl {
@Resource(name="trainingTools")
TrainingTools trainingTools;
@Resource(name="userTools")
UserTools userTools;
DataUserInfo info = new DataUserInfo();
String memberId;
@BeforeMethod
@Override
public void beforeTest(){
setTestInfo(ApiModule.Polar_Training, "API_aiChat", LoginAccount.GYM_PROD, Terminal.B, "xyy");
super.beforeTest();
}
@Test(description = "获取AI小助理>进入日常会话>获取场景历史数据>进行AI聊天>清除聊天上下文>删除聊天记录")
public void testGetTrainingPlanContent() throws InterruptedException {
//1.获取日常问答的modelId,personModelId
String modelId = XMJSONPath.readPath(trainingTools.listModelPerson(),"$.result[0].modelId");
String personModelId = XMJSONPath.readPath(trainingTools.listModelPerson(),"$.result[0].id");
//2.获取日常问答的会话id
String conversationId = trainingTools.getAiConversationId(modelId,personModelId);
//3.查询当前会话的历史数据
int num = Integer.parseInt(XMJSONPath.readPath(trainingTools.getConversationMessagePage(conversationId),"$.result.total"));
JSONObject body = new JSONObject();
body.put("conversationId",conversationId);
body.put("question","你好");
//调用请求
xmAppApi.doRequest(RequestType.JSON, params, body.toString(), headers);
Thread.sleep(2000);
Assert.assertTrue(Integer.parseInt(XMJSONPath.readPath(trainingTools.getConversationMessagePage(conversationId),"$.result.total"))==num+2);
//4.清除聊天上下文
trainingTools.clearConversationContext(conversationId);
Assert.assertTrue(Integer.parseInt(XMJSONPath.readPath(trainingTools.getConversationMessagePage(conversationId),"$.result.total"))==num+2);
//5.删除聊天记录
trainingTools.clearConversationHistory(conversationId);
Assert.assertTrue(Integer.parseInt(XMJSONPath.readPath(trainingTools.getConversationMessagePage(conversationId),"$.result.total"))==0);
}
}
package com.xiaomai.cases.polar.training;
import com.alibaba.fastjson.JSONObject;
import com.xiaomai.basetest.BaseTestImpl;
import com.xiaomai.cases.lunar.user.UserTools;
import com.xiaomai.client.DataUserInfo;
import com.xiaomai.enums.ApiModule;
import com.xiaomai.enums.LoginAccount;
import com.xiaomai.enums.RequestType;
import com.xiaomai.enums.Terminal;
import com.xiaomai.utils.XMJSONPath;
import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import javax.annotation.Resource;
public class TestGetTrainingPlanContent extends BaseTestImpl {
@Resource(name="trainingTools")
TrainingTools trainingTools;
@Resource(name="userTools")
UserTools userTools;
DataUserInfo info = new DataUserInfo();
String memberId;
@BeforeMethod
@Override
public void beforeTest(){
setTestInfo(ApiModule.Polar_Training, "API_getTrainingPlanContent", LoginAccount.GYM_PROD, Terminal.B, "xyy");
super.beforeTest();
}
@Test(description = "智能生成训练计划>查看训练详情>编辑训练计划>C端查看动作详情>删除训练计划")
public void testGetTrainingPlanContent() throws InterruptedException {
info.setTerminal(Terminal.minApp);
info.setLoginUser(LoginAccount.GYM_MINIAPPC);
//1.获取会员id
memberId = userTools.getMemberInfo(info).getString("memberId");
//2.获取胸部id
String bodyPartId = XMJSONPath.readPath(trainingTools.getBodyPartList(),"$.result[0].id");
//3.获取b端训练计划列表数据条数
int num = Integer.parseInt(XMJSONPath.readPath(trainingTools.trainingPlanRecordPage(memberId,""),"$.result.total"));
//4.智能生成中
String generateId = trainingTools.generateTrainingPlan(bodyPartId,memberId);
JSONObject body = new JSONObject();
body.put("id",generateId);
body.put("brandId", xmAppApi.getLoginInfo().getBrandId());
body.put("studioId",xmAppApi.getLoginInfo().getStudioId());
body.put("operatorId", xmAppApi.getLoginInfo().getAdminId());
//调用请求
xmAppApi.doRequest(RequestType.JSON, params, body.toString(), headers).assetsSuccess(true);
Thread.sleep(2000);
Assert.assertNotNull(XMJSONPath.readPath(xmAppApi.getBodyInJSON(),"$.result"));
//5.保存并发送训练计划
String exerciseId = XMJSONPath.readPath(trainingTools.getListByName("胸"),"$.result[0].id");
String exerciseName = XMJSONPath.readPath(trainingTools.getListByName("胸"),"$.result[0].name");
String recordId = trainingTools.trainingPlanRecordCreate(memberId,exerciseId,exerciseName);
Assert.assertTrue(Integer.parseInt(XMJSONPath.readPath(trainingTools.trainingPlanRecordPage(memberId,""),"$.result.total"))==num+1);
//查看c端动作详情信息与b端提交的数据匹配
Assert.assertEquals(XMJSONPath.readPath(trainingTools.findTrainExerciseDetailById(exerciseId,recordId,info),"$.result.name"),exerciseName);
Assert.assertEquals(XMJSONPath.readPath(trainingTools.findTrainExerciseDetailById(exerciseId,recordId,info),"$.result.trainingBodyPartList[0].id"),bodyPartId);
//6.清理数据
//删除训练计划
trainingTools.trainingPlanRecordDelete(recordId);
//检验训练计划列表数据跟初始保持一致
Assert.assertTrue(Integer.parseInt(XMJSONPath.readPath(trainingTools.trainingPlanRecordPage(memberId,""),"$.result.total"))==num);
}
}
...@@ -752,53 +752,34 @@ public class TrainingTools extends XMBaseTest { ...@@ -752,53 +752,34 @@ public class TrainingTools extends XMBaseTest {
Assert.assertTrue(Boolean.valueOf(XMJSONPath.readPath(dataApi.getApi_response(), "$.success")) == true, "调用接口返回结果:" + XMJSONPath.readPath(dataApi.getApi_response(), "$.message")); Assert.assertTrue(Boolean.valueOf(XMJSONPath.readPath(dataApi.getApi_response(), "$.success")) == true, "调用接口返回结果:" + XMJSONPath.readPath(dataApi.getApi_response(), "$.message"));
} }
/** /**
* 创建训练计划 * 创建智能训练计划
* @return * @return
*/ */
public String trainingPlanRecordCreate(String memberId,String content,String templateId,String templateName,String itemType,String itemName) { public String trainingPlanRecordCreate(String memberId,String exerciseId,String exerciseName){
setUP("API_trainingPlanRecordCreate"); setUP("API_trainingPlanRecordCreate");
String content ="[{\"id\":\""+exerciseId+"\",\"name\":\""+exerciseName+"\",\"trainExerciseType\":\"SYSTEM\",\"arrange\":[{\"timeAmount\":{\"num\":\"12\",\"unit\":\"times\"},\"weightAmount\":{\"num\":\"12\",\"unit\":\"RM\"}},{\"timeAmount\":{\"num\":\"12\",\"unit\":\"times\"},\"weightAmount\":{\"num\":\"12\",\"unit\":\"RM\"}},{\"timeAmount\":{\"num\":\"12\",\"unit\":\"times\"},\"weightAmount\":{\"num\":\"12\",\"unit\":\"RM\"}}]}]";
//获取模板内容id、创建者、更新时间
String templateItemId = XMJSONPath.readPath(this.trainingTemplateDetail(templateId),"$.result.templateItemList[0].templateItemId");
String creatorName = XMJSONPath.readPath(this.trainingTemplateDetail(templateId),"$.result.creatorName");
String lastUpdated = XMJSONPath.readPath(this.trainingTemplateDetail(templateId),"$.result.lastUpdated");
//构建template
JSONArray templateItemList=new JSONArray();
JSONObject itemObject = new JSONObject();
itemObject.put("templateItemId",templateItemId);
itemObject.put("templateItemName",itemName);
itemObject.put("trainingTemplateItemType",itemType);
templateItemList.add(itemObject);
JSONObject template = new JSONObject();
template.put("templateId",templateId);
template.put("templateName",templateName);
template.put("templateItemList",templateItemList);
template.put("creatorName",creatorName);
template.put("lastModified",lastUpdated);
//构建trainList //构建trainList
JSONArray trainList = new JSONArray(); JSONArray trainList = new JSONArray();
JSONObject train = new JSONObject(); JSONObject exercise = new JSONObject();
train.put("name",itemName); exercise.put("trainingTemplateItemType","EXERCISE");
train.put("content",null); exercise.put("name","训练动作");
if(null != content || !content.isEmpty()) { exercise.put("content",content);
train.put("content",content); JSONObject graphic = new JSONObject();
} graphic.put("trainingTemplateItemType","GRAPHIC");
train.put("trainingTemplateItemType",itemType); graphic.put("name","训练建议");
trainList.add(train); graphic.put("content","{\"items\":[{\"type\":\"TEXT\",\"content\":\"由于是低强度训练,建议注重动作的标准性,避免受伤。可以在训练前后进行适当拉伸,提高训练效果。\"}]}");
trainList.add(exercise);
trainList.add(graphic);
//构建请求 //构建请求
JSONObject body = new JSONObject(); JSONObject body = new JSONObject();
body.put("memberId",memberId); body.put("memberId",memberId);
body.put("trainingPlanName","训练计划"+RandomStringUtil.randomString(5)); body.put("trainingPlanName","脚本生成智能训练计划"+RandomStringUtil.randomString(5));
body.put("template",template);
body.put("id",""); body.put("id","");
body.put("sendStatus","SEND");//已发送"SEND",未发送"UN_SEND" body.put("sendStatus","SEND");//已发送"SEND",未发送"UN_SEND"
body.put("templateId",templateId);
body.put("templateName",templateName);
body.put("trainingTemplateDetailList",trainList); body.put("trainingTemplateDetailList",trainList);
body.put("trainingPlanType","AUTO");
body.put("studioId",dataApi.getLoginInfo().getStudioId()); body.put("studioId",dataApi.getLoginInfo().getStudioId());
body.put("brandId", dataApi.getLoginInfo().getBrandId()); body.put("brandId", dataApi.getLoginInfo().getBrandId());
body.put("creator",dataApi.getLoginInfo().getAdminId()); body.put("creator",dataApi.getLoginInfo().getAdminId());
...@@ -904,6 +885,27 @@ public class TrainingTools extends XMBaseTest { ...@@ -904,6 +885,27 @@ public class TrainingTools extends XMBaseTest {
return dataApi.getBodyInJSON(); return dataApi.getBodyInJSON();
} }
/**
* 智能生成训练计划
*/
public String generateTrainingPlan(String bodyPartId,String memberId) {
setUP("API_generateTrainingPlan");
JSONArray bodyPartIds = new JSONArray();
bodyPartIds.add(bodyPartId);
String promot ="# 你是一个健身教练,需要根据会员的一些信息,以及给出动作库,输出一份完整的动作训练计划;\n# 要求与限制:\n1.输出的动作仅可取自给定的的动作库;\n2.每一个动作都必须包含:ID(id),动作名称(name),组数(groupNum),重量的单位(weightUnit),重量的数值(weightNum),次数的单位(timesUnit),次数的数值(timesNum);\nID取该动作的ID;组数仅可输出1-100以内一个正整数;重量的单位可以选择KG(KG)/LBS(LBS)/RM(RM)/空(\"\"),重量的数值只输出1-100以内一个正整数即可;次数单位可以选择次(times)/分钟(minute)/秒(second)/空(\"\"),次数多单位只输出1-100以内一个正整数即可。\n3.动作训练计划必须以json格式输出;\n4.根据会员信息中的动作强度输出不同数量的动作个数,需至少保证5个动作;(动作强度分为:高强度,中等强度,低强度,训练强度越大动作数量越大,至多输出18个动作)。\n5.全部动作输出完毕后,基于你对会员信息的理解,再输出一个字段:训练建议。\n6.不要分析,不要输出任何多余内容,直接输出json内容。\n@@\n# 输出示例:\n接收的会员信息:\n性别:男\n年龄:34\n身高:176\n体重:76kg\n体脂率:30%\n训练部位:胸部、心肺\n训练强度:低强度\n输出的内容:\n```json\n{\n\"exerciseItems\": [\n{\n\"id\": \"1\",\n\"name\": \"杠铃卧推\",\n\"groupNum\": 3,\n\"weightUnit\": \"KG\",\n\"weightNum\": \"25\",\n\"timesUnit\": \"times\",\n\"timesNum\": \"15\",\n},\n],\n\"extra\": [\n\"advise\": \"健身过程中请保持核心收紧,关注自身心率变动\",\n],\n}\n```\n\n# 现在给出的会员信息为,请直接输出json动作:\n性别:女\n年龄:26\n身高:160CM\n体重:48.3KG\n体脂率:26.1%\n训练部位:胸部\n训练强度:低强度\n";
JSONObject body = new JSONObject();
body.put("bodyPartIds",bodyPartIds);
body.put("memberId",memberId);
body.put("promot",promot);
body.put("studioId",dataApi.getLoginInfo().getStudioId());
body.put("brandId", dataApi.getLoginInfo().getBrandId());
body.put("operatorId", dataApi.getLoginInfo().getAdminId());
dataApi.doRequest(RequestType.JSON, dataparams, body.toString(), dataheadrs);
Assert.assertTrue(Boolean.valueOf(XMJSONPath.readPath(dataApi.getApi_response(), "$.success")) == true, "调用接口返回结果:" + XMJSONPath.readPath(dataApi.getApi_response(), "$.message"));
return dataApi.getBodyInJSON().getString("result");
}
/** /**
* 删除训练记录 * 删除训练记录
...@@ -966,6 +968,25 @@ public class TrainingTools extends XMBaseTest { ...@@ -966,6 +968,25 @@ public class TrainingTools extends XMBaseTest {
return dataApi.getBodyInJSON(); return dataApi.getBodyInJSON();
} }
/** /**
* 小程序训练计划的动作详情
* @return
*/
public JSONObject findTrainExerciseDetailById(String exerciseId,String planRecordId,DataUserInfo...userInfo) {
dataApi.setApiModule(ApiModule.Lunar_Training)
.setApiName("API_findTrainExerciseDetailById")
.setTerminal(Terminal.minApp);
super.beforeDataRequest(userInfo);
JSONObject body = new JSONObject();
body.put("exerciseId",exerciseId);
body.put("planRecordId",planRecordId);
dataApi.doRequest(RequestType.JSON, dataparams, body.toString(), dataheadrs);
Assert.assertTrue(Boolean.valueOf(XMJSONPath.readPath(dataApi.getApi_response(), "$.success")) == true, "调用接口返回结果:" + XMJSONPath.readPath(dataApi.getApi_response(), "$.message"));
return dataApi.getBodyInJSON();
}
/**
* 小程序我的训练记录分享 * 小程序我的训练记录分享
* @param recordId * @param recordId
* @param userInfo * @param userInfo
...@@ -991,6 +1012,86 @@ public class TrainingTools extends XMBaseTest { ...@@ -991,6 +1012,86 @@ public class TrainingTools extends XMBaseTest {
return dataApi.getBodyInJSON(); return dataApi.getBodyInJSON();
} }
/**
* AI小助理列表
* @return
*/
public JSONObject listModelPerson(){
setUP("API_listModelPerson");
JSONObject body = new JSONObject();
body.put("userId",dataApi.getLoginInfo().getAdminId());
body.put("brandId", dataApi.getLoginInfo().getBrandId());
body.put("studioId",dataApi.getLoginInfo().getStudioId());
body.put("operatorId", dataApi.getLoginInfo().getAdminId());
dataApi.doRequest(RequestType.JSON, dataparams, body.toString(), dataheadrs);
Assert.assertTrue(Boolean.valueOf(XMJSONPath.readPath(dataApi.getApi_response(), "$.success")) == true, "调用接口返回结果:" + XMJSONPath.readPath(dataApi.getApi_response(), "$.message"));
return dataApi.getBodyInJSON();
}
/**
* 获取会话id
* @return
*/
public String getAiConversationId(String modelId,String personModelId) {
setUP("API_getAiConversationId");
JSONObject body = new JSONObject();
body.put("modelId", modelId);
body.put("personModelId", personModelId);
body.put("studioId", dataApi.getLoginInfo().getStudioId());
body.put("userId", dataApi.getLoginInfo().getAdminId());
body.put("brandId", dataApi.getLoginInfo().getBrandId());
body.put("operatorId", dataApi.getLoginInfo().getAdminId());
dataApi.doRequest(RequestType.JSON, dataparams, body.toString(), dataheadrs);
Assert.assertTrue(Boolean.valueOf(XMJSONPath.readPath(dataApi.getApi_response(), "$.success")) == true, "调用接口返回结果:" + XMJSONPath.readPath(dataApi.getApi_response(), "$.message"));
return dataApi.getBodyInJSON().getString("result");
}
/**
* 获取会话历史信息
* @return
*/
public JSONObject getConversationMessagePage(String conversationId) {
setUP("API_getConversationMessagePage");
JSONObject body = new JSONObject();
body.put("studioId", dataApi.getLoginInfo().getStudioId());
body.put("current", 0);
body.put("size", 10);
body.put("conversationId",conversationId);
body.put("brandId", dataApi.getLoginInfo().getBrandId());
body.put("operatorId", dataApi.getLoginInfo().getAdminId());
dataApi.doRequest(RequestType.JSON, dataparams, body.toString(), dataheadrs);
Assert.assertTrue(Boolean.valueOf(XMJSONPath.readPath(dataApi.getApi_response(), "$.success")) == true, "调用接口返回结果:" + XMJSONPath.readPath(dataApi.getApi_response(), "$.message"));
return dataApi.getBodyInJSON();
}
/**
* 清除聊天上下文
* @return
*/
public void clearConversationContext(String conversationId) {
setUP("API_clearConversationContext");
JSONObject body = new JSONObject();
body.put("id", conversationId);
body.put("brandId", dataApi.getLoginInfo().getBrandId());
body.put("studioId", dataApi.getLoginInfo().getStudioId());
body.put("operatorId", dataApi.getLoginInfo().getAdminId());
dataApi.doRequest(RequestType.JSON, dataparams, body.toString(), dataheadrs);
Assert.assertTrue(Boolean.valueOf(XMJSONPath.readPath(dataApi.getApi_response(), "$.success")) == true, "调用接口返回结果:" + XMJSONPath.readPath(dataApi.getApi_response(), "$.message"));
}
/**
* 删除聊天记录
* @return
*/
public void clearConversationHistory(String conversationId) {
setUP("API_clearConversationHistory");
JSONObject body = new JSONObject();
body.put("id", conversationId);
body.put("brandId", dataApi.getLoginInfo().getBrandId());
body.put("studioId", dataApi.getLoginInfo().getStudioId());
body.put("operatorId", dataApi.getLoginInfo().getAdminId());
dataApi.doRequest(RequestType.JSON, dataparams, body.toString(), dataheadrs);
Assert.assertTrue(Boolean.valueOf(XMJSONPath.readPath(dataApi.getApi_response(), "$.success")) == true, "调用接口返回结果:" + XMJSONPath.readPath(dataApi.getApi_response(), "$.message"));
}
} }
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