测试技术体系

一. 测试技术体系简介

软件技术体系(Software Technology Stack)是指在软件开发过程中所使用的各种技术和工具的组合。一个完整的软件技术体系包括编程语言、开发框架、数据库、服务器、版本控制工具、开发工具以及测试工具等。


二、软件技术体系价值

  • 提高测试效率

  • 提高测试质量

  • 促进团队协作

  • 提高就业竞争力


三、软件测试分类基础概念

软件测试是一项重要的工作,目的是检查软件是否正常运行、是否稳定可靠。为了更好地发现问题,人们会根据不同的目的和标准,把软件测试分成多种类型。了解这些不同的测试方法,可以帮助测试人员从多个角度检查软件,及时发现并解决潜在问题,从而提高软件的质量,让用户使用起来更加放心和满意。

1 软件测试分类

1.1 按开发阶段分类

  • 单元测试: 测试代码的最小单元,如函数或方法,确保它们按照预期工作。通常由开发人员编写和执行。

  • 集成测试: 测试多个单元之间的接口和交互,确保它们能够协同工作。

  • 系统测试: 对整个系统进行测试,验证系统是否符合需求规格说明书。

  • 验收测试: 由最终用户或客户进行的测试,以确定系统是否满足业务需求和可交付标准。

系统测试分类
  • 功能测试: 验证系统的每个功能是否按照需求规范运行。

  • 兼容性测试: 验证系统在不同环境、操作系统、浏览器和设备上的兼容性。

  • 性能测试: 评估系统的性能表现,如响应时间、吞吐量和资源使用情况。

  • 安全测试: 识别系统中的安全漏洞,确保系统能够抵御攻击。

验收测试分类
  • α 测试: 由内部人员在开发环境中进行的测试,主要在软件开发的早期阶段进行。

  • β 测试: 由实际用户在真实环境中进行的测试,通常在软件发布之前进行,以获取用户反馈。


1.2 按是否查看代码分类

  • 黑盒测试: 测试人员不关注代码内部结构,只关注输入和输出。测试用例基于需求和功能规格设计。

  • 灰盒测试: 结合黑盒测试和白盒测试的方法,测试人员了解一些代码内部结构,但主要关注输入和输出。

  • 白盒测试: 测试人员需要了解代码的内部结构,测试覆盖代码的不同路径和条件。

黑盒测试
  • 又称数据驱动测试。

  • 完全不考虑程序内部结构和内部特性。

  • 注重于测试软件的功能需求。

  • 只关心软件的输人数据和输出数据。

白盒测试
  • 研究产品内部的源代码和程序结构。

  • 单元测试就是白盒测试的一种。

灰盒测试
  • 灰盒测试的核心在于测试人员对被测系统拥有部分、有限的内部知识。这些知识可能包括:

    • 系统架构图、组件交互方式
    • 数据库表结构、数据流向
    • API接口定义和协议
    • 关键算法或业务逻辑的概要
  • 测试人员利用这些信息,从用户角度出发,设计出比纯黑盒测试更深入、更有针对性的测试用例,但并不像白盒测试那样深入到逐行代码的层面。


1.3 按测试执行方式分类

  • 静态测试:静态测试是在不运行程序代码的情况下进行的测试,通过检查代码、文档和设计等来发现潜在的问题。(代码审查、静态分析、走查、技术评审、同行评审等。)

  • 动态测试:动态测试是在运行程序代码的情况下进行的测试,通过实际执行代码来验证软件的功能和性能。(单元测试、集成测试、系统测试、验收测试等。)


1.4 按是否手工执行划分分类

  • 手工测试: 由测试人员手动执行测试用例,适用于探索性测试和一些复杂的测试场景。

  • 自动化测试: 使用测试工具和脚本自动执行测试用例,适用于重复性高、容易自动化的测试。


1.5 其他分类

  • 冒烟测试:冒烟测试是对软件进行的一种初步测试,用来确保软件的基本功能正常工作。其目的是在更深入的测试之前,验证软件的主要功能是否能正常运行,确保软件没有重大问题或崩溃。
  • 回归测试:回归测试是在软件修改后进行的测试,以确保新代码的变更没有引入新的缺陷或破坏已有功能。其目的是验证修改后的系统仍然符合原有的需求和功能。
  • 随机测试:随机测试是一种测试方法,通过随机生成输入数据或随机选择操作来测试软件系统。其目的是发现系统在非预期输入下的行为和潜在问题。
  • 探索性测试:探索性测试是一种非正式的、同时进行测试设计和执行的测试方法。测试人员根据自己的经验和直觉,在测试过程中不断调整和设计新的测试用例,动态探索软件系统的行为和缺陷。

2 分层测试体系

分层测试体系是一种系统化的测试方法,将测试过程划分为多个层次或阶段,每个层次针对特定的测试目标和需求进行测试。这样可以确保软件质量,通过多层次的测试全面覆盖各种测试场景和需求。

2.1 自动化分层测试体系

自动化测试分层可以理解为将测试任务划分为多个层次,每个层次专注于不同的测试任务和范围。通过这种分层方式,测试人员能够更有效地管理和组织测试工作,确保测试的全面性和准确性。

  • 70% 单元测试
  • 20% 服务测试
  • 10% 用户界面测试
  • 1.低层测试高频率: 根据测试金字塔模型,低层次的测试(如单元测试)应当更频繁地执行,因为这些测试运行速度快且能够以较低的成本发现问题。随着测试层级的提升,测试的频率可以逐步降低。
  • 2.早期测试策略: 测试应当尽早开始,以便尽快发现问题。这意味着在代码编写阶段就要开始进行单元测试,确保早期捕捉和解决缺陷。
  • 3.全面覆盖测试: 每个层次的测试都需要全面覆盖其关注的方面。例如,UI 测试应覆盖所有用户界面元素,系统测试则应覆盖所有业务逻辑,确保所有功能都经过充分测试。
  • 4.测试独立性原则: 各层次的测试应保持独立,不依赖其他层次的测试。单元测试应只关注被测单元,不应依赖于UI或数据库等其他组件,以确保测试的准确性和可维护性。

单元测试
  • 执行单元测试框架:

    • Java:
      • JUnit: JUnitJava 最流行的单元测试框架之一,用于编写和运行重复的测试。它提供了许多有用的注解和断言方法。
      • TestNG: TestNG 是一个功能强大的测试框架,设计灵活,支持单元测试、集成测试和端到端测试。
    • Python:
      • unittest: unittestPython 的内建单元测试框架,灵感来自于 JUnit,提供了编写和执行测试的基本工具。
      • pytest: pytest 是一个流行的 Python 测试框架,以其简洁的语法和强大的功能而著称。它支持更复杂的测试需求和插件。

接口测试

什么是接口?

软件分为前端和后端,前端负责视觉页面展示,也就是用户可以看到的部分,后端负责提供数据和业务逻辑处理,也就是接口。接口全称是 Application Programming Interface ,一般称作 API ,通常以Http或者Https的形式存在。
而接口就是一套前后端交互的"规则"或"契约"。它规定了两个不同的软件程序、系统或组件之间,应该如何互相沟通、传递数据。
接口测试是什么?

通过Http或者Https对api 是针对软件对外提供服务的接口的输入输出进行测试。检查接口参数传递的正确性,接口功能实现的正确性,输出结果的正确性,以及对各种异常情况的容错处理的完整性和合理性。
选择合适的工具可以帮助更高效地进行接口测试,确保 API 的功能、性能和安全性。

  • 执行接口测试的相关工具:

    • Charles :Charles 是一款 HTTP 代理工具,提供了流量监控和调试功能。可以用来捕获、分析和修改 HTTPHTTPS 请求。
    • Fiddler :Fiddler 是一个功能强大的 HTTP 调试代理,可以捕获和分析网络流量。
    • postman : Postman 是一个流行的 API 客户端,用于设计、测试和文档化 API。
    • Jmeter :JMeter 是一个开源的负载测试工具,可以用于性能测试和功能测试。
    • loadRunner :LoadRunner 是一个企业级负载测试工具,用于测试应用程序的性能和可伸缩性。
  • python 提供的接口操作库:

    • Requests: requests 是一个流行的 Python HTTP 库,用于发送 HTTP 请求和处理响应。

      • 代码示例

        python 复制代码
        import requests
        
        # 1. 构造 GET 请求,并带上查询参数
        params = {'city': '成都'}
        response = requests.get('https://api.example.com/weather', params=params)
        
        # 2. 打印状态码和解析后的 JSON 数据
        print(f"状态码: {response.status_code}")
        print(f"天气数据: {response.json()}")
    • HttpRunner: HttpRunner 是一个基于 Python 的开源 API 测试工具,支持接口测试、性能测试和测试自动化。HttpRunner 的核心优势是无需写复杂的 Python 代码,只需编写一个清晰的 YAML 文件就能定义完整的测试用例,非常适合在 CI/CD 流水线中运行

      • 代码示例

        python 复制代码
        # testcase_add_pet.yml
        config:
            name: 新增宠物接口测试
            base_url: https://petstore.swagger.io
        
        teststeps:
        -   name: 新增一只名为旺财的宠物
            request:
                method: POST
                url: /v2/pet
                headers:
                    Content-Type: application/json
                json:
                    id: 1
                    name: 旺财
                    status: available
            validate:
                - eq: ["status_code", 201]          # 验证状态码
                - eq: ["body.name", "旺财"]         # 验证返回的宠物名字
        • (在命令行运行 hrp run testcase_add_pet.yml 即可执行测试并生成 HTML 报告)
  • Java 提供的接口操作库:

    • HttpClient: HttpClient 是 Apache 提供的一个用于发送 HTTP 请求和处理响应的 Java 库。

      • 代码示例

        java 复制代码
        import org.apache.http.client.methods.CloseableHttpResponse;
        import org.apache.http.client.methods.HttpGet;
        import org.apache.http.impl.client.CloseableHttpClient;
        import org.apache.http.impl.client.HttpClients;
        import org.apache.http.util.EntityUtils;
        
        public class WeatherClient {
            public static void main(String[] args) throws Exception {
                // 1. 创建 HttpClient 实例
                try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
                    // 2. 构造 GET 请求 (假设这是一个模拟的天气接口)
                    HttpGet httpGet = new HttpGet("https://api.example.com/weather?city=成都");
                    
                    // 3. 执行请求并获取响应
                    try (CloseableHttpResponse response = httpClient.execute(httpGet)) {
                        // 4. 打印状态码和响应内容
                        System.out.println("状态码: " + response.getStatusLine().getStatusCode());
                        String body = EntityUtils.toString(response.getEntity(), "UTF-8");
                        System.out.println("天气数据: " + body);
                    }
                }
            }
        }
    • RestAssured: RestAssured 是一个用于 Java 的库,用于测试 RESTful Web 服务。

      • 代码示例

        java 复制代码
        import io.restassured.RestAssured;
        import static io.restassured.RestAssured.*;
        import static org.hamcrest.Matchers.*;
        
        public class PetStoreTest {
            public static void main(String[] args) {
                // 设置基础路径
                RestAssured.baseURI = "https://petstore.swagger.io";
        
                // 构造测试请求体
                String newPetJson = "{\"id\": 1, \"name\": \"旺财\", \"status\": \"available\"}";
        
                given()
                    .contentType("application/json")
                    .body(newPetJson)           // 设置请求头
                .when()
                    .post("/v2/pet")            // 当发送 POST 请求
                .then()
                    .statusCode(201)            // 那么验证状态码是否为 201
                    .body("name", equalTo("旺财")); // 且验证返回的 name 字段是否为"旺财"
            }
        }

UI测试

UI 测试(用户界面测试)是软件测试的一种类型,专注于验证应用程序的用户界面是否符合预期。它确保用户界面的各个方面,如布局、功能、交互、以及视觉效果,按照设计规范进行实现。

  • UI 测试方法

    • 人工方法:
      • 人工查看 :测试人员手动检查应用程序的用户界面,以确认所有元素(按钮、输入框、菜单等)是否按照需求规格正确显示和布局。
      • 人工操作 :测试人员手动执行操作(如点击、输入、滚动等),以验证用户界面的功能是否符合预期。
    • 自动化方法:
      • webSelenium适用于各种 Web 浏览器和操作系统。
      • appAppium适用于 Android 和 iOS 移动应用。
相关推荐
南境十里·墨染春水1 小时前
C++日志 2——实现单线程日志系统
java·jvm·c++
布吉岛的石头2 小时前
微服务网关统一鉴权、限流、日志实战
java·spring·微服务
易标AI2 小时前
标书智能体(五)——如何让弱模型也能稳定输出复杂json
人工智能·python·提示词·智能体·招投标
超级无敌葛大侠2 小时前
Redis主从复制
java·redis
Cyber4K2 小时前
【Python专项】Nginx访问日志分析时间范围处理示例
开发语言·python·nginx
周末也要写八哥3 小时前
代码中的注释的重要性(二)
开发语言·python
殷紫川3 小时前
90% Java 开发都踩过坑的 @Resource 与 @Autowired
java
XingshiXu3 小时前
【NWAFU×KUL】不打扰,也能看懂一头牛:非接触式技术正在改变精准畜牧
人工智能·python·深度学习·目标检测·机器学习·计算机视觉·目标跟踪