攜程酒店 Devops 測試實踐

2021-02-13 iTesting

王幸福,攜程酒店研發部高級測試經理,負責無線自動化測試相關工作。在測試框架和平臺研發、移動測試、DevOps等領域有著豐富的經驗。

如今很多大型網際網路公司、創新型企業都在積極地進行DevOps實踐和落地。為什麼DevOps如此受青睞? 我們該如何實施DevOps?DevOps中Dev代表開發,Ops代表運維,那麼在這個嶄新的流程體系中,QA又該如何找到自己的位置?帶著這些疑問和困惑,我們希望在本文中都能進行探索和解答。


  

以往在軟體開發的世界裡,以月甚至以年為周期進行發布是一種常態。但隨著近些年由雲、移動網際網路、AI、社交技術以及區域鏈等技術推動的業務變革呈現爆炸式的發展。在這種大背景下,即使是大型的網際網路公司也隨時面臨著業務上被淘汰的危險,持續的業務創新,快速的上線,卓越的用戶體驗以及快速的獲得反饋才是企業制勝的法寶。

  

業務在高速變革,那麼技術怎麼樣呢?技術的變革比之業務,有過之而無不及。應用架構從以往的服務集中到如今盛行的微服務,IT架構從物理機、虛擬機到如今的容器化、雲服務,開發技術棧無論是前端還是後端也都呈現百花齊放的姿態。

   

無論是業務變革還是技術變革,最終都會對企業的開發流程造成影響,並進而推動其進行變革。從早期的瀑布式開發,到敏捷開發,再到如今的DevOps,其產生的背景無一不都有著業務和技術變革的影子。

為什麼當前我們需要DevOps,甚至很多大型的網際網路公司也在進行DevOps轉型,其中最關鍵是因為其核心思想能夠滿足當前業務和技術變革的需要,那就是「快速的交付價值,靈活的響應變化」。「快速的交付價值」意味著能先人一步佔領市場,「靈活的響應變化」亦意味著減少變化帶來的不利因素,使企業立於不敗之地。

業務和技術變革推動流程變革


  

攜程在很久以前就已經開始進行持續交付的建設,應用部署全部實現了容器化, 並實現了一套自動化程度較高的持續集成發布系統-Ctrip CD(後面簡稱CD),CD發布流程如下圖所示:

攜程發布流程圖

  

開發人員在功能開發完成並提交代碼後, 可以自己操作或通知測試進行環境部署。進行環境部署的人員可以在CD中創建發布版本,然後由CD自動進行代碼編譯,代碼掃描,安全掃描,測試環境部署等操作。測試人員完成測試後進行測試結果的反饋。如果測試通過繼續通過CD進行UAT環境的部署,進行驗證測試。測試通過後,發布生產環境。

從上面流程圖可以看出,整個發布過程自動化程度還是較高的,相關人員只要在CD中操作新建版本,關注發布狀態就可以了。但我們仔細分析這個過程還是能發現不少問題:

1)持續集成的反饋鏈路過長。我們往往希望在開發人員每次提交代碼時就進行代碼編譯,代碼掃描,單元測試等過程,而不是在功能開發完成後進行。

2)人工介入依然過多。雖然在CD中可以完成大部分的編譯,發布,部署等繁複且人工易出錯的工作,但是否可以省略人工創建版本,測試環境手動測試,進而每次提交代碼都觸發一系列的操作,發布到UAT環境,甚至是生產環境(對於業務簡單,單元測試和接口測試的應用)。

3)CD發布系統解決了編譯,部署,環境治理等大部分OPS相關的工作,但卻沒有考慮到如何把開發,測試以及發布後的監控等活動整合起來。

上面提到的這些問題,也是攜程希望引入Auto DevOps的原因之一。DevOps所提倡的「持續集成,持續測試,持續交付,持續部署」可以很好地解決這些問題,使整個研發效率提升。


  

攜程DevOps是基於GitLab CI/CD為主幹實現的,並針對攜程內部的情況進行了二次開發,實現auto devops的能力。本文關注的重點是在DevOps過程中的測試實踐,所以在此就不贅述攜程DevOps的實現細節,僅列出攜程DevOps的主幹流程。

 

攜程DevOps流程及測試流程圖

  

DevOps雖然從字面意義上看更著重於開發與運維的融合,但事實上卻並非如此。DevOps可以看成是開發、運維和QA三者的交集,所以DevOps實施成功的關鍵在於各個階段都不能有短板。DevOps通過自動化來實現「持續交付」的流程,那麼自動化的手段中自然也包括測試的自動化。其倡導的「持續測試」也需要我們儘可能多的使用自動化手段來快速的發現和反饋問題,從而保障交付產品的質量。

我認為「持續測試」並不僅僅是頻度上的持續,還包括開發過程上的持續。我們希望在開發過程的各個階段都可以有測試的介入,「測試左移」和「測試右移」的思想也由此而來。那麼在攜程DevOps流程中,我們根據自身的情況分三個階段來進行測試的介入。

第一階段開發提交代碼時,觸發靜態掃描(Sonar,Infer,代碼風險掃描等),安全掃描,單元測試。如果這些測試不通過,將通知開發進行修復。

 

第二階段開發提交代碼後,經過編譯並部署到測試環境時,觸發接口測試、熔斷測試、比對測試、性能測試等。

 

第三階段測試環境測試通過後,發布到生產的鏡像環境,在此環境進行流量回放測試,並進行發布前的驗證確認工作,驗證通過後可以進行生產發布。同時進行生產環境各項指標的監控工作。

在整個過程中, 我們也會收集DevOps指標數據,日誌,性能,測試數據,進行測試分析,通過算法進行風險評估,從而為提高測試決策質量,效率提升提供依據。

俗話說「無規矩不成方圓」, 流程的制定只是搭了個架子。在這個架子下,我們還需要制定一系列流程標準來充實它,這也是相對比較困難的部分。因為制定的這些標準需要取得整個部門甚至整個公司的認可,並作為規範來嚴格的執行,這勢必對現有的流程和規範造成很大的影響,推廣難度還是比較大的。所以如有必要,甚至可以成立質量委員會來統一制定這些標準,並密切監控實施的過程,遇到問題和困難可以一起想辦法解決。

那麼通常的標準有哪些呢?歸納下來,這些標準包括:

提測標準:靜態掃描結果,單元測試通過率,覆蓋率,接口測試結果…

測試規範:探索測試,用例執行,接口測試分析,性能測試…

發布規範:風險分析,發布檢查項…

監控規範:業務,性能,日誌數據收集,預警的條件….



有了流程和標準,我們就夯實了實施DevOps的基礎。接下來需要一個平臺來實踐這些流程和標準,可以選擇Gitlab CI/CD,也可以選擇Jenkins,亦或者Gitlab與Jenkins結合。我們選擇了自建平臺,理由如下:

1)無論是Gitlab還是Jenkins都需要進行較複雜的配置文件設置,對於開發和測試人員都有一定的學習成本,所以我們希望通過可視化配置的方式來簡化配置過程,這樣既能提高配置的效率,也能減少推廣的難度。

2)攜程酒店測試使用的工具和平臺很多都是內部研發的,市面上的DevOps平臺整合這些工具和平臺並沒有現成的方案可用。

3)我們希望DevOps測試過程並不僅僅是給測試看的,我們希望開發,測試,產品都可以從這個平臺中看到自己需要的東西。

4)DevOps最理想的狀態是可以直接自動發布到生產。可目前現實的情況卻很少有應用可以做到,那麼我們希望提供儘可能多的評估和反饋數據來縮短發布確認的過程。

Moss平臺


在實施DevOps過程中會涉及到很多的工具,我們把這些工具形象的稱為工具鏈,而合理的整合工具鏈中的工具也是DevOps是否成功的關鍵因素之一。在測試各個階段常用的測試手段通常包括靜態代碼掃描,單元測試,接口測試,UI自動化測試,流量回放等等。而這些測試手段在業界都有比較成熟的開源框架,比如SonarQube、Junit、Selenim、Appnium…. . 攜程酒店測試根據自身情況,結合這些開源框架開發了一系列的平臺和工具。

攜程酒店DevOps測試工具鏈

靜態掃描作為一種近乎零成本的測試手段,可以在早期發現代碼中存在的代碼缺陷,安全漏洞等問題。在靜態掃描領域,SonarQube已經深耕多年,在這方面已經近乎成為標配。攜程通過對原有SonarQube代碼規範庫中的規範進行篩選和擴展,形成了自己代碼規範庫。我們還有基於開源框架開發的安全掃描工具Cobra和Buffalo。在我們的DevOps流程中,開發人員在提交代碼後就會觸發Sonar,Infer,Cobra,Buffalo等一系列的靜態掃描手段進行代碼檢測。

  

單元測試隨著敏捷開發的盛行而引起了大家的重視,雖然目前在國內對單元測試的重視程度依然欠缺,但從眾多大型的開源項目可以看出單元測試確實在軟體的開發質量保障方面有著積極的作用。我們為了整合單元測試的編寫,執行和結果而開發了UTP單元測試平臺。該平臺由Junit擴展庫UtpJunit,IDEA插件UtpGenerator以及Utp站點組成。該平臺實現了BDD驅動,代碼分析,在線WebIDE,單元測試執行,覆蓋率統計,報告展示,持續集成等功能。

  

集成測試階段主要進行接口測試,資料庫測試,Job測試等等。無論是RPC,SOA還是目前流行的微服務,都是在強調對外提供服務的能力。而這種能力主要通過提供對外接口來實現,這也決定了接口測試的重要性。我們為此構建了CAS平臺,CAS平臺是一個同時支持有碼和無碼接口自動化測試的平臺。

CAS自動化測試平臺

測試過程中一個比較難以解決的困難是測試數據問題。為了保障接口測試和UI自動化測試數據的可用性,我們開發了MOCK系統,用於測試人員配置和管理測試數據。

  

系統測試階段是測試人員介入比較多的階段,也是測試人員比較熱衷做自動化測試的階段。因此這個階段的自動化測試框架也比較的多。常用的Web自動化框架有Selenim,Jest,Jasmine…,常用的APP自動化測試框架有Appnium,Airtest,Clabash,UIAutomator…. 而這些自動化測試框架是百花齊放,各有所長,要根據自身團隊的實際情況慎重選擇適合自己的框架。

在Web自動化測試方面,我們選擇了Selenium框架作為基礎進行二次開發,而在APP自動化測試方面,我們構建了自己內部的測試雲平臺- ATL(APP Test Lab),該平臺支持設備管理,也同時支持Appnium和Airtest的用例管理,執行和報告查看。

ATL自動化測試平臺

  

線上監控作為」測試右移」的重要手段之一,正越來越引起很多公司的重視。通常在伺服器,網絡,框架,性能等方面,OPS會有眾多的監控和預警機制。但在業務,功能等一些特定指標上卻無法兼顧到,那麼我們就需要自己去監控和預警,這些監控大致可以分為資料庫數據監控,埋點監控,接口監控,UI監控等。

攜程酒店測試監控平臺

  

除了以上的工具和平臺,我們還有一些經常使用的工具和平臺,限於篇幅,不在這裡一一介紹。而這麼多的工具和平臺,以往都是測試人員在各個平臺切換使用,容易混亂,效率也低,工具之間無法產生化學反應。我們需要通過DevOps把這些工具整合起來,形成工具鏈,這也就是我們經常提到的pipeline.

Moss平臺的pipeline整合了眾多的工具和平臺

 

DevOps的精益思想需要數據支持來減少不必要的浪費,DevOps是否成功得到實施需要數據來反饋各項指標數據,公司的領導需要知道當前團隊代碼問題,覆蓋率情況,Bug等數據… 等等這些都需要數據。

這些數據來源在哪裡? 自然來自DevOps所整合的各個平臺和工具。所以我們需要一個DevOps數據中心來收集和分析這些數據,並把數據以可視化的方式展示給相關的人員,讓相關人員可以看到自己需要的數據。

 

  DevOps數據中心架構示意圖

  

Moss平臺的DevOps數據中心通過收集器從各個工具鏈平臺中拉取數據存放到MongoDB中。Neo4j是一款NOSQL圖形資料庫,用於存放人與人,人與應用,應用與應用之前的關係和數據,為以後聚合團隊數據,數據關聯提供支持。

  

同時DevOps數據中心還提供了可視化數據編輯功能,可以讓用戶以可視化配置的方式來配置數據的可視化看板。而且秉承著一切數據都是可以被搜索的理念, 我們提供一個搜尋引擎讓用戶搜索到自己想要的數據,並以可視化的形式展示出來。

  

應用看板,技術價值流看板



測試在歷經了瀑布式開發,敏捷開發階段後,其測試體系的基礎並沒有受到太多的衝擊和改變,但在「來勢洶洶」的DevOps浪潮中, 我認為測試的根基已經受到了一定的動搖,過去那種固有的測試思維已經難以適應當下測試的需要。作為測試人,如果不想被時代淘汰,就需要主動去適應這種轉變,去積極挖掘測試在DevOps體系中的價值。

在實施DevOps的過程中,我們也遇到了很多的困難和挑戰,同時也收穫了很多的經驗和教訓。總結下來主要有這麼幾點:

高度自動化,儘可能減少人為幹預

需要快速且準確的反饋問題

要制定DevOps流程中可行的規範

關注DevOps指標,優化流程和提高效率

目前, 我們實施的DevOps還處於初期階段,很多方面尚未完全達到預期。在不久的將來我們還有很多的工作需要去做:

註:微信公眾號後臺回復「devops」,可下載講師分享PPT。

相關焦點

  • DevOps教程:什麼是DevOps
    【注】本文譯自: https://www.javatpoint.com/devopsDevOps 是兩個單詞的複合,一個是 Development,另一個是 Operations。它是一種共同提升開發和運維過程的文化。
  • DevOps教程:DevOps 架構
    【注】本文譯自:https://www.javatpoint.com/devops-architecture 部署包括需求分析,設計,開發以及軟體組件或框架的測試。 運營包括軟體的管理流程,服務和支持。當開發和運營結合在一起進行協作時,DevOps 架構就是解決部署和運營術語之間差距的解決方案。因此,交付可以更快。 DevOps 架構用於託管在雲平臺上的應用和大型分布式應用。
  • Gdevops北京站:網際網路、金融與運營商的智慧運維、資料庫、Fintech...
    依託迄今成功舉辦的17場大會在分享議題上的精心打磨、在技術圈子裡的口碑傳播,Gdevops在展開新一年技術巡演中邀請到更頂級的嘉賓陣容,將帶來更重磅的科技成果與獨家實踐。2020 Gdevops北京站時間:2020年5月29日地點:北京新世紀日航飯店(北京市海澱區首都體育館南路6號)指導單位:上海市經濟和信息化委員會主辦單位:上海市雲計算產業促進中心、dbaplus社群2020 Gdevops
  • DevSecOps在攜程的最佳實踐
    一、DevSecOps面臨的挑戰作為業務覆蓋機票、酒店、度假、汽車票、火車票、支付等各個方面,為全球用戶提供服務的在線旅遊網站,攜程每周都會有數以萬計的應用發布次數,如何保證每一次發布代碼的安全性成為了DevSecOps實踐中最大的挑戰。
  • 乾貨 | DevSecOps在攜程的最佳實踐
    作者簡介 Living,攜程高級基礎安全工程師,關注應用安全、滲透測試方面的技術。​一、DevSecOps面臨的挑戰作為業務覆蓋機票、酒店、度假、汽車票、火車票、支付等各個方面,為全球用戶提供服務的在線旅遊網站,攜程每周都會有數以萬計的應用發布次數,如何保證每一次發布代碼的安全性成為了DevSecOps實踐中最大的挑戰。
  • 從地中海旅遊看攜程全球化發展實踐
    攜程集團副總裁李欣玉在演講中分享了攜程集團的全球化發展實踐,以下為部分節選。在度假勝地摩洛哥,26歲的馬魯萬(Marouane)有一份工資較高的工作,他在攜程做了數年的當地嚮導,擁有精準、穩定的中國客源。
  • 9000億投資浪費在數位化轉型,罪魁禍首在DevOps?
    這麼做的原因是讓開發和測試人員明確在代碼開發之前新增加的測試用例是失敗的,從而避免測試用例的錯誤而造成測試用例錯誤通過的問題。開發人員根據測試來進行功能開發,直到所有測試用例通過。當測試用例通過之後,開發人員進行代碼的重構來進行代碼優化,以實現安全性和性能的要求。在籤入代碼到主幹的時候,如果發現自動化回歸測試失敗,測試人員需要更新自動化回歸測試確保回歸測試是最新狀態。
  • 今夜酒店特價與攜程的江湖恩怨
    然後攜程就冒了出來。國慶前,攜程開始專門監控「今夜酒店特價」,發現有酒店參加,則一家家電話酒店,要挾說要取消酒店在攜程的金牌認證之類,收效不大,我們也沒有受到明顯影響。國慶時,攜程開始加大打壓力度,開始威脅少量酒店要將他們從攜程下架消失,這時部分酒店開始停止和「今夜酒店特價」合作。
  • ...赴美上市;Lyft獲加州無人車測試許可證;攜程涉足城市觀光巴士業務
    格林豪泰酒店管理集團2004年創立,是一家專業化酒店管理集團,旗下擁有格林東方酒店、格林豪泰酒店、格林聯盟酒店、青皮樹酒店4個品牌及多個子品牌,2600多家酒店,覆蓋國內外400多個城市。今年4月8日,格林豪泰與境外私募基金聯合注資1.5億入股逸柏酒店集團,據悉,該次戰略合作成為酒店集團之間戰略聯盟的新模式。
  • 攜程訂酒店靠譜嗎攜程酒店要怎麼預訂才算成功
    每次出遠門玩,大部分人都是會選擇到網上訂好酒店的,而攜程作為一個比較知名的大型平臺,自然就會吸引用戶關注。不過,在用戶初次使用時,總會存在著「攜程訂酒店靠譜嗎」這樣的疑問,萬一訂完酒店卻住不了,那真的是很掃興的事情了。那麼,攜程訂酒店靠譜嗎?在攜程上訂酒店怎樣才能確定成功預訂了呢?
  • 酒店OTA 運營——攜程流量提升(源自攜程酒店大學)
    1、周邊遊流量攜程於今年4月推出周邊遊活動,過去酒店獲得曝光,都是在周邊遊首頁宮格,列表頁快篩+標籤強勢引流。流量入口周邊遊活動的流量入口,主要有2個:一是攜程APP首頁周邊遊頻道,報名該活動的酒店會進入該頻道展示;二是微信→支付→酒店,參與活動的酒店,會獲得微信端的流量支持(即將上線)。
  • 攜程持續助力途家 微信酒店接入共享住宿
    會上,第三方分析機構易觀諮詢的分析師姜昕蔚解讀了住宿分享行業的發展趨勢,途家聯合創始人兼CEO羅軍從企業實踐角度分享了途家在上半年的戰略布局與發展情況,其中攜程、去哪兒、藝龍在公寓民宿庫存方面的打通取得階段性成果,訂單及交易量持續高速增長,企業核心競爭力不斷強化。  途家此次分享會更得到了戰略投資人攜程的支持。「分享住宿已成為攜程住宿資源非常重要的一部分。」
  • 攜程預訂酒店 到店無房怎麼辦?
    說起攜程,一定會有不少人義憤填膺的表示這家已經是全球第二大的OTA實在是太坑了,幾乎每個人都能說出一些被攜程坑的經歷。然而這兩年隨著我自己訂票訂房出行次數的增加,今天,我反倒要吹一波攜程。在這一次去英國跨年的旅程中,最後一天我選擇的是倫敦的市政廳萬豪酒店。
  • 攜程無線更名為「攜程旅行」 上線酒店團購功能
    攜程無線更名為「攜程旅行」 上線酒店團購功能時間: 2013-06-13責任編輯: 白水旅遊_中國網 6月13日消息,億邦動力網獲悉,攜程旅行網移動客戶端「攜程無線」近日已更名為「攜程旅行」,有意要做「大而全」的在線旅遊客戶端。
  • 攜程酒店大學全國實戰訓練營即將開課:以提升產量為唯一目標
    隨著賞花踏青季的來臨,酒店的旺季也即將到來,如何在今年的旺季吸引到更多的流量成為了眾多酒店業主關注的焦點。近日,攜程酒店大學宣布開啟「玩轉OTA全國實戰訓練營」,以現場授課、專家輔導的實戰演練模式,賦能酒店,幫助酒店進一步提升產量和收益。
  • 攜程商旅酒店預訂指引
    Q:在攜程商旅預訂酒店如何獲取發票?A:選擇符合差標在線付房型,發票將會統一郵寄給公司,員工無需獲取發票。Q:為什麼我預訂的酒店不能修改或取消?A:每個酒店房型對應的取消政策不同。請在提交訂單前仔細核對相應政策。如果行程變動的可能性較大,建議預訂可限時取消的酒店。
  • 攜程與萬豪中國旅客住萬豪酒店可獲攜程積分
    昨日,萬豪國際集團常客獎勵計劃「萬豪禮賞」與攜程旅行網煟危粒櫻模粒薛煟茫裕遙校犃手開展一項面向中國旅客的合作舉措,旅客在全球各地的3600家萬豪酒店住宿,即可獲得換領免費酒店住宿及多種禮品的機會。
  • 攜程酒店大學助力陝西酒店行業升級
    2月20日,攜程酒店大學與陝西旅遊飯店協會籤署合作協議,未來將從專業化培訓、網際網路人才培養、大數據分析等方面,大幅提升酒店運營效率,助力陝西酒店行業升級。酒店行業的發展離不開人才的推動和儲備。根據協議,雙方將擴大參與線下授課的覆蓋酒店數,開發出更符合本地市場的培訓課程;通過邀請、徵集、推薦等形式,共同挖掘陝西本地優秀酒店人才,納入攜程酒店大學專家委員會;定期為本地商戶舉辦講座,促進行業知識的分享與流通。攜程酒店大學還將通過大數據對陝西旅遊市場進行評估,通過對線上住宿預訂數據、旅遊者個人愛好等分析,精準定位消費者需求,藉助大數據對不同客戶採取不同的營銷策略。
  • 攜程機票輔營產品個性化銷售實踐
    攜程機票研發數據分析挖掘總監聶強強,以攜程的實踐講解為什麼需要做輔營產品的個性化,攜程是怎麼做的、個性化的效果怎麼樣,及下一步的規劃。以下為演講全文:  大概攜程是從2015年底開始大量的引入越來越多的輔營產品,來覆蓋更多用戶出行的一些需求場景,比如在出發前,用戶可能會有一些辦理籤證、提前預定接送機、兌換外幣、購買保險、有限選座等等這些需求。
  • 女房客在酒店遇襲 攜程到底要不要擔責?
    這是在事件發生後網絡發酵的當天某女記者採訪時拋出的問題,在當時情況尚不明了的情況下,明顯可以看出,該記者作為女性、對於女房客在攜程這樣的大型O2O平臺預訂了住宿服務、發生如此惡劣的事情後,平臺居然沒有任何反應,有些憤怒。按照普通人的邏輯,很簡單,既然你在我預訂的服務中獲得了商業利益,那你就應該在我出現問題時承擔責任。