持續集成、自動化測試進一步要求軟件研發有一個良好的環境支撐,即本章要討論的基礎設施,包括虛擬技術與Docker技術、基礎設施即代碼、持續集成環境、單元測試TA框架、系統測試TA框架、驗收測試TA框架(包括需求實例化與BDD框架)、DevOps工具鏈等。ios
3.1虛擬機與容器技術redis
虛擬機shell
- 大大提升服務器利用率
- 從數據中心空間、機櫃、網線、耗電量、空調等方面大大節省維護費用
- 能快速完成虛擬機的環境安裝和恢復
- 標準化環境和改進安全,包括高級備份策略,在更少冗餘的狀況下,確保高可用性,容易實現添加、移動、變動和重置服務器的操做
- 經過部署在刀片式(機架式)服務器上的虛擬中心來管理虛擬和實體主機,創建一個邏輯的資源地,連續地整合系統負載,進而優化硬件使用率和下降成本
容器數據庫
- 鏡像體積更小,只包括應用軟件系統和所依賴的環境
- 建立和啓動更快,不須要啓動Guest OS
- 層次更高,下降額外資源開銷,資源控制粒度更小,部署密度更大
- 使用的是真實物理資源,所以不存在性能損耗
3.2基礎設施即代碼api
雲平臺要求具備良好的可伸縮性(彈性),能夠動態、靈活地分配各個項目所需的資源(存儲能力、計算能力、傳輸能力等)。安全
- 一切都是API,環境的安裝、升級和配置都經過API調用方式實現。
- 基礎設施即代碼(Infrastructure as Code,IaC),經過機器可讀定義文件管理和配置計算數據中心的過程,而不是物理硬件配置或交互式配置工具,便可以在版本控制系統中使用腳本或聲明性定義來描述資源的配置。
IaC的價值能夠分解爲3個可度量的類別:環境維護成本、速度和風險。可分爲三類:複用性、一致性、快速反饋、可視性。bash
3.3持續集成環境服務器
軟件測試環境構建中,要考慮和研發環境的集成,主要指持續集成環境Continuous Integration(CI)和各類自動化測試框架,如單元測試框架、系統測試框架、驗收測試框架和DevOps工具鏈等。網絡
CI環境主要涉及的工具:代碼管理、版本構建、CI調度、自動部署、配置管理、代碼靜態分析、單元測試、版本驗證(測試)。架構
3.4自動化測試框架
框架和工具的根本區別:框架只是完成一個架構,用戶能夠根據本身的需求進行填充,如進行二次開發,增長具體的、特定的功能,還能夠集成其餘不一樣的測試工具;而一個測試工具相對固定,沒法進行二次開發,也不能集成大量第三方工具。
Harness/IDE、TA腳本的管理、測試資源管理、測試數據管理、開放的接口、代理(Agent)、任務安排(Scheduler)、數據統計分析。
從腳本的預言或描述方式對自動化測試框架進行分類:函數型自動化測試框架、單領域語言型、多領域語言型、富文檔型。
爲更好應用自動化測試框架,接下來介紹單元測試框架、Web UI功能測試框架、移動應用測試框架、API測試框架和驗收測試框架。
1.單元測試框架
JUnit & xUnit
2.UI TA框架
經常使用的有:AutoIT、sikuli、Watir、Selenium以及跨平臺的UI框架。
還有:Micro Focus UFT、SmartBear TestComplete、TestPlant eggPlant、IBM Rational Functional Tester、Tricentis Tosca、Katalon Studio、Robot framework等。
3.移動應用TA框架
基於Andrioid的TA框架:Robotium、Selendroid、ATAF等
基於iOS的TA框架:KIF、Kiwi等
跨平臺/混合式的TA框架:Appium、Ranorex Studio、Calabash等
4.面向API的TA測試框架
自動化測試金字塔:最底層爲單元測試、中間層爲API測試、塔頂爲UI測試。
自動化測試工具:Linux/Mac OS自帶命令curl、Google Chrome插件Advanced REST Client和Firefox 插件Rest Client以及Robot Framework、JMeter、SoapUI、TestNG+HttpClient、Postman等。
5.驗收測試框架
Fitness、ATDD(驗收測試驅動開發)、BDD(行爲驅動開發)、甚至需求實例化的自動化測試框架均可以歸入驗收測試框架,包括Cucumber、Calabash、RobotFramework、SpecFlow、JBehave/NBehave/CBehave、RSpec、JDave、Gauge等。
3.5DevOps完整工具鏈
如今有豐富的開源軟件工具,能夠構成相對比較完整的DevOps工具鏈,若是但願看到更豐富更細的DevOps工具鏈,能夠列出32類測試工具,差很少涵蓋了整個軟件研發與維護生命週期所需的所有工具。
- 代碼管理(SCM):GitHub、GitLab、Bitbucket、Subversion、Coding、Bazza、JFrog Artifactory
- 構建工具:Ant、Gradle、maven
- 自動部署:Capistrano、CodeDeploy、Superviso、Forever
- 持續集成:Jenkins2.0及其Pipeline插件、Capistrano、BuildBot、Bamboo、Fabric、CircleCI、Teamcity、Tinderbox、Travis CI、flow.ci Continumm、Luntbuild、CruiseControl、Integrity、Gump、CodeFresh、CodeShip、Go
- 配置管理:Ansible、Bash、Chef、Cfengine、Puppet、Rudder、Rundeck、Saltstack、ScriptRock GuardRail、Vagrant
- 編排:Kubernetes(K8s)、Core、Apache Mesos、Rancher
- 微服務平臺:OpenShift、Cloud Foundry、Mesosphere
- 服務開通:Puppet、Docker Swarm、Vagrant、Powershell、OpenStack Heat
- 服務註冊與發現:Zookeeper、etcd、Consul
- 單元測試:JUnit、xUnit、Nexus、TestNG、Mocha
- 代碼靜態分析工具:Findbugs、C++Test、CppTest、IBM AppScan Source Edition、Fotify Static Code Analyzer、Visual Studio、Google's Closure Complier、JSHint、ychecker、PyCharm
- API測試:JMeter、Postman、SoapUI、Rest-Assured、Dubbo
- 功能測試:Selenium、CircleCi、Appium
- 性能測試:JMeter、Gradle、nGrider、Gatling、LoadRunner
- 安全性測試工具:IBM AppS can、OWASP ZAP、Coverity、Fortity SSC、Android Tamer、Firebug、Wireshark、SQL Power Injector、OWASP SQLiX
- 驗收測試框架:RSpec、Cucumber、Whatever、Capybara、FitNesse
- 腳本語言:Python、Ruby、shell
- 缺陷跟蹤:BUGtrack、JIRA、GitHub、MantisBT
- 日誌管理:ELK、Logentries、Logstash、CollectD、StatsD、Logz.io(ELK)、Splunk、Sumo Logic
- 系統監控、警告&分析:Graphite、Icinga、Nagios、PagerDuty、Solarwinds、Ganglia、Sensu、Zabbix、AWS CloudWatch、Kibana、ElasticStack(Elasticsearch、Kibana、Logstash以及Beats等)
- 性能監控:AppDynamics、Datadog、DynaTrace、New Relic、Splunk
- 壓力測試:JMeter、Blaze Meter、loader.io
- 預警:PagerDuty、pingdom、廠商自帶如AWS SNS
- HTTP加速器:Varnish
- 基礎環境:RouterOS、VNware ESXi、FreeNAS、OpenLDAP
- 消息總線:ActiveMQ、SQS
- 應用服務器:Tomcat、JBoss
- Web服務器:Apache、Nginx、IIS
- 數據庫:MySQL、Oracle、PostgreSQL等關係型數據庫;cassandra、MongoDB、redis等NoSQL數據庫
- 項目管理:禪道、Jira、ActiveCollab、Asana、Taiga、Trello、Basecamp、PivotalTracker、VersionOne
- 知識管理:MediaWiki、Confluence。
3.6小結
要將軟件測試上升到「基礎設施」的高度,包括自動化測試框架、網絡、測試機器、測試工具等,造成團隊至整個公司共享的分佈式軟件測試平臺或雲計算測試服務平臺,能提供各類測試服務:
- 測試計劃、測試用例、測試數據等管理
- 能開發、調試和運行自動化測試腳本
- 執行各類測試,包括功能測試、性能測試和安全性測試
- 呈現測試結果、缺陷和質量狀態,及時瞭解項目的測試狀態
- 支持持續jicheng、持續發佈,和研發流程能集成起來
- 和運維能集成起來,能夠開展在線測試、日誌分析、甚至收集用戶的反饋