• 移动测试体系


    移动测试体系

    推荐书籍:

    《移动app性能评测与优化》腾讯出品

    《App研发录》包建强

    《移动App测试实战》

    目的:好的技术推动测试行业发展。

    前言

    移动互联网公司的简化架构

    质量目标

    质量目标-更好

             需求的正确性:

                       参与需求评审,明确需求,细化测试用例设计

                       测试中与产品经理协作

             实现的正确性:

                       业务功能实现

                       专项测试,性能,稳定性,安全

                       新老版本兼容性

    质量目标-更快

             项目测试流程保证

             持续集成+自动化+工具定制

             质量监控与快速反馈

    挑战

             多段测试:android IOS web hybrid

             诸多专项:新老版本兼容 多设备兼容 性能 安全等

             专项测试技术难度大

             技术生态不完善

             测试方法陈旧

             低质量的交付、单侧不充分、业务逻辑实现多端不一致

             迭代快时间和人力资源紧张

    内容大纲

             研发阶段的质量保证

             测试阶段的测试流程

             发布后的质量监控

    一、研发阶段的质量保证

    【代码提测之前】

    1.静态分析---测试

    2.单元测试---研发执行落地,测试 提供一个机制(jenkins)。测试分层:70%

    3.代码review(代码评审)----研发 测试工程师能力要求,发现问题效果好,问题的50%

    4.自测---研发,多了解,不要被开发忽悠。

    5.自动化冒烟测试---测试

     

    一、静态分析--测试

    综合性的代码分析平台

             Sonar支持自定义规则,较多的公司使用---就可以检查下面的质量指标。支持自定义规则。手机截图

             Xcode和android studio(IDE)的自带集成工具。

    独立的静态分析工具—功能:扫描代码里面的各种隐患

             Findbugs

             Pmd

             Androidlint

             Scan-build

    静态分析关注的质量指标

    技术债

             代码规范

             代码问题---主要原因。不严谨 编码解码 会有误报,要找出关键规则

    代码重复度---越低越好,一段代码copy多次,风险有问题后只fix一处,其他处没改。

    圈复杂度---代码分支结构,内部多层if else嵌套 可能路径多 单元测试无法全部覆盖,风险

    单测的覆盖率---已覆盖,未覆盖,发现测试不充分地方,补充测试。

     

    静态代码的在线规则库

    自定义规则

    https://docs.sonarqube.org/display/DEV/Adding+Coding+Rules

    https://pmd.github.io/pmd-5.5.5/customizing/howtowritearule.html

    在线规则库

    360火线 http://magic.360.cn/

    FindBugs的规则库:http://findbugs.sourceforge.net/bugDescriptions.html

    研究规则,代码隐患,对以后分析问题有帮助。

     

    静态分析工具报告

    Jenkins集成的报告,扫描研发工程师每天提交的代码,当代码增加后,可以看得出来bug趋势。测试人员关注新增的严重的bug,找出隐患。手机截图

     

    二、单元测试--研发,测试搭jenkins

    单测研发主做,测试人员把流程搭建起来,进行快速反馈,通过jenkins每天跑单测用例。

    单测的可测性是单测成败的关键。

    合理的使用mock方法。

    建立良好的反馈机制

             jenkins 跟进【流程】测试人员把单元测试、静态分析都集成到jenkins中。用例管理。

             不要跳过测试执行---Dskip.test = true

     

    三、代码评审---最有效的质量保证手段

    防止烂代码、烂设计进入

    培养良好的代码习惯,知识和规范的传承

    借助标准的代码管理工具即可,比如gitlab的pr机制。

     

    四、自测----测试左移

    研发自测

             自查和自测试是负责的态度

             保证质量交付有助于缩短项目工期

    产品自测

             自动出包给产品

             评估产品流程和UI设计是否符合预期

     

    五、自动化冒烟测试---测试,保证提测的包不会存在低级问题

    自动打debug包

    自动化的冒烟测试手段

             前端项目--- case维护成本低        

                       Monkey健壮性测试

                       自动遍历+LeakCanary自动检测内存泄漏

                       基本的崩溃检测

                       基本的冒烟测试用例

             后端项目---接口测试

     

     二、测试阶段的测试流程

    测试准入

             自动对测试分支进行打包

             自动对测试分支进行测试

             打tag表示一个正式的提测版本

    移动端交付测试略

    内部交付

             内部测试用

             自动打包jenkins

             内部下载入口

     

    公测

    更快的手段测试包:fir.im  bugly服务,测试团队关注包的下载地址,一旦有新版本就测试。

     

    正式发布

             打包渠道包推送到各市场

             上传到app store

    内部App发布

             手机截图

     

    后端发布

    基于docker体系,省去了测试运维之苦

    内部编译和部署系统Rolling

    根据分支半自动部署环境

    后端升级自动触发接口测试

     

    测试体系

    一、客户端

    1.手工测试为主(每版本执行 成本大)

             测试组

             内测+公测:员工,产品达人,粉丝 

             灰度测试:应用市场No返回新版本Yes。比例控制 逻辑灰度:地域/年龄 逐步灰度

    手工测试依然是主角

             业务需求,交互,产品体验(工具+文档+人力)

    2.自动化测试

             (1)UI自动化测试

             (2)接口自动化测试:测试分层20%

             (3)自动遍历测试

    (1)UI自动化测试

    Android自动化测试-----手机截图

             Appium > Robotium > UI Automator

             Appium:跨平台IOS、android

    IOS自动化测试----手机截图

             Xcode8.0

             Appium>KIF(XCTest)---能力要求

    UI不足:

             复用率低:UI、流程变更。勿在浮沙筑高台。------能力:配置Object模型

             稳定性不足:-----能力:框架封装,避开80%干扰。失败重试,使case稳定

             容易被干扰

             执行慢 并发只能解决部分问题。

             技术生态不完善

    合理的UI自动化:

             侧重于主流程的回归测试

             控制规模

             降低编写用例的成本

             自动遍历+自动生成测试用例。

    (2)接口自动化测试:测试分层20%

    (3)自动遍历测试----配合UI自动化、monkey,三者配合。

    定义:通过不断遍历app中页面和路径尝试发现问题的方法

    优点:比UI自动化维护成本低、比Monkey更具可控性。(Monkey广泛应用于云测平台)。

    价值:

             ·验证UI的可用----浏览,兼容性

                       基本功能

                       兼容性

             ·自动化性能测试:结合OneApm,NewRelic界面切换速度、后端接口响应(代理技术也可以发现后端问题)。

             ·内存泄漏:借助LeakCanary(手工测试中,自动提醒发现内存泄漏)和MLeaksFinder(IOS)

    ·稳定性问题:长时间浏览,卡顿,崩溃问题。

    ·崩溃的分析与统计:Flurry  Bugly  Fabric SDK级,多了解集成,学会如何从Bugly上去找某一个用户的crash,取top10发给研发。分析平台数据的质量价值,堆栈信息。  

             ·UI Diff验证新老版本的功能差异

    百度:smartMonkey,在云测平台。

    腾讯:newMonkey,未开源。

    思寒开发的工具:appcrawler工具

             ·支持遍历控制,支持monkey,支持android和IOS,支持native和hybrid,支持微信和微信webview。

             ·自动遍历的报告:手机截图*3

             ·不足:验证码,短信验证搞不定,写数据,等交互的交给手动。

     

    3.专项测试(间或版本执行)

    (1)App端性能测试

             ·冷启动+热启动:响应时间

             ·界面切换和交互体验:FPS(流畅度)

             ·接口性能

             ·流量

             ·电量

             ·内存和CPU占用---后果,流畅度、crash、卡顿。

    性能分析自动化相关技术

             Adb:android   instrument:IOS

             录屏:逐帧分析加载过程

             H5:remote debug协议、ChromeF12工具。

    内存问题检测:

             问题:---crash,,卡顿

             测试手段:

                       开启LargeHeap

                       Android Studio的Monitor监控各种资源使用情况+MAT+LeakCanary

                       IOS+instruments套件(多指标监控)

                       优秀实践:自动遍历+ LeakCanary----全面发现内存问题

    公司内部Log分析、数据收集等平台,定位一些问题。

    (2)H5性能

    手机截图—google

             Webpagetest平台

                       多浏览器、多地域、可访问性、访问速度

             Hybrid的性能分析

             微信webview的性能分析----了解H5的渲染机制。

    H5性能关注指标

    统计指标:

             首字节时间

    传输时间

    白屏时间

    首屏时间

    策略(结合绿书p69

             数据压缩,,大数据不压缩,提bug

             Cache策略,关键资源大资源要做cache,不做提bug。

     

    (3)弱网测试---电梯、地铁

             弱网模拟:

                       树莓派(废弃)

                       代理工具:FiddlerCharlesBurpsuite

                       IOS开发者工具

             重要场景:

                       支持超时 网速 异常模拟,看app的反应!

                       可以篡改数据验证健壮性,比如字段类型和null类型(异常处理)

     

    (4)安全测试---能力

    端安全

    包的破解,反编译和重新打包

    包的关键api被hook篡改

    服务器安全

    接口业务安全,提交数据合法性

    数据安全,数据泄露和撞库风险---暴力拆解

    通用做法

    加强通用防护手段、请安全咨询团队

    Zap WVS等工具的自动化扫描

     

    (5)兼容性测试

    质量问题

    某些设备的安装失败、crash

    某些设备的功能不可用

    某些设备的UI错乱

    影响因素

    OS的版本间差异--Android4.0开始关注,IOS8.0开始关注

    Rom定制差异

    硬件差:GPU(游戏公司) CPU 内存 屏幕尺寸

    商业服务方案

    Testin---monkey,安装卸载

    MQC---阿里巴巴

    MTC---百度

    优测---腾讯

    私有部署方案

    OpenSTF 定制

    手机截图测试研发一起用,几十台手机,远程的交互,速度快,支持自动化adb开放出来,远程测试。

    Appium grid方案

     

     

    二、接口测试----合理分层测试(Unit>>Service>>UI)

    1.接口性能

    接口测试的范围和层次

    手机截图

    质量维度

    功能,保持新老版本的兼容--API

    性能,单次请求的响应跟总体的qps相关

    变更检测 字段缺失,字段的类型变更

    异常和健壮性测试

    质量体系

    构建接口层的快速稳定的质量保证体系

    构建接口监控体系---保证服务器接口对老版本用户的兼容。

    接口测试流程

    接口的范围---哪些接口要测试,top10访问。

    接口分析---输入输出

    接口测试框架---擅长的框架

    测试用例维护----写代码

    持续集成----jenkins

    质量监控

    接口测试框架

    Rest-assured优秀的接口测试开源方案---集大成者!!Python,java,ruby都可以调。

    Jmeter,性能测试工具,改进也可测接口。支持单测管理,实践较少。

    Gatling,性能测试工具,同上,与单测结合没有

    SOAPUI,接口测试工具,商业付费,方案臃肿,开源不积极

    PostMan,接口测试工具,手工测试,node.js开发的,不能构建接口测试体系,有问题。

    Swagger,javaAPI管理整体解决方案

    Capybara-json,ruby开发,类似七牛的接口测试方案

    定制化,定制化方案,基于各种语言自身的xUnit+httpclient封装。

    录制和自动生成测试用例---到StuQ接口测试去找

    推荐的接口测试落地手段

    选择优雅的接口测试框架

    录制+生成测试用例

    基于har或者tcpdump的数据源

    直接生成接口测试框架代码模板

    基于FiddlerCharles所提供的hal数据,直接生成接口测试的测试用例。

    数据驱动,excel yaml,维护简单。文件读取,提高效率,自动拼装测试数据。

    新老版本之间的接口对比分析

    结构对比---一个接口字段减少了,字段类型变更,会影响客户端。老版本出错。

    重构时的数据对比---检查服务端的返回数据不要发生变化。

    推荐开源的Rest-assured手机截图

    简约的接口测试DSL,get post请求的参数,清晰的API

    支持xml json的结构化解析

    支持xpath jsonpath gpath等多种解析方式

    对spring的支持,mock??

    Diff方案---能力,没讲

    Gor导流压测+Twitter的Diffy

    局限

    只支持get请求

    涉及资源太多 早期没有推起来

    接口测试框架Diff功能

    三、发布后的质量监控

    内测质量分析与监控

             OneAPM---SDK级别,监控平台,手工测试时帮我抓出app性能数据,定位性能问题       Bugly---监测崩溃SDK级别。

    NewRelic性能测试工具、SDK级别。

            

    整体测试流程

    持续交付流程

             自动化打包

             UI自动化测试

             半自动部署

             接口自动化

    项目测试流程

             2-4周迭代

             测试用例+测试报告

     

    不懂代开发的测试工程师生存空间越来越小。

    测试工程师首先是一个工程师,作为一个工程师如果你不懂一门开发语言,其实你称不上是一个工程师。人和电脑是通过开发语言进行沟通的,想说话一样。如果你不懂开发语言,你就不能指导计算机帮你去做事。

    手动+UI自动化+第三方工具+脚本。

    大量工具的使用:批量的测试数据的生成,分析等。

    学Python,学java,不要学Robot Framework局限。

     

    开发模式

    1.App是一个空壳,里面内嵌的webview,直接浏览在线网站。没有本地的东西,想浏览器一样。Url是远程。

    2.把所需要的资源放到本地解析,不做任何网络请求,直接访问本地的html,渲染出来。Url是本地。

    3.H5去做开发,但是输出给用户仍然是原生的控件,自动化框架可以解析。

    4.原生。

  • 相关阅读:
    【HDU1698】 Just a Hook 【线段树入门】
    【转载】线段树 区间合并 小结
    Codeforces 1138B(列方程枚举)
    Codeforces 1132G(关系转化树+dfn+线段树)
    Codeforces 1132E(转化+dp)
    Codeforces 1132D(二分模拟)
    Codeforces 1131G(dp)
    洛谷1941(dp)
    洛谷2758(字符串dp)
    Codeforces 1143B(思维、技巧)
  • 原文地址:https://www.cnblogs.com/vmorgen/p/testerhome.html
Copyright © 2020-2023  润新知