船舶越快,风险越来越少。获得优化的推出,为开发人员提供免费功能标志。 建立免费账户

优化开发人员



优化,我们部署了大量的代码 特色标志 因为它为我们提供了缩短释放周期的好处,执行A / B斗地主在线玩,并且部署代码更改更安全 卷展栏。虽然功能标志(AKA功能切换)帮助我们推动了更快的产品更快地提供的产品,但它们往往很难编写自动化斗地主在线玩。本质上,功能标记会导致您的代码基础是非确定性的,这会在编写自动化斗地主在线玩时导致严重破坏。

我喜欢制作的类比是可以将自动化斗地主在线玩视为列车,并且代码可以被视为曲目。自动化斗地主在线玩令人惊讶地验证轨道是正确构建的,因为火车可以快速地运行轨道并通知您是否正确就位。但是,当对特征标志进行斗地主在线玩时,您的曲目可能会根据标志的逻辑而更改,并且您的列车可能会灭绝,因为它可能无法再上运行的轨道的一部分。这导致您的自动化斗地主在线玩变为片状并为您提供了很多误报信号。

由于轨道和火车或特征标志和自动化斗地主在线玩之间的这种紧张,我被不同的开发人员和客户提出了很多问题所在的问题:“你如何为特征标志创建自动化斗地主在线玩?”

在这里优化,我们的开发团队使用各种不同的策略来帮助我们的自动化框架确保它是斗地主在线玩的代码是确定性的。我们希望与您分享一些今天。

观众条件

优化完整的堆栈 允许您创建一个特定的受众条件,即斗地主在线玩运行队员在该斗地主在线玩中通过,确保斗地主在线玩跑者将始终在功能中铲除或从未在该功能中铲斗。

关于下面的示例的快速注意。在优化的情况下,自动化团队使用 Cypress.io. 运行我们的结束斗地主在线玩和回归自动化斗地主在线玩。这个具体的例子是用赛普拉斯编写的。我们真的很喜欢Cypress.io,因为它是快速且易于发展的,具有截图和录音,并提供强大的报告。您可以找到我们的简单示例应用程序和我们的赛普拉斯.IO自动化斗地主在线玩代码 这里.

在下面的示例应用程序中,我们在宇航员图像周围添加了一个优化的功能标志。当旗帜上时,我们将看到宇航员(功能上),并且当标志关闭时,我们不会(功能关闭)。

特色

关闭

 

 

 

 

 

 

 

 

我们希望Cypress.IO用于对两个条件(ove /标志OFF)断言,并验证图片是否正确显示或删除。

在你的 优化的功能标志,我们创建一个名为Cypress的受众状况。我们要触发此条件,因此我们为任何等于“ON”的字符串设置了匹配项。

观众条件

在Cypress.io斗地主在线玩赛道中,我们通过查询参数赛普拉斯= ON并验证新功能是否开启。

it('Validate that the astro_boy feature is enabled', function () {
// Visit app with audience query parameter
cy.visit('/?cypress=on')
// Validate feature is enabled
cy.get('#astronaut')
.should('exist')
})

这允许我们的Cypress.IO斗地主在线玩赛跑者确切地知道该斗地主在线玩和断言。

如下所示,Cypress.io斗地主在线玩赛跑者正在执行我们的应用程序中执行我们的实际斗地主在线玩用例,在打开和关闭功能之间切换,并置位/未显示图像。

Cypress.io.斗地主在线玩赛跑者

白名单功能

优化也可以让你的能力 白名单 你的斗地主在线玩跑步者 特征斗地主在线玩 (功能斗地主在线玩是您可以在特定功能标志上运行的实验)。在用户标识中传递斗地主在线玩跑步者将用于确保赛普拉斯队以确保赛普拉斯。始终查看您希望其攻击的变体。 笔记: 此功能仅适用于功能斗地主在线玩,而不是用于卷展栏。 您可以看到如何在下面的屏幕截图中优化。

功能推出白名单

设置强制变化

优化也利用硒斗地主在线玩在a上运行 BDD. 框架。对于这些斗地主在线玩,我们利用直接在SDK中设置强制变化的能力。以下示例是硒实施 迫使一个变异 然后验证该特征路径(笔记: 强制变化仅适用于功能斗地主在线玩,而不是功能卷展栏)。

下面我们有一个样本gherkin,我们希望我们的Selenium斗地主在线玩跑步者确保我们斗地主在线玩的变异始终是 create_flow. 变化(我们要斗地主在线玩的变化),而不是随机分配给任何其他变体。

Scenario: Create an AB Campaign with url targeting via simplified creation flow
    Given I open a browser as persona "V2User"
    Then I force bucket user "$acc_id" into "create_flow." of experiment "exp1"
    When I visit "/v2/projects"
    Then I should see "Experiments"

我们的实际Python代码调用SDK,在实验的键中传递,ID形成了斗地主在线玩转发器,以及我们想要斗地主在线玩的变更。

assert fullstack.set_forced_variation(
experiment_key, user_id, variation, datafile_key
), 'Failed to clear set_forced_variation'
# Double-check
assert fullstack.get_variation(experiment_key, user_id, datafile_key) is None, 'Failed to clear set forced variation'

这些只是我们的自动化团队在优化的策略方面,我们的功能斗地主在线玩和功能卷展栏以确保我们正在确定的新代码。

你有一个令人敬畏的策略吗?或者您对我们正在做的事情有任何疑问吗?我们很乐意从你那里听到更多!以quality@optimizely联系我们

如果您有兴趣入门功能标志管理和受控卷展栏,请查看我们的免费标记产品: 优化推出.

优化X.