A/B testing (MVC)


List of examples:

A/B tests

Creating an A/B test




// Gets the page for which the A/B test will be created
TreeNode page = DocumentHelper.GetDocuments()
    .Path("/LandingPage")
    .OnSite("SiteCodeName")
    .Culture("en-us")
    .TopN(1)
    .FirstOrDefault();

if (page != null)
{
    // Gets an instance of the A/B test management service
    var abTestManager = Service.Resolve<IABTestManager>();

    // Creates a new A/B test for the page
    abTestManager.CreateABTest(page);

    // Creates the original page variant for the A/B test and an additional variant
    // (both have content identical to the original page)
    abTestManager.AddVariant(page, null);

    // Saves the new variant configuration into the page
    page.Update();
}


> Back to list of examples

Configuring conversions for an A/B test




// Gets the A/B test created for the "/LandingPage" page
ABTestInfo test = ABTestInfoProvider.GetABTests()
                            .WhereEquals("ABTestOriginalPage", "/LandingPage")
                            .OnSite("SiteCodeName")
                            .TopN(1)
                            .FirstOrDefault();

if (test != null)
{
    // Prepares a conversion definition of the 'Purchase' conversion type, using the default conversion Value
    var purchaseConversion = new ABTestConversion(ABTestConversionNames.PURCHASE);

    // Prepares a conversion definition of the 'Page visit' conversion type
    // Sets the conversion's Page URL to '/SpecialOffers' and the Value to 5
    var pageVisitConversion = new ABTestConversion(
                                    conversionName: ABTestConversionNames.PAGE_VISIT,
                                    relatedItemIdentifier: "/SpecialOffers",
                                    value: 5
                                );

    // Gets the A/B test's conversion configuration
    ABTestConversionConfiguration testConversionConfig = test.ABTestConversionConfiguration;

    // Adds the defined conversions to the configuration
    testConversionConfig.AddConversion(purchaseConversion);
    testConversionConfig.AddConversion(pageVisitConversion);

    // Saves the updated test
    ABTestInfoProvider.SetABTestInfo(test);
}


> Back to list of examples

Starting an A/B test




// Gets the A/B test created for the "/LandingPage" page
ABTestInfo test = ABTestInfoProvider.GetABTests()
                            .WhereEquals("ABTestOriginalPage", "/LandingPage")
                            .OnSite("SiteCodeName")
                            .TopN(1)
                            .FirstOrDefault();

// Checks that the test exists and is not already running
// Starts the test at the current time if it is scheduled to start in the future
if ((test?.ABTestOpenFrom == DateTime.MinValue) || (test?.ABTestOpenFrom > DateTime.Now))
{
    // Configures the test to start at the current time and end in a month
    test.ABTestOpenFrom = DateTime.Now;
    test.ABTestOpenTo = DateTime.Now.AddMonths(1);

    // Saves the test - the test automatically switches to the Running status when the start time is in the past
    ABTestInfoProvider.SetABTestInfo(test);
}


> Back to list of examples

Deleting an A/B test




// Gets the A/B test created for the "/LandingPage" page
ABTestInfo test = ABTestInfoProvider.GetABTests()
                            .WhereEquals("ABTestOriginalPage", "/LandingPage")
                            .OnSite("SiteCodeName")
                            .TopN(1)
                            .FirstOrDefault();

if (test != null)
{
    // Gets the A/B test's page
    TreeNode page = DocumentHelper.GetDocuments()
    .Path(test.ABTestOriginalPage)
    .OnSite(test.ABTestSiteID)
    .Culture(test.ABTestCulture)
    .TopN(1)
    .FirstOrDefault();

    if (page != null)
    {
        // Deletes the A/B test
        ABTestInfoProvider.DeleteABTestInfo(test);

        // Clears the A/B testing variant configuration of the related page
        page.SetValue("DocumentABTestConfiguration", null);
        page.Update();
    }
}


> Back to list of examples

A/B test page variants

Getting variants for a page




// Gets the A/B tested page
TreeNode page = DocumentHelper.GetDocuments()
    .Path("/LandingPage")
    .OnSite("SiteCodeName")
    .Culture("en-us")
    .TopN(1)
    .FirstOrDefault();

if (page != null)
{
    // Gets an instance of the A/B test management service
    var abTestManager = Service.Resolve<IABTestManager>();

    // Gets a collection of the page's A/B testing variants
    var variants = abTestManager.GetVariants(page);

    // Gets the variant named "Variant B"
    IABTestVariant variantB = variants.Where(x => x.Name == "Variant B").FirstOrDefault();
}


> Back to list of examples

Adding a variant




// Gets the page for which the A/B testing variant will be added
TreeNode page = DocumentHelper.GetDocuments()
    .Path("/LandingPage")
    .OnSite("SiteCodeName")
    .Culture("en-us")
    .TopN(1)
    .FirstOrDefault();

if (page != null)
{
    // Gets an instance of the A/B test management service
    var abTestManager = Service.Resolve<IABTestManager>();

    // Gets the page's first existing A/B test variant
    IABTestVariant existingVariant = abTestManager.GetVariants(page).FirstOrDefault();

    // Creates a new variant for the given page
    // The variant's content is copied from the existing variant and can later be adjusted in the Pages application
    // The name of the new variant is generated automatically
    abTestManager.AddVariant(page, existingVariant?.Guid);

    // Saves the new variant configuration into the page
    page.Update();
}


> Back to list of examples

Renaming a variant




// Gets the A/B tested page
TreeNode page = DocumentHelper.GetDocuments()
    .Path("/LandingPage")
    .OnSite("SiteCodeName")
    .Culture("en-us")
    .TopN(1)
    .FirstOrDefault();

if (page != null)
{
    // Gets an instance of the A/B test management service
    var abTestManager = Service.Resolve<IABTestManager>();

    // Gets the variant named "Variant B"
    IABTestVariant variantB = abTestManager.GetVariants(page).Where(x => x.Name == "Variant B").FirstOrDefault();

    if (variantB != null)
    {
        // Renames the variant to "Renamed variant"
        abTestManager.RenameVariant(page, variantB.Guid, "Renamed variant");

        // Saves the new variant configuration into the page
        page.Update();
    }
}


> Back to list of examples

Deleting a variant




// Gets the A/B tested page
TreeNode page = DocumentHelper.GetDocuments()
    .Path("/LandingPage")
    .OnSite("SiteCodeName")
    .Culture("en-us")
    .TopN(1)
    .FirstOrDefault();

if (page != null)
{
    // Gets an instance of the A/B test management service
    var abTestManager = Service.Resolve<IABTestManager>();

    // Gets the variant named "Variant B"
    IABTestVariant variantB = abTestManager.GetVariants(page).Where(x => x.Name == "Variant B").FirstOrDefault();

    if (variantB != null)
    {
        // Deletes the variant
        abTestManager.RemoveVariant(page, variantB.Guid);

        // Saves the new variant configuration into the page
        page.Update();
    }
}


> Back to list of examples

Selecting a variant as the A/B test winner




// Gets the A/B test created for the "/LandingPage" page
ABTestInfo test = ABTestInfoProvider.GetABTests()
                            .WhereEquals("ABTestOriginalPage", "/LandingPage")
                            .OnSite("SiteCodeName")
                            .TopN(1)
                            .FirstOrDefault();

if (test != null)
{
    // Gets the A/B tested page
    TreeNode page = DocumentHelper.GetDocuments()
        .Path(test.ABTestOriginalPage)
        .OnSite(test.ABTestSiteID)
        .Culture(test.ABTestCulture)
        .TopN(1)
        .FirstOrDefault();

    if (page != null)
    {
        // Gets an instance of the A/B test management service
        var abTestManager = Service.Resolve<IABTestManager>();

        // Gets the variant named "Variant C"
        var variant = abTestManager.GetVariants(page).Where(x => x.Name == "Variant C").FirstOrDefault(); ;

        // Checks whether the A/B test is finished
        // An error occurs if you attempt to select a winner for an unfinished test
        if (ABTestStatusEvaluator.ABTestIsFinished(test) && variant != null)
        {
            // Selects "Variant C" as the A/B test winner
            // Automatically updates the page's widget and page template configuration,
            // and clears the A/B testing variant configuration
            abTestManager.PromoteVariant(page, variant.Guid);

            // Saves the cleared A/B testing variant configuration into the page
            page.Update();
        }
    }
}


> Back to list of examples