当前位置:首页  >  IT问答库  >  零基础学软件测试

软件测试学习笔记:5核心知识点_千锋教育

发布:cli 2026-07-01 17:23

推荐答案

引言

软件测试不仅是“找Bug”,更是质量保障的系统工程。本文梳理5个核心知识点,从理论到实践,帮助初学者快速搭建知识框架。

模块一:测试用例设计——等价类与边界值

为什么需要用例设计?

穷尽测试不可能。用例设计的目标是用最少用例覆盖最多有效场景。

核心方法:等价类划分+边界值分析

  • ►等价类:将输入数据划分为有效和无效两类,每类取一个代表值。
  • ►例:年龄输入框(1-100岁)
  • ►有效等价类:1-100
  • ►无效等价类:<1、>100、非数字字符
  • ►边界值:取边界两侧的值(上点、离点、内点)。
  • ►例:1-100的边界值包括:0、1、2、99、100、101

实战示例(测试Python的年龄验证函数):

python
# 被测函数
def validate_age(age):
    if not isinstance(age, int):
        return "输入必须为整数"
    if age < 1 or age > 100:
        return "年龄超出范围"
    return "有效"

# 测试用例(边界值)
test_cases = [0, 1, 2, 99, 100, 101, "abc", None]
for case in test_cases:
    result = validate_age(case)
    print(f"输入: {case} -> 结果: {result}")

输出结果:

text
输入: 0 -> 结果: 年龄超出范围
输入: 1 -> 结果: 有效
输入: 2 -> 结果: 有效
输入: 99 -> 结果: 有效
输入: 100 -> 结果: 有效
输入: 101 -> 结果: 年龄超出范围
输入: abc -> 结果: 输入必须为整数
输入: None -> 结果: 输入必须为整数

模块二:缺陷生命周期与管理

缺陷从发现到关闭的完整流程:

1. 发现:测试人员提交Bug报告

2. 确认:开发人员复现并确认

3. 分配:项目经理指派给对应开发

4. 修复:开发修改代码

5. 验证:测试人员回归测试

6. 关闭:验证通过后关闭

常见状态流转:

text
新建 → 已确认 → 已分配 → 已修复 → 已验证 → 已关闭
  ↑        ↓          ↓         ↓
  └──── 重新打开 ←── 修复失败 ←─┘

关键字段: 标题、优先级(P1-P4)、严重程度(致命/严重/一般/轻微)、环境、步骤、预期/实际结果。

模块三:自动化测试框架——Pytest入门

为什么选择Pytest?

  • ►简洁的断言语法
  • ►自动发现测试用例
  • ►丰富的插件生态

核心概念:

  • ►测试函数以test_开头
  • ►使用assert进行断言
  • ►夹具(Fixture)管理测试数据

实战:测试购物车模块

python
# 被测模块:cart.py
class ShoppingCart:
    def __init__(self):
        self.items = {}

    def add_item(self, name, price, quantity=1):
        if price <= 0 or quantity <= 0:
            raise ValueError("价格和数量必须为正数")
        if name in self.items:
            self.items[name]['quantity'] += quantity
        else:
            self.items[name] = {'price': price, 'quantity': quantity}

    def get_total(self):
        return sum(item['price'] * item['quantity'] for item in self.items.values())

# 测试文件:test_cart.py
import pytest
from cart import ShoppingCart

@pytest.fixture
def empty_cart():
    return ShoppingCart()

def test_add_item(empty_cart):
    empty_cart.add_item("苹果", 5.0, 2)
    assert empty_cart.items["苹果"]["quantity"] == 2

def test_total_calculation(empty_cart):
    empty_cart.add_item("香蕉", 3.0, 3)
    empty_cart.add_item("橙子", 4.0, 2)
    assert empty_cart.get_total() == 17.0  # 3*3 + 4*2 = 17

def test_invalid_price(empty_cart):
    with pytest.raises(ValueError):
        empty_cart.add_item("葡萄", -1, 1)

运行命令: pytest test_cart.py -v

模块四:接口测试——Postman与Python

接口测试的核心:验证请求与响应的正确性。

Postman基础操作:

1. 设置请求方法(GET/POST/PUT/DELETE)

2. 添加Headers(Content-Type、Authorization)

3. 编写Body(JSON格式)

4. 编写Tests脚本(断言状态码、响应体)

Python实现(使用requests库):

python
import requests
import json

# 测试一个模拟的图书管理系统API
base_url = "http://api.example.com/books"

# 新增图书
def test_add_book():
    new_book = {
        "title": "软件测试实战",
        "author": "张三",
        "isbn": "978-7-XXXX-XXXX-X"
    }
    response = requests.post(base_url, json=new_book)
    assert response.status_code == 201
    book_id = response.json()["id"]
    return book_id

# 查询图书
def test_get_book(book_id):
    response = requests.get(f"{base_url}/{book_id}")
    assert response.status_code == 200
    assert response.json()["title"] == "软件测试实战"

# 删除图书
def test_delete_book(book_id):
    response = requests.delete(f"{base_url}/{book_id}")
    assert response.status_code == 204

# 执行测试
book_id = test_add_book()
test_get_book(book_id)
test_delete_book(book_id)
print("接口测试通过!")

模块五:性能测试基础——Locust入门

性能测试的核心指标:

  • ►响应时间(RT)
  • ►吞吐量(TPS/QPS)
  • ►并发用户数
  • ►错误率

Locust示例:模拟用户登录场景

python
from locust import HttpUser, task, between

class WebsiteUser(HttpUser):
    wait_time = between(1, 5)  # 用户操作间隔1-5秒

    @task(3)  # 权重为3
    def view_homepage(self):
        self.client.get("/")

    @task(1)  # 权重为1
    def login(self):
        self.client.post("/login", json={
            "username": "test_user",
            "password": "123456"
        })

    def on_start(self):
        """每个用户启动时执行"""
        print("用户开始测试")

运行命令: locust -f locustfile.py --host=http://example.com

分析结果:

  • ►当响应时间超过2秒时,用户体验明显下降
  • ►错误率超过1%需要排查服务器配置或代码问题
  • ►吞吐量瓶颈通常出现在数据库或网络IO

自测清单

完成学习后,尝试回答以下问题:

1. 等价类划分和边界值分析如何结合使用?

2. 缺陷从提交到关闭经历哪些状态?

3. Pytest的fixture有什么作用?

4. 接口测试中如何验证JSON响应?

5. Locust的wait_time参数控制什么?

相关问题

软件测试学习笔记:5核心知识点_千锋教育

3步搞定软件测试培训助学贷款,省下2万学费_千锋教育

南宁软件测试培训机构教学风格对比:千锋教育为什么称霸?_千锋教育

哈尔滨软件测试培训机构师资稳定性:千锋教育如何打破“老师跑路”魔咒?_千锋教育

合肥软件测试培训机构教学大纲解析_千锋教育

沈阳软件测试培训机构学习氛围评测:千锋教育为什么让学员凌晨还在敲代码?_千锋教育