banner
武大胆

武大胆

不能为这个世界留下些什么,但是却想在这个世界留下些什么!
bilibili
x
discord user
email
steam

测试篇-App测试综述

App 技术架构#

一个典型的 App 技术架构分为 客户端(Client) 和 服务端(Server) 两部分,通过 网络通信 实现数据交互。以下是分层架构示意图:

image

客户端技术架构#

客户端分层#

  • UI 层(View)

    • 负责界面渲染和用户交互。
    • 技术实现
      • Android:XML 布局 + Jetpack Compose(声明式 UI)。
      • iOS:Storyboard/SwiftUI。
      • 跨平台:Flutter(Dart)、React Native(JavaScript)。
  • 业务逻辑层(ViewModel/Presenter)

    • 处理业务逻辑、数据转换和状态管理。
    • 技术实现
      • Android:ViewModel + LiveData。
      • iOS:Combine 框架(Swift)。
      • 跨平台:Bloc 模式(Flutter)、Redux(React Native)。
  • 网络层(Repository/DataSource)

    • 封装 API 请求、缓存策略和错误处理。
    • 技术实现
      • Android:Retrofit + OkHttp。
      • iOS:Alamofire(Swift)或 URLSession。
      • 跨平台:Dio(Flutter)、Axios(React Native)。
  • 本地存储层(Local Storage)

    • 管理本地数据持久化。
    • 技术实现
      • SQLite:Room(Android)、Core Data(iOS)。
      • 键值存储:SharedPreferences(Android)、UserDefaults(iOS)。
      • 文件存储:File System API。

客户端技术栈#

平台开发语言主流框架 / 工具
Android 原生Kotlin/JavaJetpack、Retrofit、Glide、Room
iOS 原生Swift/Obj-CSwiftUI/UIKit、Alamofire、Core Data
跨平台Dart/JSFlutter、React Native、Ionic

服务端技术架构#

服务端分层#

  • API 网关层(API Gateway)

    • 统一入口,处理路由、鉴权、限流和日志。
    • 技术实现:Nginx、Kong、Spring Cloud Gateway。
  • 业务逻辑层(Application Layer)

    • 实现核心业务逻辑(如订单处理、用户管理)。
    • 技术实现
      • Java:Spring Boot、Micronaut。
      • Python:Django、FastAPI。
      • Node.js:Express、NestJS。
      • Go:Gin、Echo。
  • 数据存储层(Data Storage)

    • 持久化数据存储与查询。
    • 技术实现
      • 关系型数据库:MySQL、PostgreSQL。
      • 非关系型数据库:MongoDB、Redis(缓存)。
      • 大数据存储:HBase、Elasticsearch(搜索)。
  • 消息队列与异步处理

    • 解耦高并发任务(如邮件发送、订单异步处理)。
    • 技术实现:Kafka、RabbitMQ、Celery(Python)。
  • 微服务与容器化(可选)

    • 复杂系统拆分为独立服务,提升扩展性。
    • 技术实现:Docker、Kubernetes、gRPC。

服务端技术栈#

类型技术选型
开发语言Java、Python、Node.js、Go、C#
数据库MySQL、PostgreSQL、MongoDB、Redis
云服务AWS、阿里云、Firebase(Serverless)
监控与运维Prometheus(监控)、Grafana(可视化)

客户端与服务端交互流程#

典型交互流程(以用户登录为例)#

  1. 客户端发起请求

    • 用户输入账号密码,客户端通过 HTTPS 发送登录请求(POST /api/login)。
    • 数据格式:JSON(如 {"username": "user1", "password": "***"})。
  2. 服务端处理请求

    • API 网关验证请求合法性(如 IP 白名单、频率限制)。
    • 业务逻辑层校验账号密码,生成 Token(JWT)。
    • 数据库查询用户信息(MySQL SELECT * FROM users WHERE username = ?)。
  3. 服务端返回响应

    • 成功:返回 200 OK + Token 及用户数据。
    • 失败:返回 401 Unauthorized + 错误码。
  4. 客户端处理响应

    • 解析响应数据,存储 Token 至本地(SharedPreferences/Keychain)。
    • 跳转至首页,更新 UI 状态。

通信协议与数据格式#

  • 协议:HTTP/HTTPS(RESTful API)、WebSocket(实时通信)。
  • 数据格式:JSON(主流)、Protocol Buffers(高性能场景)。
  • 安全机制:JWT 鉴权、OAuth 2.0(第三方登录)、SSL/TLS 加密。

App 测试#

测试流程#

  1. 需求分析阶段

    • 明确测试目标:理解功能需求、用户场景和非功能性需求(如性能、安全)。
    • 编写测试需求文档:确定测试范围、优先级和验收标准。
  2. 测试计划阶段

    • 制定测试策略:确定测试类型(功能、性能、兼容性等)、资源分配和时间表。
    • 风险评估:识别潜在风险(如设备碎片化、网络环境差异)并制定应对方案。
  3. 测试用例设计

    • 根据需求编写测试用例,覆盖正向、逆向场景和边界条件。
    • 使用等价类划分、边界值分析、场景法等设计方法。
  4. 测试环境搭建

    • 准备硬件设备(真机、模拟器)、网络环境、测试数据和工具链。
  5. 测试执行

    • 按优先级执行测试用例,记录测试结果和缺陷。
    • 分阶段进行:冒烟测试 → 功能测试 → 回归测试 → 验收测试。
  6. 缺陷管理

    • 使用工具(如 JIRA、Bugzilla)跟踪缺陷生命周期(提交→修复→验证→关闭)。
    • 分析缺陷分布,优化测试重点。
  7. 测试报告与总结

    • 输出测试报告:覆盖率、缺陷统计、风险分析和改进建议。
    • 复盘测试过程,优化后续测试策略。

测试方法#

  1. 黑盒测试

    • 关注输入输出,不涉及内部代码逻辑。
    • 典型方法:功能测试、用户体验测试、安装卸载测试。
  2. 白盒测试

    • 基于代码逻辑设计用例,覆盖分支、路径和条件。
    • 常用技术:代码覆盖率分析(如 JaCoCo)、静态代码检查(如 SonarQube)。
  3. 灰盒测试

    • 结合黑盒与白盒,通过接口或日志分析定位问题。
  4. 专项测试类型

    • 功能测试:验证核心功能(如登录、支付)是否符合需求。
    • 性能测试:响应时间、内存 / CPU 占用、启动速度(工具:GT、PerfDog)。
    • 兼容性测试:覆盖不同设备、OS 版本、屏幕分辨率、网络环境(工具:Firebase Test Lab)。
    • 安全测试:数据加密、权限管理、漏洞扫描(工具:OWASP ZAP、Burp Suite)。
    • 用户体验测试:界面易用性、交互流畅度、多语言支持。
    • 安装卸载测试:安装包大小、升级覆盖、残留文件清理。
    • 接口测试:验证 API 调用和数据传输(工具:Postman、Charles)。
    • 回归测试:自动化脚本覆盖主流程,确保新版本无回退问题。

测试技术#

  1. 自动化测试

    • UI 自动化:Appium(跨平台)、Espresso(Android)、XCUITest(iOS)。
    • 接口自动化:RestAssured、Python Requests。
    • 性能自动化:JMeter、LoadRunner。
  2. 云测试平台

    • 使用 AWS Device Farm、Sauce Labs 等平台实现多设备并行测试。
  3. Monkey 测试

    • 通过随机事件(点击、滑动)检测崩溃和 ANR(工具:Android ADB Monkey)。
  4. A/B 测试

    • 对比不同版本的用户行为数据,优化功能设计(工具:Firebase A/B Testing)。
  5. 代码静态分析

    • 使用 Lint 工具检测代码规范、内存泄漏和潜在崩溃。
  6. 网络模拟工具

    • 模拟弱网、延迟、丢包(工具:Network Link Conditioner、Charles Proxy)。

测试环境#

  1. 硬件环境

    • 真机覆盖主流品牌(如 iPhone、华为、三星)和不同配置(CPU、内存)。
    • 模拟器 / 虚拟机:Android Studio 模拟器、iOS Simulator。
  2. 软件环境

    • 操作系统:Android(不同版本及定制 ROM)、iOS(最新及旧版本)。
    • 第三方依赖:SDK 版本(如 Google Play Services)、数据库兼容性。
  3. 网络环境

    • 测试不同网络类型(Wi-Fi、4G/5G)、弱网(2G / 高延迟)及离线场景。
  4. 数据环境

    • 准备测试数据:正常数据、异常数据(如超长文本、特殊字符)。
    • 数据隔离:避免测试数据污染生产环境。
  5. 持续集成(CI)环境

    • 集成 Jenkins、GitLab CI 等工具,实现自动化构建→测试→报告流程。
  6. 安全测试环境

    • 搭建沙盒环境,模拟中间人攻击、数据篡改等安全威胁。
加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。