Commit a507bc1f by DuJunLi

新增编辑会员分群case

parent 72545c29
...@@ -62,7 +62,7 @@ public class MemberClusterTools extends BaseTestImpl { ...@@ -62,7 +62,7 @@ public class MemberClusterTools extends BaseTestImpl {
body.put("brandId", dataApi.getLoginInfo().getBrandId()); body.put("brandId", dataApi.getLoginInfo().getBrandId());
body.put("name", name); body.put("name", name);
dataApi.doRequest(RequestType.JSON, dataparams, body.toString(), dataheadrs); 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")); //断言在业务中check
} }
...@@ -135,7 +135,7 @@ public class MemberClusterTools extends BaseTestImpl { ...@@ -135,7 +135,7 @@ public class MemberClusterTools extends BaseTestImpl {
body.put("clusterId", clusterId); body.put("clusterId", clusterId);
body.put("messageType", messageType); body.put("messageType", messageType);
dataApi.doRequest(RequestType.JSON, dataparams, body.toString(), dataheadrs); 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")); //断言业务中check
} }
......
...@@ -35,10 +35,11 @@ public class TestCreateMemberCluster extends BaseTestImpl { ...@@ -35,10 +35,11 @@ public class TestCreateMemberCluster extends BaseTestImpl {
Tools tools = new Tools(); Tools tools = new Tools();
@Resource(name = "cardTools") @Resource(name = "cardTools")
CardTools cardTools; CardTools cardTools;
String clusterIdNewA=""; String clusterIdNewA = "";
String clusterIdNewB=""; String clusterIdNewB = "";
String clusterIdA=""; String clusterIdA = "";
String clusterIdB=""; String clusterIdB = "";
@BeforeClass @BeforeClass
public void beforeTest() { public void beforeTest() {
setTestInfo(ApiModule.Polar_Membercluster, "API_createMemberCluster", LoginAccount.ADU_PROD, Terminal.B, "adu"); setTestInfo(ApiModule.Polar_Membercluster, "API_createMemberCluster", LoginAccount.ADU_PROD, Terminal.B, "adu");
...@@ -114,17 +115,16 @@ public class TestCreateMemberCluster extends BaseTestImpl { ...@@ -114,17 +115,16 @@ public class TestCreateMemberCluster extends BaseTestImpl {
memberClusterTools.manuaUpdatelMemberCluster(); memberClusterTools.manuaUpdatelMemberCluster();
if (XMJSONPath.readPath(dataApi.getApi_response(), "$.message").equals("请稍后再试,手动更新需要间隔一小时")) { if (XMJSONPath.readPath(dataApi.getApi_response(), "$.message").equals("请稍后再试,手动更新需要间隔一小时")) {
//5.1 如果遇到这种场景,那么就启动存量数据了 //5.1 如果遇到这种场景,那么就启动存量数据了
clusterIdA="1850830131517263874"; clusterIdA = "1850830131517263874";
clusterIdB="1850835279266254850"; clusterIdB = "1850835279266254850";
} } else {
else {
//5.2 可以操作手动更新时,用新数据 //5.2 可以操作手动更新时,用新数据
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"));
//休息10秒,等待拉取数据结果 //休息10秒,等待拉取数据结果
Thread.sleep(10000); Thread.sleep(10000);
clusterIdA=clusterIdNewA; clusterIdA = clusterIdNewA;
clusterIdB=clusterIdNewB; clusterIdB = clusterIdNewB;
} }
...@@ -132,28 +132,30 @@ public class TestCreateMemberCluster extends BaseTestImpl { ...@@ -132,28 +132,30 @@ public class TestCreateMemberCluster extends BaseTestImpl {
//6.check 2个人群对应的会员名单,核对人数 //6.check 2个人群对应的会员名单,核对人数
memberClusterTools.getClusterMemberList(clusterIdA); memberClusterTools.getClusterMemberList(clusterIdA);
Assert.assertTrue(XMJSONPath.getJSONArrayByReadPath(dataApi.getApi_response(), "$.result.records").size() == 1, "更新后,满足所有条件的会员名单数量有问题,存量数据有1个满足条件的,请检查杜君丽学员为啥没满足条件"); Assert.assertTrue(XMJSONPath.getJSONArrayByReadPath(dataApi.getApi_response(), "$.result.records").size() == 1, "更新后,满足所有条件的会员名单数量有问题,存量数据有1个满足条件的,请检查杜君丽学员为啥没满足条件");
String memberId=XMJSONPath.readPath(dataApi.getApi_response(),"$.result.records[0].id"); String memberId = XMJSONPath.readPath(dataApi.getApi_response(), "$.result.records[0].id");
//6.1 check 会员名单-对应会员信息会员分群的账户情况 //6.1 check 会员名单-对应会员信息会员分群的账户情况
memberClusterTools.findMemberClusterInfo(memberId); memberClusterTools.findMemberClusterInfo(memberId);
//6.1.1 check 会员卡课程剩余次数 //6.1.1 check 会员卡课程剩余次数
Assert.assertEquals(XMJSONPath.readPath(dataApi.getApi_response(),"$.result.memberCardCourseLeftBalance"),"61.00","存量会员剩余购买会员卡次数61次,请检查是否是被人用了"); Assert.assertEquals(XMJSONPath.readPath(dataApi.getApi_response(), "$.result.memberCardCourseLeftBalance"), "61.00", "存量会员剩余购买会员卡次数61次,请检查是否是被人用了");
//6.1.2 check 储值卡剩余金额 //6.1.2 check 储值卡剩余金额
Assert.assertEquals(XMJSONPath.readPath(dataApi.getApi_response(),"$.result.depositCardLeftBalance"),"999.00","存量会员剩余购买储值卡金额999元,请检查是否是被人用了"); Assert.assertEquals(XMJSONPath.readPath(dataApi.getApi_response(), "$.result.depositCardLeftBalance"), "999.00", "存量会员剩余购买储值卡金额999元,请检查是否是被人用了");
//6.2. check 会员分群的会员名单 //6.2. check 会员分群的会员名单
memberClusterTools.getClusterMemberList(clusterIdB); memberClusterTools.getClusterMemberList(clusterIdB);
System.out.println("满足任意一个分群会员名单数量"+XMJSONPath.getJSONArrayByReadPath(dataApi.getApi_response(), "$.result.records").size()); System.out.println("满足任意一个分群会员名单数量" + XMJSONPath.getJSONArrayByReadPath(dataApi.getApi_response(), "$.result.records").size());
Assert.assertTrue(XMJSONPath.getJSONArrayByReadPath(dataApi.getApi_response(), "$.result.records").size() >= 0, "更新后,满足任意条件的会员名单数量有问题,存量数据有3个满足条件的,请检查杜君丽,吴彦祖,晨晨爸爸这3个学员为啥没满足条件"); Assert.assertTrue(XMJSONPath.getJSONArrayByReadPath(dataApi.getApi_response(), "$.result.records").size() >= 0, "更新后,满足任意条件的会员名单数量有问题,存量数据有3个满足条件的,请检查杜君丽,吴彦祖,晨晨爸爸这3个学员为啥没满足条件");
//7. 操作定向运营 //7. 操作定向运营
//7.1 批量发放微信消息 //7.1 批量发放微信消息
memberClusterTools.batchMessagePushForMemberCluster(clusterIdA, "WECHAT_COMMON"); memberClusterTools.batchMessagePushForMemberCluster(clusterIdA, "WECHAT_COMMON");
Assert.assertTrue(Boolean.valueOf(XMJSONPath.readPath(dataApi.getApi_response(), "$.success")) == true, "调用接口返回结果:" + XMJSONPath.readPath(dataApi.getApi_response(), "$.message"));
Thread.sleep(2000); Thread.sleep(2000);
//7.1.2 check 运营记录中是够生成一条记录:消息推送 //7.1.2 check 运营记录中是够生成一条记录:消息推送
memberClusterTools.getClusterOperateRecord(clusterIdA); memberClusterTools.getClusterOperateRecord(clusterIdA);
Assert.assertTrue(XMJSONPath.getJSONArrayByReadPath(dataApi.getApi_response(), "$.result.records") Assert.assertTrue(XMJSONPath.getJSONArrayByReadPath(dataApi.getApi_response(), "$.result.records")
.toJavaList(JSONObject.class).stream() .toJavaList(JSONObject.class).stream()
.filter(e ->"WECHAT_COMMON".equals(e.getString("messageType"))).count() >= 1, "列表中没获到刚操作定向运营发微信消息生成的运营记录"); .filter(e -> "WECHAT_COMMON".equals(e.getString("messageType"))).count() >= 1, "列表中没获到刚操作定向运营发微信消息生成的运营记录");
//常量放前面,变量放后面,否则容易报空指针,因为有些对应没messageType这个字段,还有一种解决方案,就是先过滤掉messageType为空的对象 //常量放前面,变量放后面,否则容易报空指针,因为有些对应没messageType这个字段,还有一种解决方案,就是先过滤掉messageType为空的对象
//7.2 批量发放优惠券 //7.2 批量发放优惠券
//获取存量优惠券:会员分群定向运营券,如果没有则新建 //获取存量优惠券:会员分群定向运营券,如果没有则新建
...@@ -183,19 +185,19 @@ public class TestCreateMemberCluster extends BaseTestImpl { ...@@ -183,19 +185,19 @@ public class TestCreateMemberCluster extends BaseTestImpl {
memberClusterTools.getClusterOperateRecord(clusterIdA); memberClusterTools.getClusterOperateRecord(clusterIdA);
Assert.assertTrue(XMJSONPath.getJSONArrayByReadPath(dataApi.getApi_response(), "$.result.records").toJavaList(JSONObject.class).stream().filter(e -> e.getString("operateType").equals("SEND_COUPON")).count() >= 1, "列表中没获到刚操作定向运营发优惠券生成的运营记录"); Assert.assertTrue(XMJSONPath.getJSONArrayByReadPath(dataApi.getApi_response(), "$.result.records").toJavaList(JSONObject.class).stream().filter(e -> e.getString("operateType").equals("SEND_COUPON")).count() >= 1, "列表中没获到刚操作定向运营发优惠券生成的运营记录");
String couponRecordId=XMJSONPath.getJSONArrayByReadPath(dataApi.getApi_response(), "$.result.records") String couponRecordId = XMJSONPath.getJSONArrayByReadPath(dataApi.getApi_response(), "$.result.records")
.toJavaList(JSONObject.class).stream() .toJavaList(JSONObject.class).stream()
.filter(e ->"SEND_COUPON".equals(e.getString("operateType"))) .filter(e -> "SEND_COUPON".equals(e.getString("operateType")))
.findFirst().map(e->e.getString("id")).orElse(null); .findFirst().map(e -> e.getString("id")).orElse(null);
//7.2.2.1 查看运营详情 //7.2.2.1 查看运营详情
memberClusterTools.fetchMemberClusterOperateRecordDetail(couponRecordId); memberClusterTools.fetchMemberClusterOperateRecordDetail(couponRecordId);
Assert.assertEquals(XMJSONPath.readPath(dataApi.getApi_response(),"$.result.operateType"),"SEND_COUPON","发送内容是优惠券,但是返回不对"); Assert.assertEquals(XMJSONPath.readPath(dataApi.getApi_response(), "$.result.operateType"), "SEND_COUPON", "发送内容是优惠券,但是返回不对");
Assert.assertEquals(XMJSONPath.readPath(dataApi.getApi_response(),"$.result.memberCount"),"1","发送会员数量是1,但是返回不对"); Assert.assertEquals(XMJSONPath.readPath(dataApi.getApi_response(), "$.result.memberCount"), "1", "发送会员数量是1,但是返回不对");
//7.2.2.2 check 运营详情-发送名单 //7.2.2.2 check 运营详情-发送名单
memberClusterTools.fetchListOfOperateMember(clusterIdA,couponRecordId); memberClusterTools.fetchListOfOperateMember(clusterIdA, couponRecordId);
Assert.assertTrue(XMJSONPath.getJSONArrayByReadPath(dataApi.getApi_response(),"$.result.records").size()==1,"发送名单数量不等于0"); Assert.assertTrue(XMJSONPath.getJSONArrayByReadPath(dataApi.getApi_response(), "$.result.records").size() == 1, "发送名单数量不等于0");
Assert.assertTrue(XMJSONPath.readPath(dataApi.getApi_response(),"$.result.records[0].id").equals(memberId),"会员ID对不上"); Assert.assertTrue(XMJSONPath.readPath(dataApi.getApi_response(), "$.result.records[0].id").equals(memberId), "会员ID对不上");
//7.2.3 check任务中心生成一条任务 //7.2.3 check任务中心生成一条任务
...@@ -207,8 +209,8 @@ public class TestCreateMemberCluster extends BaseTestImpl { ...@@ -207,8 +209,8 @@ public class TestCreateMemberCluster extends BaseTestImpl {
//7.2.3.1 check发送状态成功, 发送1个学员,1条成功,0条失败 //7.2.3.1 check发送状态成功, 发送1个学员,1条成功,0条失败
XMJSONPath.getJSONArrayByReadPath(dataApi.getApi_response(), "$.result.records").toJavaList(JSONObject.class).stream().filter(e -> XMJSONPath.getJSONArrayByReadPath(dataApi.getApi_response(), "$.result.records").toJavaList(JSONObject.class).stream().filter(e ->
e.getString("id").equals(taskIdA)).forEach(object -> e.getString("id").equals(taskIdA)).forEach(object ->
Assert.assertTrue("SUCCESS".equals(object.getString("state")) && 1==object.getInteger("totalNumber") && 0==object.getInteger("failNumber") && Assert.assertTrue("SUCCESS".equals(object.getString("state")) && 1 == object.getInteger("totalNumber") && 0 == object.getInteger("failNumber") &&
1==object.getInteger("successNumber"))); 1 == object.getInteger("successNumber")));
//学员详情,优惠券详情check 已发放的优惠券此处就不check了,因为优惠券那里相同的操作都check过了,那里不出问题,这里就OK //学员详情,优惠券详情check 已发放的优惠券此处就不check了,因为优惠券那里相同的操作都check过了,那里不出问题,这里就OK
...@@ -219,14 +221,13 @@ public class TestCreateMemberCluster extends BaseTestImpl { ...@@ -219,14 +221,13 @@ public class TestCreateMemberCluster extends BaseTestImpl {
//全局搜索该体验卡 //全局搜索该体验卡
String experienceCardName = "客户分群专用体验卡"; String experienceCardName = "客户分群专用体验卡";
cardTools.doMemberCardcommonSearch(experienceCardName, "EXPERIENCE_CARD"); cardTools.doMemberCardcommonSearch(experienceCardName, "EXPERIENCE_CARD");
String experienceCardId =""; String experienceCardId = "";
if (XMJSONPath.getJSONArrayByReadPath(dataApi.getApi_response(), "$.result").size() >= 1 && "YES".equals(XMJSONPath.readPath(dataApi.getApi_response(), "$.result[0].shelfState")) ) { if (XMJSONPath.getJSONArrayByReadPath(dataApi.getApi_response(), "$.result").size() >= 1 && "YES".equals(XMJSONPath.readPath(dataApi.getApi_response(), "$.result[0].shelfState"))) {
experienceCardId = XMJSONPath.readPath(dataApi.getApi_response(), "$.result[0].id"); experienceCardId = XMJSONPath.readPath(dataApi.getApi_response(), "$.result[0].id");
} } else {
else {
//创建新的用于营销活动的体验卡 //创建新的用于营销活动的体验卡
experienceCardId = tools.create("EXPERIENCE_CARD",experienceCardName,"全部","YES","课程次数",true).getString("result"); experienceCardId = tools.create("EXPERIENCE_CARD", experienceCardName, "全部", "YES", "课程次数", true).getString("result");
} }
...@@ -255,7 +256,6 @@ public class TestCreateMemberCluster extends BaseTestImpl { ...@@ -255,7 +256,6 @@ public class TestCreateMemberCluster extends BaseTestImpl {
} }
} }
@AfterTest(description = "删除此case创建的会员分群") @AfterTest(description = "删除此case创建的会员分群")
...@@ -273,7 +273,6 @@ public class TestCreateMemberCluster extends BaseTestImpl { ...@@ -273,7 +273,6 @@ public class TestCreateMemberCluster extends BaseTestImpl {
} }
} }
} }
......
package com.xiaomai.cases.polar.membercluster;
import com.alibaba.fastjson.JSONObject;
import com.xiaomai.basetest.BaseTestImpl;
import com.xiaomai.enums.ApiModule;
import com.xiaomai.enums.LoginAccount;
import com.xiaomai.enums.RequestType;
import com.xiaomai.enums.Terminal;
import com.xiaomai.utils.RandomStringUtil;
import com.xiaomai.utils.XMJSONPath;
import org.apache.commons.lang3.StringUtils;
import org.testng.Assert;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
/**
* 编辑会员分群
*
* @author adu
* data 2024/10/29 15:05
*/
public class TestEditMemberCluster extends BaseTestImpl {
@Resource(name = "memberClusterTools")
MemberClusterTools memberClusterTools;
String name = "";
String clusterId = "";
@BeforeClass
public void beforeTest() {
setTestInfo(ApiModule.Polar_Membercluster, "API_editMemberCluster", LoginAccount.ADU_PROD, Terminal.B, "adu");
super.beforeTest();
}
@Test(description = "测试编辑人群")
public void testEditMemberCluster() {
//1.创建人群
//1.1 人群名称验重
name = "用于自动化测试编辑会员分群动态数据";
memberClusterTools.memberClusterDuplicateCheck(name);
System.out.println(XMJSONPath.readPath(dataApi.getApi_response(), "$.message"));
if ("true".equals(XMJSONPath.readPath(dataApi.getApi_response(), "$.result"))) {//true 是有异常重名了,false 是无重名的
name = "自动化测试编辑人群信息" + RandomStringUtil.randomString(6);
} else {
Assert.assertTrue(Boolean.valueOf(XMJSONPath.readPath(dataApi.getApi_response(), "$.success")) == true && Boolean.valueOf(XMJSONPath.readPath(dataApi.getApi_response(), "$.result")) == false, "调用接口返回结果:" + XMJSONPath.readPath(dataApi.getApi_response(), "$.message"));
}
//1.2 创建人群
List<JSONObject> ruleList = new ArrayList<>();
JSONObject ruleTypeTag = new JSONObject();
List<String> tags = new ArrayList<>();
tags.add("1850100465387134978");
tags.add("1834827617041047554");
ruleTypeTag.put("ruleType", "TAG");
ruleTypeTag.put("tags", tags);
ruleList.add(ruleTypeTag);
JSONObject ruleTypeMember = new JSONObject();
ruleTypeMember.put("ruleType", "MEMBER_CARD_COURSE_LEFT_BALANCE");
ruleTypeMember.put("value", true);
ruleTypeMember.put("lowerLimit", "60");
ruleTypeMember.put("upperLimit", "62");
ruleTypeMember.put("tags", null);
ruleList.add(ruleTypeMember);
JSONObject ruleTypeDeposit = new JSONObject();
ruleTypeDeposit.put("ruleType", "DEPOSIT_CARD_LEFT_BALANCE");
ruleTypeDeposit.put("value", true);
ruleTypeDeposit.put("lowerLimit", "900");
ruleTypeDeposit.put("upperLimit", "999");
ruleTypeDeposit.put("tags", null);
ruleList.add(ruleTypeDeposit);
clusterId = memberClusterTools.createMemberCluster(name, "", "YES", ruleList);
//4.查看列表,check是否包含刚创建的人群
memberClusterTools.getMemberClusterList();
Assert.assertTrue(XMJSONPath.getJSONArrayByReadPath(dataApi.getApi_response(), "$.result")
.toJavaList(JSONObject.class).stream()
.filter(e -> e.getString("id")
.equals(clusterId)).count() == 1, "列表中没获取到刚创建的会员分群(满足所有条件)");
//2.编辑人群
JSONObject body = new JSONObject();
body.put("operatorId", xmAppApi.getLoginInfo().getAdminId());
body.put("studioId", xmAppApi.getLoginInfo().getStudioId());
body.put("brandId", xmAppApi.getLoginInfo().getBrandId());
String editName = name + "名字被编辑过了哈" + RandomStringUtil.randomString(3);
body.put("name", editName);
body.put("requireFullHit", "NO");
body.put("ruleList", ruleList);
String description = "自动化测试编辑人群信息,修改人群范围和人群定义";
body.put("description", description);
ruleList.remove(ruleTypeTag);
body.put("ruleList", ruleList);
body.put("id", clusterId);
xmAppApi.doRequest(RequestType.JSON, params, body.toString(), headers);
Assert.assertTrue(Boolean.valueOf(XMJSONPath.readPath(xmAppApi.getApi_response(), "$.success")) == true, "调用接口返回结果:" + XMJSONPath.readPath(xmAppApi.getApi_response(), "$.message"));
//2.1 check 编辑内容是否生效
memberClusterTools.getMemberClusterDetail(clusterId);
Assert.assertEquals(XMJSONPath.readPath(dataApi.getApi_response(), "$.result.requireFullHit"), "NO");
Assert.assertEquals(XMJSONPath.readPath(dataApi.getApi_response(), "$.result.name"), editName);
Assert.assertEquals(XMJSONPath.readPath(dataApi.getApi_response(), "$.result.description"), description);
Assert.assertEquals(XMJSONPath.readPath(dataApi.getApi_response(), "$.result.displayRuleList"), "会员卡课程剩余次数60~62次、储值卡剩余金额900~999元");
Assert.assertTrue(XMJSONPath.getJSONArrayByReadPath(dataApi.getApi_response(), "$.result.ruleList").size() == 2, "编辑后人群定义规则不是剩余2个,请检查");
//3.操作定向运营
memberClusterTools.batchMessagePushForMemberCluster(clusterId, "WECHAT_MEMBER_CARD");
Assert.assertTrue(Boolean.valueOf(XMJSONPath.readPath(dataApi.getApi_response(), "$.success")) == false, "调用接口返回结果:" + XMJSONPath.readPath(dataApi.getApi_response(), "$.message"));
Assert.assertTrue("分群数据尚未收集,请先更新分群数据后再操作".equals(XMJSONPath.readPath(dataApi.getApi_response(), "$.message")), "还没更新人数,人群数量为0,所以操作定向运营要拦截下,目前接口返回数据不是这个请检查");
}
@AfterTest(description = "删除此case创建的会员分群")
public void delData() {
if (!StringUtils.isEmpty(this.clusterId)) {
memberClusterTools.deleteMemberCluster(clusterId);
}
}
}
\ No newline at end of file
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