case class AbtestSpec(name: TestName, feature: FeatureName, author: String, start: OffsetDateTime, end: Option[OffsetDateTime], groups: List[Group], requiredTags: List[Tag] = Nil, alternativeIdName: Option[MetaFieldName] = None, userMetaCriteria: UserMetaCriteria = None, reshuffle: Boolean = false, segmentRanges: List[GroupRange] = Nil, specialization: Option[Specialization] = None, groupMetas: GroupMetas = Map()) extends Product with Serializable
Data used to create an A/B tests
- name
name of the test, it's more like a note/description. It is NOT an identifier.
- feature
feature name of the treatment. This is an identifier with which feature code can determine for each user which treatment they get.
- author
author name. Can be used for ownership
- start
scheduled start of the test
- end
scheduled end of the test, optional, if not given the test will last indefinitely
- groups
group definitions. group sizes don't have to add up to 1, but they cannot go beyond 1. If the sum group size is less than 1, it means that there is a portion (1 - the sum group size) of users won't be the in tests at all, you could make this group your control group.
- requiredTags
an array of string tags for eligibility control. Once set, only users having these tags (tags are passed in group assignment inquiry requests) are eligible for this test.
- alternativeIdName
by default Thomas uses the "userId" field passed in the group assignment inquiry request as the unique identification for segmenting users. In some A/B test cases, e.g. some features in the user registration process, a user Id might not be given yet. In such cases, you can choose to use any user meta field as the unique identification for users.
- userMetaCriteria
this is more advanced eligibility control. You can set a field and criterion pair to match user meta. Only users whose metadata field value matches the criterion are eligible for the experiment.
- reshuffle
by default Thomas will try to keep the user assignment consistent between different versions of experiments of a feature. Setting this field to true will redistribute users again among all groups.
- segmentRanges
his field is used for creating mutually exclusive tests. When Thomas segments users into different groups, it hashes the user Id to a number between 0 and 1. If an A/B test is set with a set of segment ranges, then only hashes within that range will be eligible for that test. Thus if two tests have non-overlapping segment ranges, they will be mutually exclusive, i.e. users who eligible for one will not be eligible for the other.
- Source
- package.scala
- Alphabetic
- By Inheritance
- AbtestSpec
- Serializable
- Serializable
- Product
- Equals
- AnyRef
- Any
- Hide All
- Show All
- Public
- All
Instance Constructors
-
new
AbtestSpec(name: TestName, feature: FeatureName, author: String, start: OffsetDateTime, end: Option[OffsetDateTime], groups: List[Group], requiredTags: List[Tag] = Nil, alternativeIdName: Option[MetaFieldName] = None, userMetaCriteria: UserMetaCriteria = None, reshuffle: Boolean = false, segmentRanges: List[GroupRange] = Nil, specialization: Option[Specialization] = None, groupMetas: GroupMetas = Map())
- name
name of the test, it's more like a note/description. It is NOT an identifier.
- feature
feature name of the treatment. This is an identifier with which feature code can determine for each user which treatment they get.
- author
author name. Can be used for ownership
- start
scheduled start of the test
- end
scheduled end of the test, optional, if not given the test will last indefinitely
- groups
group definitions. group sizes don't have to add up to 1, but they cannot go beyond 1. If the sum group size is less than 1, it means that there is a portion (1 - the sum group size) of users won't be the in tests at all, you could make this group your control group.
- requiredTags
an array of string tags for eligibility control. Once set, only users having these tags (tags are passed in group assignment inquiry requests) are eligible for this test.
- alternativeIdName
by default Thomas uses the "userId" field passed in the group assignment inquiry request as the unique identification for segmenting users. In some A/B test cases, e.g. some features in the user registration process, a user Id might not be given yet. In such cases, you can choose to use any user meta field as the unique identification for users.
- userMetaCriteria
this is more advanced eligibility control. You can set a field and criterion pair to match user meta. Only users whose metadata field value matches the criterion are eligible for the experiment.
- reshuffle
by default Thomas will try to keep the user assignment consistent between different versions of experiments of a feature. Setting this field to true will redistribute users again among all groups.
- segmentRanges
his field is used for creating mutually exclusive tests. When Thomas segments users into different groups, it hashes the user Id to a number between 0 and 1. If an A/B test is set with a set of segment ranges, then only hashes within that range will be eligible for that test. Thus if two tests have non-overlapping segment ranges, they will be mutually exclusive, i.e. users who eligible for one will not be eligible for the other.
Value Members
-
final
def
!=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
##(): Int
- Definition Classes
- AnyRef → Any
-
final
def
==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- val alternativeIdName: Option[MetaFieldName]
-
final
def
asInstanceOf[T0]: T0
- Definition Classes
- Any
- val author: String
-
def
clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( ... ) @native() @HotSpotIntrinsicCandidate()
- val end: Option[OffsetDateTime]
- val endI: Option[Instant]
-
final
def
eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- val feature: FeatureName
-
final
def
getClass(): Class[_]
- Definition Classes
- AnyRef → Any
- Annotations
- @native() @HotSpotIntrinsicCandidate()
- val groupMetas: GroupMetas
- val groups: List[Group]
-
final
def
isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- val name: TestName
-
final
def
ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
final
def
notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @HotSpotIntrinsicCandidate()
-
final
def
notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @HotSpotIntrinsicCandidate()
- val requiredTags: List[Tag]
- val reshuffle: Boolean
- val segmentRanges: List[GroupRange]
- val specialization: Option[Specialization]
- val start: OffsetDateTime
- val startI: Instant
-
final
def
synchronized[T0](arg0: ⇒ T0): T0
- Definition Classes
- AnyRef
- val userMetaCriteria: UserMetaCriteria
-
final
def
wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... ) @native()
-
final
def
wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )