一次Testing in Production方案的探索

引子

傳統(tǒng)的軟件測試大多是在測試環(huán)境下進行的。人們普遍認為生產(chǎn)環(huán)境是服務于最終用戶的,只有在測試環(huán)境下進行充分測試后才會發(fā)布給用戶。

基于非生產(chǎn)環(huán)境的測試-單元測試路操、集成測試、功能測試等千贯,很多都是基于預期結果的測試屯仗,測試人員一般是帶著這樣的思路來工作 “如果這樣做會發(fā)生什么呢” -屬于known-unknowns。而生產(chǎn)環(huán)境往往充滿了驚喜-屬于unknown-unknowns搔谴。我們不知道最終用戶怎么操作(參考同事姚琪琳的文章《被踢出去的用戶》)魁袜,數(shù)據(jù)是什么樣的,基礎設施有什么差異等敦第。

Stage作為類生產(chǎn)環(huán)境峰弹,是和生產(chǎn)環(huán)境最接近的一個測試環(huán)境。然而每一次新的發(fā)布都是一組代碼和環(huán)境的組合芜果,只有真正部署到了對應的環(huán)境鞠呈,我們才能確定到底有沒有問題。Stage環(huán)境也是測試環(huán)境右钾,是抱著一定目的進行的操作蚁吝,并不能完全反應真實用戶的行為。

項目背景

我們當前的測試流程如下:

產(chǎn)品經(jīng)受了多個測試環(huán)境的考驗舀射,但是在部署生產(chǎn)環(huán)境后依然暴露出很多意想不到的問題窘茁,初步分析后歸結為下面兩個因素:

1. 生產(chǎn)環(huán)境下數(shù)據(jù)復雜多樣

我們對客戶報過來的production問題進行了分析,下圖可以看出由于數(shù)據(jù)問題導致的功能/性能問題在10%左右的區(qū)間波動脆烟。

軟件系統(tǒng)的靈活性給與了用戶各種各樣的操作可能山林,代碼/腳本的不確定性也會造成數(shù)據(jù)的不一致。這些都賦予了生產(chǎn)環(huán)境下數(shù)據(jù)的多樣性邢羔,是其他環(huán)境無法模擬的驼抹。

2. 軟件配置的集中化

ThoughtWorks團隊主要負責軟件的開發(fā)桑孩,而Stage和Prod環(huán)境部署在云平臺上,這些訪問權限嚴格控制在客戶手中砂蔽,基礎設施嚴重依賴于客戶洼怔。

項目即將大規(guī)模將配置由原來的SVN遷移到ZooKeeper實現(xiàn)集中管理。作為一個技術的改進左驾,同時也蘊含著風險 - Stage和Prod的配置將由客戶進行單點手工維護,對ThoughtWorks團隊不可見极谊,因此我們無法預知某個配置是否已經(jīng)被添加/修改以及是否賦予了正確的值诡右。

Testing in Production如何做

環(huán)境的特殊性帶來了產(chǎn)品的不確定性,我們希望把測試的觸角向前延伸轻猖,到生產(chǎn)環(huán)境去做測試帆吻,提前暴露產(chǎn)品的潛在問題,提高用戶的滿意度咙边。

由于各種因素的約束猜煮,在生產(chǎn)環(huán)境能做的事情往往有限。比如我們項目的安全等級很高败许,開發(fā)團隊是不能夠訪問生產(chǎn)環(huán)境的服務器的王带,甚至連脫敏的數(shù)據(jù)也接觸不到。Stage環(huán)境下的數(shù)據(jù)也僅僅是客戶的測試數(shù)據(jù)市殷,不能把生產(chǎn)環(huán)境下的數(shù)據(jù)遷移過來愕撰。

業(yè)界實踐

TiP并不是一個全新的事物,業(yè)界已經(jīng)有了很多成熟實踐:藍綠部署醋寝、金絲雀測試搞挣、A/B測試等。

藍綠部署是在有兩個一樣環(huán)境的前提下音羞,不停老版本囱桨,部署新版本進行測試。測試沒問題之后直接把流量切到新版本上嗅绰,再把老版本也升級到新版本舍肠。一般適用于對用戶體驗有一定的忍耐度、機器資源豐富的團隊办陷。

“金絲雀測試”得名于以前曠工下井前會先放一只金絲雀去看是否有有毒氣體貌夕,以金絲雀能否存活進行判斷唇跨。一般是部署新版本到很小比例的服務器上寸五,并允許小部分用戶來使用新版本,測試通過則把剩余的服務都升級為新版本霍衫。一般適用于對新版本缺乏信心的團隊制圈。

A/B測試主要用于產(chǎn)品功能對比们童,版本A和版本B分別部署在不同的服務器上并開放給不同的用戶使用畔况,一般適用于收集用戶反饋輔助產(chǎn)品功能設計。

藍綠部署

基于當前產(chǎn)品環(huán)境的復雜架構慧库,構建另一套相同的生產(chǎn)環(huán)境來實現(xiàn)藍綠部署作為第一方案被提出來跷跪。藍綠部署的思路如圖:

在同一個時間段,藍作為當前的生產(chǎn)環(huán)境供線上用戶使用齐板,綠作為部署新功能的測試環(huán)境供部分用戶使用吵瞻。兩個環(huán)境的基礎設施相同,配置一樣甘磨,數(shù)據(jù)都是真實的生產(chǎn)環(huán)境數(shù)據(jù)橡羞。綠環(huán)境下發(fā)現(xiàn)的問題可以隨時診斷修復,確認滿足上線需求后即可把線上用戶引流到綠環(huán)境济舆,實現(xiàn)了最小化的宕機時間卿泽。

藍綠部署的這個優(yōu)勢看似極好的契合了項目當前的訴求,但是準備一套同樣的生產(chǎn)環(huán)境需要的成本在可視化出來之后也是令人震驚的滋觉!新的服務器就需要7臺签夭,而且每個月還需要預留出足夠的時間來同步數(shù)據(jù)。在功能交付的壓力之下椎侠,客戶是不會為這樣一個昂貴且成果未知的方案買單的第租,我們連自己都說服不了。

改進的方案

就在焦灼的時候肺蔚,在一次頭腦風暴中我們獲取到一條線索-客戶的災備環(huán)境(Disaster Recovery)在定期從生產(chǎn)環(huán)境同步數(shù)據(jù)煌妈,但也僅僅是同步數(shù)據(jù),代碼已經(jīng)很久沒有部署過宣羊。也就是說災備環(huán)境沒有真正起到它應有的災難備份和恢復璧诵,只是一個數(shù)據(jù)的備份而已。

方案就此而得到轉(zhuǎn)機 - 是否可以復活災備環(huán)境仇冯,利用它可以訪問生產(chǎn)環(huán)境數(shù)據(jù)的天然優(yōu)勢來解決前面的痛點呢之宿?在藍綠部署方案的基礎上,改進的方案如下:

鑒于災備環(huán)境的基礎設施不足以支撐其作為線上環(huán)境供所有用戶使用苛坚,但是它的配置是等同于產(chǎn)品環(huán)境的比被。DR的定位為分時的災備和測試環(huán)境 - 大部分時間用于災備,小部分時間作為金絲雀進行新版本的測試泼舱。

災備環(huán)境測試通過后的版本按照當前的部署流程進行生產(chǎn)環(huán)境的部署等缀。這樣一來不僅能恢復其本來的災備作用,也解決了之前數(shù)據(jù)和配置集中化問題帶來的痛點娇昙。

展望

從當前的測試流程來看尺迂,QA和Stage環(huán)境承擔的工作有很大一部分重疊,帶來了一定的浪費。希望未來有一天能去掉Stage環(huán)境噪裕,直接把這些server用在生產(chǎn)環(huán)境下構建一套新的環(huán)境蹲盘,做到充分的基于生產(chǎn)環(huán)境的測試,實現(xiàn)新老版本的無縫切換膳音。 期待測試流程會變成如下所示:

當今軟件的部署越來越多的基于第三方的云平臺召衔,給團隊帶來了不可控因素。Testing in Production是基于生產(chǎn)環(huán)境下真實用戶的行為和數(shù)據(jù)進行的一系列QA活動祭陷。傳統(tǒng)的基于測試環(huán)境進行的測試活動苍凛,輔助以生產(chǎn)環(huán)境下的QA活動為提高軟件的質(zhì)量注入了新的活力。


文/ThoughtWorks胡志芳

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末颗胡,一起剝皮案震驚了整個濱河市毫深,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌毒姨,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件钉寝,死亡現(xiàn)場離奇詭異弧呐,居然都是意外死亡,警方通過查閱死者的電腦和手機嵌纲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進店門俘枫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人逮走,你說我怎么就攤上這事鸠蚪。” “怎么了师溅?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵茅信,是天一觀的道長。 經(jīng)常有香客問我墓臭,道長蘸鲸,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任窿锉,我火速辦了婚禮酌摇,結果婚禮上,老公的妹妹穿的比我還像新娘嗡载。我一直安慰自己窑多,他們只是感情好,可當我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布洼滚。 她就那樣靜靜地躺著埂息,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上耿芹,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天崭篡,我揣著相機與錄音,去河邊找鬼吧秕。 笑死琉闪,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的砸彬。 我是一名探鬼主播颠毙,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼砂碉!你這毒婦竟也來了蛀蜜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤增蹭,失蹤者是張志新(化名)和其女友劉穎滴某,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體滋迈,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡霎奢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了饼灿。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片幕侠。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖碍彭,靈堂內(nèi)的尸體忽然破棺而出晤硕,到底是詐尸還是另有隱情,我是刑警寧澤庇忌,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布舞箍,位于F島的核電站,受9級特大地震影響漆枚,放射性物質(zhì)發(fā)生泄漏创译。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一墙基、第九天 我趴在偏房一處隱蔽的房頂上張望软族。 院中可真熱鬧,春花似錦残制、人聲如沸立砸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽颗祝。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間螺戳,已是汗流浹背搁宾。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留倔幼,地道東北人盖腿。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像损同,于是被迫代替她去往敵國和親翩腐。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內(nèi)容