持续集成、自动化测试进一步要求软件研发有一个良好的环境支撑,即本章要讨论的基础设施,包括虚拟技术与Docker技术、基础设施即代码、持续集成环境、单元测试TA框架、系统测试TA框架、验收测试TA框架(包括需求实例化与BDD框架)、DevOps工具链等。
3.1虚拟机与容器技术
虚拟机
- 大大提高服务器利用率
- 从数据中心空间、机柜、网线、耗电量、空调等方面大大节省维护费用
- 能快速完成虚拟机的环境安装和恢复
- 标准化环境和改进安全,包括高级备份策略,在更少冗余的情况下,确保高可用性,容易实现添加、移动、变更和重置服务器的操作
- 通过部署在刀片式(机架式)服务器上的虚拟中心来管理虚拟和实体主机,建立一个逻辑的资源地,连续地整合系统负载,进而优化硬件使用率和降低成本
容器
- 镜像体积更小,只包括应用软件系统和所依赖的环境
- 创建和启动更快,不需要启动Guest OS
- 层次更高,降低额外资源开销,资源控制粒度更小,部署密度更大
- 使用的是真实物理资源,因此不存在性能损耗
3.2基础设施即代码
云平台要求具有良好的可伸缩性(弹性),可以动态、灵活地分配各个项目所需的资源(存储能力、计算能力、传输能力等)。
- 一切都是API,环境的安装、升级和配置都通过API调用方式实现。
- 基础设施即代码(Infrastructure as Code,IaC),通过机器可读定义文件管理和配置计算数据中心的过程,而不是物理硬件配置或交互式配置工具,即可以在版本控制系统中使用脚本或声明性定义来描述资源的配置。
IaC的价值可以分解为3个可度量的类别:环境维护成本、速度和风险。可分为三类:复用性、一致性、快速反馈、可视性。
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、持续发布,和研发流程能集成起来
- 和运维能集成起来,可以开展在线测试、日志分析、甚至收集用户的反馈