如何使用 DevOps 提高區(qū)塊鏈項(xiàng)目的工程質(zhì)量與測(cè)試效率

本文是我受邀在 TiD2019質(zhì)量競(jìng)爭(zhēng)力大會(huì)區(qū)塊鏈論壇中的分享的一個(gè)主題,介紹如何運(yùn)用 DevOps 技術(shù)體系讓開(kāi)發(fā)和測(cè)試人断、運(yùn)維進(jìn)行高效協(xié)作,如何使用 CI/CD 進(jìn)行區(qū)塊鏈軟件自動(dòng)化測(cè)試、軟件發(fā)布鲤拿;設(shè)計(jì) CI/CD 流水線時(shí)需要注意哪些問(wèn)題;區(qū)塊鏈軟件自動(dòng)化測(cè)試有哪些難點(diǎn)署咽;如何提高自動(dòng)化測(cè)試運(yùn)行效率近顷;什么樣的測(cè)試報(bào)告才是好的報(bào)告生音;測(cè)試框架優(yōu)化實(shí)戰(zhàn)經(jīng)驗(yàn)分享。

大綱

  • 背景介紹
  • DevOps 流程 - 需求窒升、開(kāi)發(fā)缀遍、測(cè)試、運(yùn)維饱须、監(jiān)控一體化
  • 敏捷開(kāi)發(fā)與DevOps - 開(kāi)發(fā)和測(cè)試域醇、運(yùn)維應(yīng)該如何協(xié)作
  • 為什么要自動(dòng)化測(cè)試?
  • 介紹CI/CD流水線
  • 如何設(shè)計(jì)測(cè)試流水線
  • 實(shí)戰(zhàn)經(jīng)驗(yàn):優(yōu)化流水線
  • 實(shí)戰(zhàn)經(jīng)驗(yàn):優(yōu)化測(cè)試框架

背景介紹

為了提高軟件的研發(fā)效率蓉媳、保證軟件質(zhì)量譬挚、高效服務(wù)運(yùn)維,我們?cè)陂_(kāi)發(fā)管理上實(shí)踐敏捷開(kāi)發(fā)酪呻、使用 DevOps 進(jìn)行自動(dòng)化運(yùn)維减宣、實(shí)行持續(xù)的自動(dòng)化測(cè)試。

在介紹怎么做之前玩荠,先說(shuō)下我們做了什么漆腌,這樣能比較好理解知道我們?yōu)槭裁匆@樣做。

我們?cè)?016年開(kāi)發(fā)了一款區(qū)塊鏈軟件 CITA姨蟋,并在2017年進(jìn)行了項(xiàng)目開(kāi)源:https://github.com/cryptape/cita

image001.png

CITA 是我們從頭開(kāi)始自主研發(fā)的一個(gè)高性能區(qū)塊鏈內(nèi)核屉凯,具有微服架構(gòu)、水平擴(kuò)展眼溶、組件可插拔悠砚、高性能這些特質(zhì)。

區(qū)塊鏈服務(wù)簡(jiǎn)單可以看作是一種分布式的賬本同步系統(tǒng)堂飞。為了簡(jiǎn)化應(yīng)用開(kāi)發(fā)者的使用我們還開(kāi)發(fā)了與之配套的各種開(kāi)發(fā)灌旧、調(diào)試工具、組件绰筛,例如:

image003.png

CITA內(nèi)核與各組件的關(guān)系圖:


image005.png

這些工具都是開(kāi)源的:https://www.citahub.com/#componentArea

具體怎么做

我們實(shí)踐 敏捷開(kāi)發(fā)

image007.png

我們使用敏捷開(kāi)發(fā)中的 Scrum 框架管理團(tuán)隊(duì)目標(biāo)和進(jìn)度枢泰。
敏捷開(kāi)發(fā)的目標(biāo)是通過(guò)迭代開(kāi)發(fā)的方式交付可工作的軟件。
我們會(huì)將一個(gè)大的版本作為一個(gè)Milestone(里程碑)铝噩,定義好必須要完成的總目標(biāo)和時(shí)間點(diǎn)衡蚂,然后切分成幾個(gè)較短工作周期的 Sprint(迭代),每個(gè) Sprint 有自己要完成的階段目標(biāo)骏庸。

我們使用 Story Point 來(lái)評(píng)估每個(gè)任務(wù)的完成時(shí)間毛甲,使用燃盡圖反饋任務(wù)完成進(jìn)度,以便可調(diào)控每個(gè) Sprint 的節(jié)奏和進(jìn)度具被,如下圖玻募,是我們一個(gè)子產(chǎn)品開(kāi)發(fā)過(guò)程的各個(gè)Sprint 里的燃盡圖:

image009.png

在具體的任務(wù)管理上我們使用 Kanban(看板)工具來(lái)跟蹤每個(gè)成員的任務(wù)狀態(tài),如下圖:


image011.png

看板是一種圖形化的展示工具一姿,由于人類(lèi)天生對(duì)視覺(jué)化的信息更容易理解七咧,通過(guò)它可以很直觀的反應(yīng)每個(gè)任務(wù)的狀態(tài)跃惫、同時(shí)也是一種工作量的直觀呈現(xiàn),讓開(kāi)發(fā)組中每個(gè)成員都可以清晰知道自己艾栋、同時(shí)了解到其他人的工作進(jìn)展爆存。

我們實(shí)踐 DevOps

image013.png

軟件開(kāi)發(fā)不只是把代碼編寫(xiě)出來(lái)就完事,還需要經(jīng)過(guò)測(cè)試保證完整性裹粤、把測(cè)試后的軟件部署到服務(wù)器上终蒂,還要設(shè)置監(jiān)控保障服務(wù)運(yùn)行正常蜂林,并能收集反饋給產(chǎn)品遥诉、開(kāi)發(fā)團(tuán)隊(duì)對(duì)軟件功能、質(zhì)量進(jìn)行持續(xù)的改善噪叙,才是一個(gè)完整可用的服務(wù)開(kāi)發(fā)到上線的過(guò)程矮锈,整個(gè)過(guò)程如上圖所示,一環(huán)銜接一環(huán)睁蕾。

我們?nèi)绾螌?shí)踐 DevOps苞笨?

image015.png

如上圖所示,DevOps 不單是運(yùn)維團(tuán)隊(duì)的事情子眶,而是開(kāi)發(fā)瀑凝、運(yùn)維、測(cè)試各種崗位人員一體化實(shí)施的一個(gè)過(guò)程臭杰。我們要求做到流程規(guī)范化粤咪,這樣各個(gè)職能成員能互相了解對(duì)方的工作輸出預(yù)期,才能高效協(xié)作渴杆。流程規(guī)范化后寥枝,才能使用工具進(jìn)行自動(dòng)化來(lái)提高工作效率和減少人為產(chǎn)生的故障。讓各環(huán)節(jié)的協(xié)作像是流水線般清晰可感知磁奖、可預(yù)期囊拜。

有人認(rèn)為要實(shí)踐 DevOps 要要求團(tuán)隊(duì)成員都是全棧工程師,而我認(rèn)為專(zhuān)業(yè)分工才能深入和精通比搭,因此我們把團(tuán)隊(duì)分為區(qū)塊鏈開(kāi)發(fā)冠跷、測(cè)試開(kāi)發(fā)、運(yùn)維開(kāi)發(fā)團(tuán)隊(duì)身诺,注意到每個(gè)崗位都是有“開(kāi)發(fā)“字眼蜜托,具備有編程能力的團(tuán)隊(duì)才是能有效實(shí)踐 DevOps 的根本。

我給團(tuán)隊(duì)設(shè)定3個(gè)目標(biāo):

  1. 開(kāi)發(fā)區(qū)塊鏈軟件 - 軟件代碼 用 CI 進(jìn)行自動(dòng)化代碼質(zhì)檢戚长、測(cè)試盗冷、構(gòu)建、發(fā)布

  2. 測(cè)試區(qū)塊鏈軟件 - 測(cè)試代碼 用 CI 進(jìn)行冒煙同廉、回歸仪糖、性能柑司、穩(wěn)定性測(cè)試

  3. 運(yùn)維區(qū)塊鏈服務(wù) - 監(jiān)控服務(wù) 用 CI 進(jìn)行主動(dòng)監(jiān)控、被動(dòng)告警

對(duì)這樣的團(tuán)隊(duì)的要求:

  1. 開(kāi)發(fā)锅劝、測(cè)試攒驰、運(yùn)維均要求有編程能力
  2. 開(kāi)發(fā)、測(cè)試故爵、監(jiān)控服務(wù)的代碼玻粪,均遵從相同的開(kāi)發(fā)流程、使用CI工具

開(kāi)發(fā)流程

使用 GitHub Flow 進(jìn)行代碼管理诬垂, 本地創(chuàng)建 feature 分支 -> 發(fā)PR -> 代碼審查 / CI 檢查 -> 合并 master 分支:

image017.png

自動(dòng)化運(yùn)維

使用 CI/CD 流水線 進(jìn)行自動(dòng)化構(gòu)建劲室、測(cè)試、發(fā)布结窘、部署:

image019.png

開(kāi)發(fā)人員的代碼開(kāi)發(fā)完成會(huì)進(jìn)行代碼審查很洋、靜態(tài)代碼掃描檢查代碼規(guī)范和代碼安全檢查、運(yùn)行自動(dòng)化測(cè)試隧枫;根據(jù)不同的分支合并策略進(jìn)行不同環(huán)節(jié)的自動(dòng)化部署喉磁,如合并到 develop 分支會(huì)觸發(fā) staging 環(huán)境的部署,部署成功后自動(dòng)通知測(cè)試人員進(jìn)行驗(yàn)收測(cè)試官脓;合并到 master 分支會(huì)觸發(fā) production 環(huán)境的部署协怒,部署成功后自動(dòng)發(fā)送上線通知讓運(yùn)營(yíng)人員進(jìn)行運(yùn)營(yíng)使用。 使用自動(dòng)化的 CI/CD 工具和流程卑笨,可以把功能開(kāi)發(fā)到上線時(shí)間孕暇,縮短到開(kāi)發(fā)人員提交代碼的最后一刻,并且在 CI 服務(wù)上有記錄湾趾,每個(gè)人都能知道是什么人芭商、在什么時(shí)候、部署了什么改動(dòng)搀缠、到哪個(gè)環(huán)節(jié)铛楣,提高了運(yùn)維效率也減少了人工操作過(guò)程的人為事故可能性。

服務(wù)監(jiān)控

運(yùn)維使用 ELK 服務(wù)進(jìn)行日志收集艺普、數(shù)據(jù)分析簸州,如下圖,我們對(duì) 測(cè)試鏈 各個(gè)節(jié)點(diǎn)上服務(wù)的日志收集和分析歧譬,出現(xiàn)軟件故障時(shí)方便運(yùn)維岸浑、開(kāi)發(fā)人員了解原因。

image021.png

為了方便CITA服務(wù)的運(yùn)維瑰步,我們的運(yùn)維團(tuán)隊(duì)開(kāi)發(fā)了 CITA 的監(jiān)控服務(wù)矢洲,可用于監(jiān)控節(jié)點(diǎn)中CITA的服務(wù)運(yùn)行情況,包括采集區(qū)塊鏈數(shù)據(jù)缩焦、CITA進(jìn)程的存活監(jiān)控读虏、運(yùn)行環(huán)境監(jiān)控责静、故障自動(dòng)告警通知,提供給開(kāi)發(fā)盖桥、運(yùn)維人員友好的可視化的面板灾螃,如下圖:

image023.png

同樣的,這個(gè)監(jiān)控工具的本身的開(kāi)發(fā)流程也是一樣遵從同樣的 DevOps 實(shí)踐揩徊,同樣也是開(kāi)源的:https://github.com/cryptape/cita-monitor

持續(xù)自動(dòng)化測(cè)試

提高了開(kāi)發(fā)腰鬼、運(yùn)維效率,還要保障軟件的質(zhì)量塑荒,這個(gè)是我們測(cè)試團(tuán)隊(duì)的工作重點(diǎn)熄赡。
下圖是軟件測(cè)試中著名的測(cè)試金字塔,測(cè)試金字塔說(shuō)明了一種兩難的境地:越是上層的測(cè)試袜炕,就會(huì)耗費(fèi)越多的精力本谜、時(shí)間和成本。

image025.png

我們的測(cè)試團(tuán)隊(duì)的工作重點(diǎn)正是最耗時(shí)間偎窘、資源的系統(tǒng)測(cè)試的自動(dòng)化。這并不是說(shuō)開(kāi)發(fā)團(tuán)隊(duì)就不用管測(cè)試了羡洁,開(kāi)發(fā)團(tuán)隊(duì)主要編寫(xiě)單元測(cè)試数苫、集成測(cè)試等的白盒測(cè)試考蕾。

因?yàn)槲覀冋J(rèn)為:

  • 自動(dòng)化測(cè)試才能讓QA的價(jià)值最大化;
  • 自動(dòng)化需要 CI 工具來(lái)做管理和執(zhí)行仆葡。

區(qū)塊鏈軟件是一種多實(shí)例運(yùn)行的系統(tǒng),只保障了單元測(cè)試志笼、集成測(cè)試的結(jié)果是遠(yuǎn)不足夠保障系統(tǒng)最終是可用沿盅、結(jié)果是可信的,而區(qū)塊鏈又是一個(gè)用計(jì)算機(jī)軟件解決【信任】的工具纫溃,軟件首先必須是可信的腰涧,產(chǎn)生的數(shù)據(jù)才能讓人信任,因此我們對(duì)測(cè)試工作投入大量的精力來(lái)保障軟件的質(zhì)量紊浩。

我們做的系統(tǒng)測(cè)試是一種端對(duì)端級(jí)別的窖铡、在仿真環(huán)境中軟件運(yùn)行結(jié)果的黑盒測(cè)試,為了提高測(cè)試工作效率坊谁,我們使用了 CI 流水線來(lái)管理多種測(cè)試策略费彼。

測(cè)試流水線

什么是 CI/CD 流水線(Pipeline)?
如下圖所示口芍,Jenkins 是我們使用的 CI 工具之一箍铲,一條 CI/CD Pipeline 像是一個(gè)的管道,代碼提交后會(huì)觸發(fā) CI 的運(yùn)行策略鬓椭,執(zhí)行自動(dòng)化的構(gòu)建颠猴、測(cè)試從而實(shí)現(xiàn)持續(xù)集成或持續(xù)部署流程聋庵,不同管道環(huán)節(jié)有各自的輸入、輸出芙粱,任何一個(gè)環(huán)節(jié)出問(wèn)題都阻塞影響到整個(gè)管道的工作祭玉。

image027.png

進(jìn)行 CI/CD 流水線設(shè)置之前,先思考3個(gè)問(wèn)題:

  • 如何設(shè)計(jì)一條合理的流水線春畔?
  • 如何設(shè)計(jì)測(cè)試流水線脱货?
  • 為什么要設(shè)置多條流水線?

流水線設(shè)計(jì)關(guān)鍵要素有2點(diǎn):

  1. 設(shè)計(jì)合適的Workflow:工作流程律姨,如:stage 1 -> stage 2 -> stage 3
  2. 設(shè)計(jì)Workflow 中的 Stage Job:階段工作振峻,如:unit-test, build, integration-test, code-audit, staging-deploy, production-deploy

每個(gè) Stage Job 也有5個(gè)設(shè)計(jì)關(guān)鍵要素:

  1. Up/Down stream:上下游的Stage Job
  2. Trigger: 觸發(fā)條件
  3. Input/Output:輸入?yún)?shù);輸出構(gòu)件產(chǎn)物择份、輸出參數(shù)
  4. Steps:執(zhí)行步驟
  5. Notification:結(jié)果通知扣孟;最后的 stage 都要有明確的通知對(duì)象

我們都知道做軟件開(kāi)發(fā)需要有 PRD(功能需求文檔),同樣的流水線設(shè)置也需要有設(shè)計(jì)文檔荣赶。
在設(shè)置具體的 CI/CD 流水線前凤价,要做下流水線設(shè)計(jì),如下圖是我們其中2條流水線的設(shè)計(jì)文檔:

image029.png

設(shè)計(jì)好各種流水線的作用拔创、執(zhí)行策略和運(yùn)行步驟細(xì)節(jié)后利诺,就可以在 CI 工具上進(jìn)行相應(yīng)的設(shè)置,不要一邊想一邊改 CI 配置剩燥,特別是對(duì)于復(fù)雜的流水線應(yīng)該設(shè)計(jì)好再做設(shè)置慢逾,這樣一來(lái)流水線自己也有了文檔留存,方便其他運(yùn)維同事協(xié)作灭红,開(kāi)發(fā)和測(cè)試也能清楚工作流程侣滩。

如下圖,是我們?cè)O(shè)置的發(fā)版測(cè)試流水線:


image031.png

發(fā)版測(cè)試流水線分為4個(gè)階段:

  1. 構(gòu)建測(cè)試對(duì)象:獲取軟件代碼变擒,自動(dòng)編譯生成不同算法版本的二進(jìn)制文件bin
  2. 生成測(cè)試運(yùn)行環(huán)節(jié):把 bin 文件放入可運(yùn)行的環(huán)境君珠,構(gòu)建 Docker Image
  3. 運(yùn)行測(cè)試用例:對(duì)不同 bin 版本運(yùn)行自動(dòng)化測(cè)試用例;并行執(zhí)行節(jié)省時(shí)間
  4. 生成測(cè)試報(bào)告:自動(dòng)匯總各個(gè)版本的測(cè)試結(jié)果赁项,自動(dòng)生成一份包含測(cè)試對(duì)象葛躏、測(cè)試環(huán)境、測(cè)試結(jié)果的報(bào)告悠菜;并自動(dòng)把構(gòu)建產(chǎn)物存檔舰攒,方便對(duì)外發(fā)布

多種流水線策略

發(fā)版流水線無(wú)疑是我們?nèi)粘i_(kāi)發(fā)中最重要的一種流水線,為了能讓開(kāi)發(fā)人員盡早發(fā)現(xiàn)代碼質(zhì)量問(wèn)題悔醋,我們還設(shè)置各種策略的測(cè)試流水線摩窃,例如用于保障開(kāi)發(fā)主分支的系統(tǒng)測(cè)試流水線、用于保障測(cè)試代碼質(zhì)量的冒煙、回顧測(cè)試流水線猾愿;用于保障軟件性能的性能測(cè)試流水線等鹦聪。

image033.png
  • 系統(tǒng)測(cè)試流水線:
    • 當(dāng)開(kāi)發(fā)人員在開(kāi)發(fā)的 develop 分支有合并時(shí)執(zhí)行全量測(cè)試用例集的回歸測(cè)試,用于保障開(kāi)發(fā)主分支的代碼質(zhì)量蒂秘。
  • 冒煙測(cè)試流水線:
    • 用于做測(cè)試用例的增量泽本,用于保障測(cè)試代碼的代碼質(zhì)量;當(dāng)測(cè)試人員提交測(cè)試代碼的 feature 分支時(shí)執(zhí)行姻僧;只運(yùn)行 P1 級(jí)別的測(cè)試用例集规丽,執(zhí)行速度快,加快代碼審查撇贺、合并流程赌莺;復(fù)用由發(fā)版流水線生成的測(cè)試對(duì)象。
  • 回歸測(cè)試流水線:
    • 用于保障測(cè)試代碼的代碼質(zhì)量松嘶;當(dāng)測(cè)試人員合并測(cè)試代碼的 develop 分支時(shí)執(zhí)行艘狭;運(yùn)行全量的測(cè)試用例集,執(zhí)行速度翠订,但避免引入有破壞性的代碼巢音;同樣是復(fù)用由發(fā)版流水線生成的測(cè)試對(duì)象。

其他測(cè)試流水線:

image035.png
  • 性能測(cè)試流水線:
    • 除了保障軟件的可用性蕴轨,我們非常關(guān)注軟件的運(yùn)行效率港谊,因此我們?cè)O(shè)置了性能測(cè)試流水線。性能測(cè)試關(guān)注的結(jié)果是一些性能指標(biāo)橙弱,如反映服務(wù)處理能力的TPS、延遲和響應(yīng)時(shí)間等燥狰。但性能測(cè)試的運(yùn)行代價(jià)很高棘脐,需要獨(dú)占主機(jī)資源并長(zhǎng)時(shí)間運(yùn)行。因此我們?cè)O(shè)置成每天晚上凌晨2點(diǎn)半自動(dòng)運(yùn)行性能測(cè)試流水線龙致,運(yùn)行完畢會(huì)生成圖形化的報(bào)告發(fā)送郵件通知開(kāi)發(fā)團(tuán)隊(duì)蛀缝。這樣開(kāi)發(fā)團(tuán)隊(duì)每天都能了解到主分支的性能變化情況,當(dāng)出現(xiàn)有重大性能變化時(shí)可以及早進(jìn)行優(yōu)化修復(fù)目代,而不是等到發(fā)版測(cè)試階段才知道結(jié)果屈梁。
  • 穩(wěn)定性測(cè)試流水線:
    • 我們還關(guān)注軟件的穩(wěn)定性,軟件的穩(wěn)定性是指在服務(wù)有大量請(qǐng)求壓力時(shí)各種關(guān)鍵功能還能正常工作榛了。因此我們?cè)O(shè)置了穩(wěn)定性測(cè)試流水線在讶,在發(fā)版階段執(zhí)行,可以按需要選擇壓測(cè)的參數(shù)霜大。
  • 可用性測(cè)試流水線:
    • 開(kāi)發(fā)人員做了一些重大改動(dòng)构哺,在合并到主分支前,想了解是否有其他副作用,因此運(yùn)維提供了可用性測(cè)試流水線曙强,開(kāi)發(fā)自己選擇需要測(cè)試的分支執(zhí)行即可獲得該分支回歸測(cè)試的結(jié)果残拐。
  • 性能改進(jìn)測(cè)試流水線:
    • 開(kāi)發(fā)人員做了一些性能相關(guān)的改動(dòng),想了解整體上的性能變化碟嘴,運(yùn)維提供了性能改進(jìn)測(cè)試流水線溪食,開(kāi)發(fā)自己選擇需要測(cè)試的分支執(zhí)行即可獲得該分支的性能測(cè)試結(jié)果。

在DevOps 模式的協(xié)作重點(diǎn)

在 DevOps 模式下開(kāi)發(fā)娜扇、測(cè)試错沃、運(yùn)維人員的協(xié)作重點(diǎn)為:

  • 運(yùn)維的工作目標(biāo)是使用自動(dòng)化技術(shù)為開(kāi)發(fā)、測(cè)試提供便利流程袱衷、工具捎废,減少重復(fù)工作
  • 測(cè)試的工作目標(biāo)是使用自動(dòng)化技術(shù)提高測(cè)試效率、保障開(kāi)發(fā)成果質(zhì)量
  • 開(kāi)發(fā)享受自動(dòng)化的便利致燥,專(zhuān)心做開(kāi)發(fā)登疗,提高軟件質(zhì)量

沒(méi)有自動(dòng)化則沒(méi)有效率提升和質(zhì)量持續(xù)保障,而自動(dòng)化工具的維護(hù)當(dāng)然也是有代價(jià)的嫌蚤,這個(gè)正就是實(shí)踐 DevOps 的團(tuán)隊(duì)真正要做的工作辐益。

實(shí)戰(zhàn)經(jīng)驗(yàn)分享

如何優(yōu)化流水線和測(cè)試框架,以下是我們實(shí)踐的一些技巧和收獲:

流水線優(yōu)化技巧

  • 流水線互相制約保障質(zhì)量
  1. 系統(tǒng)測(cè)試流水線保障開(kāi)發(fā)代碼質(zhì)量

  2. 回歸測(cè)試流水線保障測(cè)試代碼質(zhì)量

  • 配合 GitHub Flow 約定自動(dòng)化觸發(fā)規(guī)則:

    1. feature 分支跑冒煙脱吱,冒煙過(guò)了合并到 develop

    2. 合并 develop 跑回歸智政,回歸過(guò)了合并到 master

  • 重用測(cè)試對(duì)象:

    1. 發(fā)版測(cè)試構(gòu)建測(cè)試對(duì)象

    2. 冒煙、回歸使用已構(gòu)建的測(cè)試對(duì)象

    3. 測(cè)試對(duì)象放入Docker Image 做版本管理箱蝠,本地測(cè)試和CI上使用相同測(cè)試對(duì)象

  • 存檔構(gòu)建工件

  • 合并測(cè)試報(bào)告

  • 測(cè)試環(huán)境使用 Docker Container 隔離

  • 每條測(cè)試用例隔離運(yùn)行

測(cè)試框架優(yōu)化技巧

  • 使用環(huán)境變量及 Docker Image Tag 獲取測(cè)試對(duì)象
  • 使用 Docker Image 獲得統(tǒng)一的測(cè)試環(huán)境
  • 出錯(cuò)自動(dòng)重試用例
  • 測(cè)試用例并行執(zhí)行
  • 管理輸出日志
  • 輸出直觀的測(cè)試報(bào)告

什么樣的測(cè)試報(bào)告才是好的報(bào)告续捂?

測(cè)試工作的最終呈現(xiàn)結(jié)果就是測(cè)試報(bào)告,那什么樣的測(cè)試報(bào)告才是好的報(bào)告宦搬?
我認(rèn)為一份清晰準(zhǔn)確的測(cè)試報(bào)告總結(jié)內(nèi)容應(yīng)該包含:

  1. 測(cè)試對(duì)象

    1. 軟件名稱(chēng)
    2. 軟件版本
    3. 源碼地址
    4. 源碼commit id
    5. bin文件輸出的版本信息
  2. 測(cè)試環(huán)境

    1. 測(cè)試代碼的commit id
  3. 測(cè)試用例

  4. 測(cè)試結(jié)果

而一個(gè)好的測(cè)試框架應(yīng)該能幫助測(cè)試人員自動(dòng)生成這樣一份測(cè)試報(bào)告牙瓢,提高測(cè)試人員的工作效率和準(zhǔn)確性。

以下就是我們使用的測(cè)試框架(使用 TestNG 作為基礎(chǔ)框架)得到的報(bào)告:

image037.png
image039.png

我們對(duì)測(cè)試框架持續(xù)改良间校,使得自動(dòng)生成測(cè)試報(bào)告中能輸出我們關(guān)注的測(cè)試對(duì)象版本矾克、測(cè)試環(huán)境、測(cè)試代碼版本等信息憔足,收到測(cè)試報(bào)告通知時(shí)胁附,每個(gè)人都在通過(guò)報(bào)告可以清晰并準(zhǔn)確知道測(cè)試的是什么、是什么結(jié)果滓彰、怎么測(cè)試的控妻。

我認(rèn)為企業(yè)協(xié)作的高效秘訣之一是:Don't ask, look by your self! (不用問(wèn),自己看)
可以主動(dòng)感知的信息才有效率找蜜,通過(guò)詢(xún)問(wèn)才能得知是低效的工作方式饼暑。

以上便是我們對(duì)區(qū)塊鏈軟件的工程質(zhì)量控制的一些經(jīng)驗(yàn)分享,請(qǐng)注意,每個(gè)企業(yè)都有各自的優(yōu)勢(shì)弓叛、短板或歷史包袱彰居,經(jīng)驗(yàn)不能復(fù)制只能參考,適合自己的才是最好的撰筷,謝謝陈惰。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市毕籽,隨后出現(xiàn)的幾起案子抬闯,更是在濱河造成了極大的恐慌,老刑警劉巖关筒,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件溶握,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡蒸播,警方通過(guò)查閱死者的電腦和手機(jī)睡榆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)袍榆,“玉大人胀屿,你說(shuō)我怎么就攤上這事“福” “怎么了宿崭?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)才写。 經(jīng)常有香客問(wèn)我葡兑,道長(zhǎng),這世上最難降的妖魔是什么赞草? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任铁孵,我火速辦了婚禮,結(jié)果婚禮上房资,老公的妹妹穿的比我還像新娘。我一直安慰自己檀头,他們只是感情好轰异,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著暑始,像睡著了一般搭独。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上廊镜,一...
    開(kāi)封第一講書(shū)人閱讀 49,166評(píng)論 1 284
  • 那天牙肝,我揣著相機(jī)與錄音,去河邊找鬼。 笑死配椭,一個(gè)胖子當(dāng)著我的面吹牛虫溜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播股缸,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼衡楞,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了敦姻?” 一聲冷哼從身側(cè)響起瘾境,我...
    開(kāi)封第一講書(shū)人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎镰惦,沒(méi)想到半個(gè)月后迷守,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡旺入,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年兑凿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片眨业。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡急膀,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出龄捡,到底是詐尸還是另有隱情卓嫂,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布聘殖,位于F島的核電站晨雳,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏奸腺。R本人自食惡果不足惜餐禁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望突照。 院中可真熱鬧帮非,春花似錦、人聲如沸讹蘑。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)座慰。三九已至陨舱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間版仔,已是汗流浹背游盲。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工误墓, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人益缎。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓谜慌,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親链峭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子畦娄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

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