Тестирование Rails A / B с разделением, несколько представлений используют один и тот же эксперимент (вспомогательный метод?)

#ruby-on-rails #split #ab-testing

#ruby-on-rails #разделение #ab-тестирование

Вопрос:

У меня есть несколько разных представлений, которые должны использовать один и тот же эксперимент (т.Е. Нижний колонтитул и часть заголовка должны показывать опцию ‘nav_a’ или ‘nav_b’).

Я надеялся, что простое использование одного и того же именованного эксперимента заставит это работать, но, похоже, это не так (т. Е. Иногда в заголовке есть «a», а в нижнем колонтитуле — «b», наоборот, или один и тот же a для обоих).

Как я мог бы наилучшим образом добиться этого?

В качестве дополнительного вопроса, часть моего «эксперимента» заключается в том, чтобы узнать, какой вид был более успешным при переходе пользователей по ссылке на видео; в моем приложении я сохраняю такие клики как модель «посещения»; может ли visit_controller знать, какой тест — a или b — выполнялсячтобы я мог сохранить его в своей модели посещения? Таким образом, я мог бы получить подсчет того, какая модель посещения имела «эксперимент 1 вариант a» против «эксперимент 2 вариант b» и т.д.

Я был бы доволен чем-то таким простым, как глобальная переменная, чтобы знать, что сохранять; не уверен, как таким образом инициировать ab_test в split.

Обновить:

Это пример кода текущих страниц:

/layout/header.html.erb со строкой типа:

 <%= ab_test('test_test', 'This is Header Test A', 'This is Header Test B') %>
  

И /layout/footer.html erb имеет

 <%= ab_test('test_test', 'This is Footer Test A', 'This is Footer Test B') %>
  

но они не всегда используют один и тот же параметр. Также не уверен, как наилучшим образом реализовать ‘helper_method’, как описано в документации здесь: https://github.com/andrew/split#views

ОБНОВЛЕНИЕ # 2

Я просто попытался изменить код в layouts/header.html.erb и layouts/footer.html.erb на это:

 <%= render partial: ab_test("test_test", "layouts/test_a", "layouts/test_b") %>
  

Когда я оставил оба этих других макета, используя ОДИН и ТОТ ЖЕ частичный (т.Е. _test_a.html.erb), они оба были синхронизированы и отображали то, что ожидалось.

Однако, когда я изменил layouts/ footer.html.erb для отображения этого частичного:

 <%= render partial: ab_test("test_test", "layouts/test_footer_a", "layouts/test_footer_b") %>
  

Они БОЛЬШЕ НЕ БЫЛИ СИНХРОНИЗИРОВАНЫ и случайным образом отображали другую часть — т. Е. Сначала A нижний колонтитул B, затем заголовок b и нижний колонтитул b, заголовок a нижний колонтитул b и т. Д. — Все в одном сеансе.

Комментарии:

1. разделение должно сохранять каждый эксперимент одинаковым на протяжении всего сеанса. Не уверен, почему вы видите то, что видите. Поместите код, который вы используете для выбора верхнего и нижнего колонтитулов, в вопрос.

2. Добавлено больше кода; предпринял попытку, как я думал, вспомогательного метода, как описано в документах, но не продвинулся дальше, чтобы выяснить это.

Ответ №1:

Я думаю, я понял, как лучше всего справиться с этим сам.

В ApplicationController создайте вспомогательный метод ie (сделал это простым для его тестирования):

 helper_method :home_display_test

def home_display_test
    @home_display =  ab_test("home_display_test", 'original', 'new')
    return @home_display
end
  

Тогда в моих представлениях я мог загружать разные части, такие как:

или

Я думаю, что это работает довольно надежно; Я мог бы даже запросить, какая тестовая версия находится в другом контроллере, чтобы сохранить данные в щелчке…

Комментарии:

1. Я беру свои слова обратно; Кажется, я каждый раз получаю «оригинал».

Ответ №2:

Один тест AB должен иметь один набор альтернатив, которые определены в файле конфигурации или при первом вызове ab_test()

попробуйте сделать так:

 <head>
  <%- if ab_test('layout_test', 'original', 'new') == 'origional' %>
    <title>Old Title</title>
  <%- else %>
    <title>New Title</title>
  <%- end %>
</head>
<body>
  <%- if ab_test('layout_test', 'original', 'new') == 'origional' %>
    <%= render partial: 'layout/original'%>
  <%- else %>
    <%= render partial: 'layout/new'%>
  <%- end %>
</body>
  

должно работать как шарм!