使用属性执行功能测试

步骤摘要

  1. 为您的组织启用on-device decisioning
  2. 创建A/B Test活动
  3. 定义A和B
  4. 添加受众
  5. 设置流量分配
  6. 将流量分配设置为变量
  7. 设置报表
  8. 添加用于跟踪KPI的量度
  9. 实施代码以使用属性执行功能测试
  10. 实施代码以跟踪转化事件
  11. 使用属性激活功能测试
NOTE
假设您是一家零售电子商务公司。 当客户浏览您的产品目录并进行排序时,您希望提高转化率。 您有一个假设,即某些排序算法和分页策略产生比其他算法更好的结果。 为了测试此理论,您决定运行一个功能测试,该测试涉及使用最终用户不同的排序选项重新设计排序小组件。 您希望确保此功能测试在近乎零延迟的情况下执行,以便它不会对用户体验产生负面影响并扭曲结果。

1.为您的组织启用on-device decisioning

启用设备上决策可确保在几乎零延迟的情况下执行A/B活动。 要启用此功能,请在Adobe Target中导航到​ Administration > Implementation > Account details,并启用​ On-Device Decisioning ​切换开关。

替代图像

NOTE
您必须具有管理员或审批者用户角色才能启用或禁用​ On-Device Decisioning ​切换开关。

启用​ On-Device Decisioning ​切换后,Adobe Target开始为您的客户端生成​ 规则工件

2.创建A/B Test活动

  1. 在Adobe Target中,导航到​ Activities ​页面,然后选择​ Create Activity > A/B test

    替代图像

  2. 在​ Create A/B Test Activity ​模式中,保留默认的​ Web ​选项(1),选择​ Form ​作为体验编辑器(2),选择带有​ No Property Restrictions (3)的​ Default Workspace,然后单击​ Next (4)。

    替代图像

3.定义A和B

  1. 在活动创建​ Experiences ​步骤中,提供活动(1)的名称,然后单击​ Add Experience (2)按钮以添加第二个体验,即体验B。 输入应用程序内要使用属性执行功能测试的位置(3)的名称。 在以下示例中,product-results-page是为体验A定义的位置。(它也是为体验B定义的位置。)

    替代图像

    Experience A ​将包含指示您的业务逻辑执行以下操作的JSON:

    • 通过test_sorting功能标志启动排序算法功能
    • 执行sorting_algorithm _**_attribute中定义的推荐排序算法
    • 按照pagination_limit中定义的分页策略定义,每页返回50个产品
  2. 在体验A中,通过选择​ Create JSON Offer ​将内容从​ Default Content ​更改为JSON,如下所示(1)。

    替代图像

  3. 使用test_sortingsorting_algorithmpagination_limit标志和属性定义JSON,这些标志和属性将用于启动推荐的排序算法,分页限制为50个产品。

    note note
    NOTE
    当Adobe Target存储用户以查看体验A时,将返回具有示例中定义的属性的JSON。 在您的代码中,您需要检查功能标志test_sorting的值以查看是否应打开排序功能。 如果是这样,您将使用sorting_algorithm属性的推荐值在产品列表视图中显示推荐的产品。 为您的应用程序显示的产品限制将为50,因为这是pagination_limit属性的值。

    替代图像

    Experience B ​将定义指示您的业务逻辑执行以下操作的JSON:

    • 通过test_sorting功能标志启动排序算法功能
    • 执行sorting_algorithm _**_attribute中定义的best_sellers排序算法
    • 按照pagination_limit中定义的分页策略定义,每页返回50个产品
    note note
    NOTE
    当Adobe Target存储用户以查看体验B时,将返回具有示例中定义的属性的JSON。 在您的代码中,您需要检查功能标志test_sorting的值以查看是否应打开排序功能。 如果是这样,您将使用sorting_algorithm属性的best_sellers值在产品列表视图中显示最畅销的产品。 为您的应用程序显示的产品限制将为50,因为这是pagination_limit属性的值。

    替代图像

4.添加受众

在​ Targeting ​步骤中,保留​ All Visitors ​受众。 这使您能够了解排序功能的影响,以及哪个算法和项目数最能影响结果。

替代图像

5.设置流量分配

定义访客所占的百分比,您要根据此百分比来测试排序算法和分页策略。 换言之,您希望将此测试转出到用户中的哪个百分比? 在本例中,要将此测试部署到所有登录用户,请将流量分配保持在100%。

替代图像

6.将流量分配设置为变体

定义将看到推荐的与最畅销商品排序算法的访客百分比,每个页面最多可查看50个产品。 在此示例中,将流量分配保持为体验A和B之间的50/50比例。

替代图像

7.设置报表

在​ Goals & Settings ​步骤中,选择​ Adobe Target ​作为​ Reporting Source,以便在Adobe Target UI中查看A/B测试结果;或者选择​ Adobe Analytics,以便在Adobe Analytics UI中查看这些结果。

替代图像

8.添加用于跟踪KPI的量度

选择​ Goal Metric ​以使用属性测量功能测试。 在本例中,成功取决于用户是否购买产品,具体取决于显示它们的排序算法和分页策略。

9.在应用程序中实施具有属性的功能测试

Node.js
code language-js line-numbers
const TargetClient = require("@adobe/target-nodejs-sdk");
const options = {
  client: "testClient",
  organizationId: "ABCDEF012345677890ABCDEF0@AdobeOrg",
  decisioningMethod: "on-device",
  events: {
    clientReady: targetClientReady
  }
};
const targetClient = TargetClient.create(options);

function targetClientReady() {
  return targetClient.getAttributes(["product-results-page"]).then(function(attributes) {
    const test_sorting = attributes.getValue("product-results-page", "test-sorting");
    const sorting_algorithm = attributes.getValue("product-results-page", "sorting_algorithm");
    const pagination_limit = attributes.getValue("product-results-page", "pagination_limit");
  });
}
Java
code language-java line-numbers
import com.adobe.target.edge.client.ClientConfig;
import com.adobe.target.edge.client.TargetClient;
import com.adobe.target.delivery.v1.model.ChannelType;
import com.adobe.target.delivery.v1.model.Context;
import com.adobe.target.delivery.v1.model.ExecuteRequest;
import com.adobe.target.delivery.v1.model.MboxRequest;
import com.adobe.target.edge.client.entities.TargetDeliveryRequest;
import com.adobe.target.edge.client.model.TargetDeliveryResponse;

ClientConfig config = ClientConfig.builder()
    .client("testClient")
    .organizationId("ABCDEF012345677890ABCDEF0@AdobeOrg")
    .build();
TargetClient targetClient = TargetClient.create(config);
MboxRequest mbox = new MboxRequest().name("product-results-page").index(0);
TargetDeliveryRequest request = TargetDeliveryRequest.builder()
    .context(new Context().channel(ChannelType.WEB))
    .execute(new ExecuteRequest().mboxes(Arrays.asList(mbox)))
    .build();
Attributes attributes = targetClient.getAttributes(request, "product-results-page");
String testSorting = attributes.getString("product-results-page", "test-sorting");
String sortingAlgorithm = attributes.getString("product-results-page", "sorting_algorithm");
String paginationLimit = attributes.getString("product-results-page", "pagination_limit");

10.实施代码以跟踪转化事件

Node.js
code language-js line-numbers
//... Code removed for brevity

//When a conversion happens
TargetClient.sendNotifications({
    targetCookie,
    "request" : {
      "notifications" : [
        {
          type: "click",
          timestamp : Date.now(),
          id: "conversion",
          mbox : {
            name : "product-results-page"
          }
        }
      ]
    }
})
Java
code language-java line-numbers
ClientConfig config = ClientConfig.builder()
  .client("acmeclient")
  .organizationId("1234567890@AdobeOrg")
  .build();
TargetClient targetClient = TargetClient.create(config);

Context context = new Context().channel(ChannelType.WEB);

ExecuteRequest executeRequest = new ExecuteRequest();

NotificationDeliveryService notificationDeliveryService = new NotificationDeliveryService();

Notification notification = new Notification();
notification.setId("conversion");
notification.setImpressionId(UUID.randomUUID().toString());
notification.setType(MetricType.CLICK);
notification.setTimestamp(System.currentTimeMillis());
notification.setTokens(
    Collections.singletonList(
        "IbG2Jz2xmHaqX7Ml/YRxRGqipfsIHvVzTQxHolz2IpSCnQ9Y9OaLL2gsdrWQTvE54PwSz67rmXWmSnkXpSSS2Q=="));

TargetDeliveryRequest targetDeliveryRequest =
    TargetDeliveryRequest.builder()
        .context(context)
        .execute(executeRequest)
        .notifications(Collections.singletonList(notification))
        .build();

TargetDeliveryResponse offers = targetClient.getOffers(request);
notificationDeliveryService.sendNotification(request);

Attributes attributes = targetClient.getAttributes(request, "product-results-page");
String testSorting = attributes.getString("product-results-page", "test-sorting");
String sortingAlgorithm = attributes.getString("product-results-page", "sorting_algorithm");
String paginationLimit = attributes.getString("product-results-page", "pagination_limit");

11.使用属性激活功能测试

替代图像

recommendation-more-help
6906415f-169c-422b-89d3-7118e147c4e3