Chapter 3准备:基础设施与TA框架

Stella981
• 阅读 665

持续集成、自动化测试进一步要求软件研发有一个良好的环境支撑,即本章要讨论的基础设施,包括虚拟技术与Docker技术、基础设施即代码、持续集成环境、单元测试TA框架、系统测试TA框架、验收测试TA框架(包括需求实例化与BDD框架)、DevOps工具链等。

3.1虚拟机与容器技术

虚拟机

  • 大大提高服务器利用率
  • 从数据中心空间、机柜、网线、耗电量、空调等方面大大节省维护费用
  • 能快速完成虚拟机的环境安装和恢复
  • 标准化环境和改进安全,包括高级备份策略,在更少冗余的情况下,确保高可用性,容易实现添加、移动、变更和重置服务器的操作
  • 通过部署在刀片式(机架式)服务器上的虚拟中心来管理虚拟和实体主机,建立一个逻辑的资源地,连续地整合系统负载,进而优化硬件使用率和降低成本

容器

  • 镜像体积更小,只包括应用软件系统和所依赖的环境
  • 创建和启动更快,不需要启动Guest OS
  • 层次更高,降低额外资源开销,资源控制粒度更小,部署密度更大
  • 使用的是真实物理资源,因此不存在性能损耗

3.2基础设施即代码

云平台要求具有良好的可伸缩性(弹性),可以动态、灵活地分配各个项目所需的资源(存储能力、计算能力、传输能力等)。

  1. 一切都是API,环境的安装、升级和配置都通过API调用方式实现。
  2. 基础设施即代码(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类测试工具,差不多涵盖了整个软件研发与维护生命周期所需的全部工具。

  1. 代码管理(SCM):GitHub、GitLab、Bitbucket、Subversion、Coding、Bazza、JFrog Artifactory
  2. 构建工具:Ant、Gradle、maven
  3. 自动部署:Capistrano、CodeDeploy、Superviso、Forever
  4. 持续集成:Jenkins2.0及其Pipeline插件、Capistrano、BuildBot、Bamboo、Fabric、CircleCI、Teamcity、Tinderbox、Travis CI、flow.ci Continumm、Luntbuild、CruiseControl、Integrity、Gump、CodeFresh、CodeShip、Go
  5. 配置管理:Ansible、Bash、Chef、Cfengine、Puppet、Rudder、Rundeck、Saltstack、ScriptRock GuardRail、Vagrant
  6. 编排:Kubernetes(K8s)、Core、Apache Mesos、Rancher
  7. 微服务平台:OpenShift、Cloud Foundry、Mesosphere
  8. 服务开通:Puppet、Docker Swarm、Vagrant、Powershell、OpenStack Heat
  9. 服务注册与发现:Zookeeper、etcd、Consul
  10. 单元测试:JUnit、xUnit、Nexus、TestNG、Mocha
  11. 代码静态分析工具:Findbugs、C++Test、CppTest、IBM AppScan Source Edition、Fotify Static Code Analyzer、Visual Studio、Google's Closure Complier、JSHint、ychecker、PyCharm
  12. API测试:JMeter、Postman、SoapUI、Rest-Assured、Dubbo
  13. 功能测试:Selenium、CircleCi、Appium
  14. 性能测试:JMeter、Gradle、nGrider、Gatling、LoadRunner
  15. 安全性测试工具:IBM AppS can、OWASP ZAP、Coverity、Fortity SSC、Android Tamer、Firebug、Wireshark、SQL Power Injector、OWASP SQLiX
  16. 验收测试框架:RSpec、Cucumber、Whatever、Capybara、FitNesse
  17. 脚本语言:Python、Ruby、shell
  18. 缺陷跟踪:BUGtrack、JIRA、GitHub、MantisBT
  19. 日志管理:ELK、Logentries、Logstash、CollectD、StatsD、Logz.io(ELK)、Splunk、Sumo Logic
  20. 系统监控、警告&分析:Graphite、Icinga、Nagios、PagerDuty、Solarwinds、Ganglia、Sensu、Zabbix、AWS CloudWatch、Kibana、ElasticStack(Elasticsearch、Kibana、Logstash以及Beats等)
  21. 性能监控:AppDynamics、Datadog、DynaTrace、New Relic、Splunk
  22. 压力测试:JMeter、Blaze Meter、loader.io
  23. 预警:PagerDuty、pingdom、厂商自带如AWS SNS
  24. HTTP加速器:Varnish
  25. 基础环境:RouterOS、VNware ESXi、FreeNAS、OpenLDAP
  26. 消息总线:ActiveMQ、SQS
  27. 应用服务器:Tomcat、JBoss
  28. Web服务器:Apache、Nginx、IIS
  29. 数据库:MySQL、Oracle、PostgreSQL等关系型数据库;cassandra、MongoDB、redis等NoSQL数据库
  30. 项目管理:禅道、Jira、ActiveCollab、Asana、Taiga、Trello、Basecamp、PivotalTracker、VersionOne
  31. 知识管理:MediaWiki、Confluence。

3.6小结

要将软件测试上升到“基础设施”的高度,包括自动化测试框架、网络、测试机器、测试工具等,形成团队至整个公司共享的分布式软件测试平台或云计算测试服务平台,能提供各种测试服务:

  • 测试计划、测试用例、测试数据等管理
  • 能开发、调试和运行自动化测试脚本
  • 执行各种测试,包括功能测试、性能测试和安全性测试
  • 呈现测试结果、缺陷和质量状态,及时了解项目的测试状态
  • 支持持续jicheng、持续发布,和研发流程能集成起来
  • 和运维能集成起来,可以开展在线测试、日志分析、甚至收集用户的反馈
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Java服务总在半夜挂,背后的真相竟然是... | 京东云技术团队
最近有用户反馈测试环境Java服务总在凌晨00:00左右挂掉,用户反馈Java服务没有定时任务,也没有流量突增的情况,Jvm配置也合理,莫名其妙就挂了
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这