`
timeson
  • 浏览: 146099 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

从项目开发到云端架构(07)

 
阅读更多

2.3.5           软件测试

2.3.5.1    测试步骤

       测试在项目开发中占据重要的阶段。按照软件工程的要求,系统上线前需要进行如下的测试阶段:

 

  • 单元测试:由模块开发者具体来实现,根据规范,service为对外暴露的接口,程序员需要保证自己提交的service模块所有的方法都是被测试覆盖的。
    • 程序员创建junit模块,利用maven工程区分的4个目录,测试内容放置在test目录下,其中代码放置在test/java下,配置信息放置在test/resource,该目录下的代码在作maven install的时候,是不会被打包在jar中。
    • 模块开发者起码为每个service方法提供1test方法,在创建service模块时,相应的junit api就要出具,所谓测试先行。此时的test api里面运行为成功,方便程序员在作maven install 生成jar包时,不会报错;如果在某个阶段需要1jar包,但servcie模块有异常,可以跳过测试来打包,指令:mvn install -Dmaven.test.skip=true
    • Servciejunit为正常后,代码允许提交,提交前,先请更新代码,如果有代码冲突,先解决冲突再提交代码。
    • 如果按照每个serviceapi1test api,测试代码覆盖率是很低的,因为serviceapi内部有if等条件分支情况,1test api是无法覆盖更多的路径。这需要开发经理根据项目情况,以及sonarimaven内部插件来检查测试覆盖率,根据具体情况安排程序员写更多的测试api。(maven集成了cobertura-maven-plugin,在生成site即可展现结果;snoar有类似的插件)
  • 集成测试
    • 开发团队开发团队需要搭建2个必要的环境,开发环境和测试环境,2个环境做到物理隔离,这样在作测试的时候,缺少的表和必要的数据就能很快的发现,并由唯一的人来统一配置。作为运营团队,需要有个和正式上线的产品同版本同数据库的环境,这部分在运营篇章阐述,这里忽略。
    • 开发是分层分模块,团队内部分人来协作的,所以当每个人提交各自的代码时候,单元测试能通过的模块在集成测试有可能失败,失败的原因有:
      • 缺少jar包,缺少配置文件和相关信息:提交相应文件,解决冲突
      • 缺少表和数据:提交给唯一的人进行控制,统一加表加数据并纳入版本控制
      • 接口不匹配:修改接口等,在提交
      • 返回报异常,报空指针等:缺数据,缺表,需要更新代码后重新跟踪代码。
    • 在集成测试分为本地集成和现场集成
      • 本地集成:也许本地没有第三方系统的test环境,需要进行模拟测试
        • 写虚拟api,模拟返回的数据和异常规范
        • 有的测试insert到特定的表,就假设测试成功
      • 现场集成:尽可能接第三方的test环境,达到系统真实可用
  • 压力测试
    • 压力测试是检测系统在模拟生产环境下的性能表现,是上线前的最后测试,主要检查内存泄漏,影响系统平稳运行的问题。
    • 压力测试从使用方式分为2种类型:白盒测试和黑盒测试
      • 白盒测试使用jprofile:由程序员来使用,项目开发中可以忽略,主要用于组件级别的开发
      • 黑盒测试采用loadrunnerjava多线程控制台程序:由测试人员使用,如果需要java控制台,则由程序员来提供给测试人员。
    • 压力测试从压测目的分为2种类型:持久压测和高峰压测
      • 持久压测:在长时间的持续压力对系统考验,主要是检查内存泄漏情况。根据在美盛的测试经验,如果是后台持续测试,采用loadrunnerloadrunner自身会随着时间的推移而对被测试目标的压力减小,而达不到测试目的,所以建议采用是多线程的java控制台测试方式,压力持续均衡,建议持久测试在24小时以上才有意义。
      • 高峰压测:找出系统的能支撑的并发高值,并不一定要找出系统最大值(崩溃值),并建议可以模拟互联网用户的使用场景,即请求具有波浪式,某个时间点具有高值,某个时间点是低值,波浪式驱动。这个在loadrunner有很好的支撑。
    • 压力测试从压测方式分为2种类型:web压测和后台压测
      • Web压测:之前没有loadrunner持久压测web的案例,无经验可循;高峰测试可采用loadrunner工具。
      • 后台压测:在高峰测试的时候采用loadrunner的工具即可;在持久测试采用java控制台方式。

 

 

2.3.5.2    测试方式

结合maven进行测试

       管理者的角度看到测试,关心的是更高层面和整体的测试结果,为此测试环境提供了2种类型测试方法,每种方法都有若干测试工具,并可被mavensonar分别集成。通过manve集成的测试环境,对于项目经理可能更加贴近,因为能出具整体的项目代码的测试报告;而通过snoar集成的测试环境,对于技术经理更加适用,因为能在浏览器中模拟出可视化界面,并提供程序员之间的代码review

 

  • 静态方法是指不运行被测程序本身,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性。包括:Checkstyle,PMD/CPD, Findbugs等工具。对需求规格说明书、软件设计说明书、源程序做结构分析、流程图分析、符号执行来找错。静态方法通过程序静态特性的分析,找出欠缺和可疑之处,例如不匹配的参数、不适当的循环嵌套和分支嵌套、不允许的递归、未使用过的变量、空指针的引用和可疑的计算等。静态测试结果可用于进一步的查错,并为测试用例选取提供指导。
  • 动态方法就是通过运行软件来检验软件的动态行为和运行结果的正确性,包括:Cobertura, Clover,Surefire软件。目前,动态测试也是公司的测试工作的主要方式。

 

 

sonar集成

       Sonar 是一个用于代码质量管理的开放平台。通过插件机制,Sonar 可以集成不同的测试工具,代码分析工具,以及持续集成工具。

       与持续集成工具(例如 Hudson/Jenkins 等)不同,Sonar 并不是简单地把不同的代码检查工具结果(例如 FindBugsPMD 等)直接显示在 Web 页面上,而是通过不同的插件对这些结果进行再加工处理,通过量化的方式度量代码质量的变化,从而可以方便地对不同规模和种类的工程进行代码质量管理。

 

Sonar 为代码的质量管理提供了一个平台,对传统的代码静态检测如 PMDFindBugs 等工具进行整合,可以说是目前最强大的代码质量管理工具之一。

       mavenpom.xml已经做好了和sonoar的集成,只要架构师和开发经理在项目的控制台里执行:mvn sonar:sonar,结果就会导入到sonar的平台。为项目review和代码质量改进提供坚实的依据。

 

 

 

2.3.5.3    测试平台

 

 



 

23-03:测试框架架构

主要部件如下:

 

  • Jenkins:基于Java开发的一种持续集成工具,用于监控秩序重复的工作,包括持续的软件版本发布/测试项目和监控外部调用执行的工作。
  • Builder:项目构建工具,包括前端war构建和后端jar构建。这里采用的是Maven工具。Maven 包含一个生命周期,Maven 会有序执行一系列的步骤,从而完成特定任务的构建。
  • 测试环境:是测试平台的核心,包括了脚本管理,压力模拟,测试规则等组成部分。其中web端测试环境,后端测试环境以及移动端测试环境由环境管理服务器(使用puppet语言)来创建,管理,销毁。具体来说:
    • 脚本管理:分为前端脚本和后端脚本,前端脚本借助Selenium产生脚本,并均置于版本的控制之中。后端脚本结合junit单元测试,并产生测试结果。
    • 测试规则:不同的环境测试和测试业务的需求有所差别,根据不同的测试目的设定不同的测试要求,更加灵活的支撑全网各类项目的差异化需求。
    • 压力模拟:在功能测试完毕后,需要对待上线系统进行一次模拟多人并发访问的测试,其本质就是发起多条线程同时连接到待测应用,并纪录其结果。
  • 环境配置管理:全网项目众多,各种服务和环境千差万别,需要有统一的环境配置,并能提供标准的环境的生命周期管理,提供通用的服务,比如tomcatmysql等,并通过脚本能完成一些环境初始化工作,通过自动化部署,减少人工部署的繁琐和差错。

 

 

 

测试流程

 

  • 外部系统或定时调度驱动jenkins发起一次测试任务;
  • Jenkins执行外部命令:为该测试生成测试环境,典型的为基于虚拟机的tomcat+mysql的环境。
  • Jenkins执行项目构建命令:mavensvn获取指定版本的代码软件,通过项目构建生成jar包和war包,并部署到之前生成的测试环境中。
  • 测试环境包括了脚本管理模块,测试规则模块,压力测试模块等。
    • 脚本管理根据测试特点,从测试规则中匹配规则,对脚本进行修正和优化。如果是web页面测试,此前没有录入脚本,需要在这里录入脚本;如果之前已有脚本且不需要修改,直接沿用已有脚本。
    • 根据测试的要求,启动压力模拟,产生一定数量的线程,并对结果进行纪录和统计。
    • 产生的结果保存,并反馈给统计报表服务器,供用户查阅。
  • 如果测试合格,可以经由环境管理服务器去配置生产环境,并把当前版本软件部署到生产环境。

 

 

 

上一篇 从项目开发到云端架构(06)  :http://timeson.iteye.com/blog/1685862
下一篇 从项目开发到云端架构(08)  :http://timeson.iteye.com/blog/1686284

  • 大小: 53.6 KB
1
0
分享到:
评论
1 楼 iilover 2014-01-29  
你好,写得很好,学习了,请问能将《云端平台的设计和实现》《云端平台的运营和管理》《云端平台的资源虚拟化》这三篇分享一下吗?发到我的邮箱:happyboy090909@163.com,大家多多交流,谢谢!

相关推荐

    模拟云端系统项目

    【模拟云端系统项目】是一个综合性的IT项目,它结合了前端和后端技术,旨在构建一个功能完善的云端应用。...这样的项目实践能帮助开发者深入理解云端应用的开发流程和架构设计,提升在分布式系统中的实战能力。

    云端第三代系统开发

    在当前数字化时代,"云端第三代系统开发"是一个重要的议题,它涉及到如何利用先进的技术构建高效、易用且灵活的云服务平台。在这个系统开发过程中,Java作为主要编程语言扮演着核心角色。下面我们将深入探讨这个话题...

    云端系统源码第二版

    云端系统源码第二版是一个...综上所述,云端系统源码第二版是一个涉及多方面技术和实践的综合项目,涵盖了从底层基础设施到上层应用服务的全方位设计。深入理解和掌握这些知识点对于开发、运维和管理云端系统至关重要。

    android基于webservice云端运用最新代码EasyEnglish

    在Android开发中,结合Web服务(Webservice)可以实现丰富的云端功能,比如数据同步、远程API调用等。"android基于webservice云端运用最新代码EasyEnglish"是一个示例项目,展示了如何在Android应用中集成Webservice...

    wiki云端知识库平台项目

    以上内容仅是对“wiki云端知识库平台项目”可能涉及的技术栈和概念的一个概述,具体实现可能根据开发团队的选择和技术栈有所不同。对于学习者来说,深入理解并掌握这些知识点,将对个人的技能提升和未来职业发展...

    鸿蒙Linux+项目文档+开发工具+harmonyOS+在线开发地址.rar

    综上所述,这个压缩包是鸿蒙OS开发者的一站式资源库,涵盖了从系统底层到应用开发的各个环节,对于想要涉足鸿蒙OS领域的开发者而言,是一个宝贵的资料集合。通过深入学习和实践,开发者可以更好地掌握鸿蒙OS的开发...

    自制云端脚本获取器

    “云端”意味着它涉及到云存储或云计算的服务。“脚本”指的是可执行的代码文件,如JavaScript、Python等,可能是网页脚本或者其他类型的程序。“获取器”和“下载器”则说明了工具的功能,即获取并下载云端的脚本...

    C#项目开发全程实录-源代码

    通过研究这些源代码,初学者可以学习到实际项目开发中的最佳实践,而有经验的开发者则可以借鉴其中的设计模式和问题解决策略。无论是独立学习还是团队协作,这个资源都能提供宝贵的经验和洞察。

    悟空项目管理-基于Spring Cloud Alibaba微服务架构 +vue ElementUI的前后端分离项目管.zip

    9. **部署与运维**: 项目可能还包含了部署和运维相关的文档,例如Dockerfile或者Kubernetes配置,帮助开发者将应用部署到云端或本地环境。 这个项目不仅提供了实际的代码实现,还可以作为学习微服务架构、前后端...

    SRA2021-G03-项目开发计划1.81

    总结,SRA2021-G03-项目开发计划1.81是一个旨在构建云端知识库APP的详尽蓝图,涵盖了项目从需求分析到实施、测试、上线及后续维护的全过程。通过这个计划,团队能够有序地进行开发工作,确保知识库应用能高效、安全...

    云计算系统架构文档 汇总上

    DevOps 从云端到地面 熊节 pdf DevOps 让持续交付成为可能 乔梁 pdf eBay技术平台:掌控十亿级交易数据 Tony Ng pdf Facebook大数据实时分析案例分享 Uri pdf Java EE 7 平台:应云而生 Tyler Jewell pdf JS ...

    JSP+SSM项目-云端学习系统的Java毕业设计.rar

    JSP+SSM项目-云端学习系统的Java毕业设计.rar 【项目技术】 开发语言:Java 框架:ssm+jsp 架构:B/S 数据库:mysql 【演示视频-编号:345】 https://pan.quark.cn/s/b3a97032fae7 【实现功能】 端学习系统在...

    SRA2021-G03-项目开发计划1.71

    【SRA2021-G03-项目开发计划1.71】是关于一...总之,"SRA2021-G03-项目开发计划1.71"是一个全面的项目管理文档,它涵盖了项目从启动到完成的所有关键环节,旨在确保团队高效协作,成功开发出满足需求的云端知识库APP。

    构筑大语言模型应用:应用开发与架构设计.zip

    《构筑大语言模型应用:应用开发与架构设计》是一份深度探讨大语言模型在实际应用中的开发和架构设计的资源集合。这份资料来源于GitHub上的开源项目phodal/aigc,旨在帮助开发者理解和利用大语言模型的技术,提升...

    SAAS架构设计模式SAAS架构设计模式

    它的出现是为了解决软件开发和维护的成本问题,通过将软件部署到云端,提供基于互联网的软件服务,用户可以通过互联网访问和使用软件。 SAAS 架构设计模式的优势包括: 1. 用户方面:拿来即用,无须维护,按需使用...

    Android-物联网环境监测数据中心-物联网项目开发

    在物联网项目开发中,可能还需要特定的物联网协议解析或设备模拟插件。 3. **物联网架构**: 物联网环境监测系统通常包含传感器节点、网关和云端平台三个部分。传感器节点负责采集环境数据,如温度、湿度、光照等...

    Android项目开发报告 (2).pdf

    总结,本Android项目开发报告全面展示了项目开发的各个方面,从底层的平台架构到上层的功能实现,再到数据库和项目组织,为开发者提供了清晰的开发指南。通过这样的报告,不仅可以评估项目的成熟度,也便于团队协作...

    微信小程序项目源码云开发cloudtest.zip

    9. **版本控制**:在项目开发过程中,版本控制非常重要。微信开发者工具允许开发者进行代码版本管理,便于团队协作和回滚更改。 10. **发布与更新**:完成开发后,开发者可以在微信开放平台上提交审核,待审核通过...

    基于 Hyperf v2.1+VUE Primen 开发的号卡分销系统,号卡系统,物联网卡系统,saas云端智能架构.zip

    基于PHP、MySQL等技术构建的web系统,框架,PHP学习,课程设计作业,可用于毕业设计,源码项目,可直接运行,实测! 基于PHP、MySQL等技术构建的web系统,框架,PHP学习,课程设计作业,可用于毕业设计,源码项目,...

Global site tag (gtag.js) - Google Analytics