软件测试入门和基础

什么是软件测试?

使用技术手段确定软件是否满足使用需求。

目的是什么?

减少软件缺陷,保障软件质量。使软件能够满足用户的需求和期望。

编写测试用例的方法有哪几种?

等价类划分、边界值法、因果图、流程分析、错误分析、正交法、场景法、大纲法

(四)测试的六条基本法则是什么?

功能性、可维护性、易用性、效率、可移植性

测试的分类

按阶段划分

  • 单元测试:针对代码源程序的测试
  • 集成测试:针对功能模块组装的测试
  • 系统测试:针对整个系统的测试(无论功能和非功能)
  • 验收测试:以用户身份验证系统是否满足需求

按代码可见度划分

  • 黑盒测试:针对有UI界面软件系统输入输出类测试
  • 灰盒测试:针对无UI界面软件系统输入输出和内部逻辑结构的测试(能看到部分代码)
  • 白盒测试:针对程序源代码及内部逻辑本身进行测试

其他

  • 冒烟测试:保障提测内容具备可测性
  • 回归测试:对已修复功能\更新后对已测内容再次测试

软件质量模型

目的

衡量测试软件的质量维度

质量模型

功能、性能、兼容、易用、安全、可靠性、移植性、维护性

测试的方法

等价类划分

  • 划分有效等价类:满足需求的数据集合
  • 划分无效等价类:不满足需求的数据集合
  • 每类选择代表数据

提取测试数据组合

原则

多个选项有效数据建议组合应用

单个选项无效数据组合其他选项有效数据应用(单一变量原则)

边界值分析法

  • 上点:刚好在边界上的点,必选
  • 离点:距离上点最近的点,选择两个
  • 内点:边界范围内的任意点,建议选之间,必选

测试用例、决策表、因果图和场景法

决策表的组成:

  • 条件桩:列出问题的所有条件(次序无所谓)
  • 动作桩:列出问题中可能采取的操作(可有多个)
  • 条件项:列出条件对应的取值,所有可能情况下的真假值
  • 动作项:推导出条件项(各种取值情况)下应该采取的操作结果

基本路径法

软件缺陷

软件中存在的任何异常问题

缺陷的标准:多功能、少功能、功能错误、隐性功能缺失、体验不好

APP测试分类

App项目测试范围

  • 功能测试:业务、单功能模块
  • 专项测试:安装、卸载、升级、兼容性、push消息推送、交叉事件、用户体验
  • 性能测试:内存、CPU、电量、流量、启动时间、流畅度、稳定性

Web和App区别

App是C/S结构的,Web是B/S结构

发布策略

内部发布和线上发布

开发环境>测试环境>灰度发布>生产环境

灰度发布:部分用户可用,有异常就回滚

线上发布:所有用户可用

图片

图片

json

字典 ↔ JSON 字符串的转换

字典转 JSON 字符串:json.dumps()

import json

data = {"name": "Alice", "age": 25, "is_admin": False}
json_str = json.dumps(data)
print(json_str)
# 输出: {"name": "Alice", "age": 25, "is_admin": false}

可选参数:

  • indent=4:格式化输出,缩进 4 空格
  • ensure_ascii=False:支持中文输出
json_str = json.dumps(data, indent=2, ensure_ascii=False)

JSON 字符串转字典:json.loads()

json_str = '{"name": "Alice", "age": 25, "is_admin": false}'
data = json.loads(json_str)
print(data["name"])  # 输出: Alice

JSON 文件的读写操作

写入字典到 JSON 文件:json.dump()

data = {"id": 1, "name": "Tom"}

with open("data.json", "w", encoding="utf-8") as f:
    json.dump(data, f, indent=2, ensure_ascii=False)

从 JSON 文件读取为字典:json.load()

with open("data.json", "r", encoding="utf-8") as f:
    data = json.load(f)
print(data["name"])

其他实用技巧

写入多个 JSON 对象到文件(追加模式)

with open("data.json", "a", encoding="utf-8") as f:
    json.dump({"new": "data"}, f)
    f.write("\n")  # 每个 JSON 占一行,便于处理

从 JSON 文件读取多个对象(逐行读取)

with open("data.json", "r", encoding="utf-8") as f:
    for line in f:
        obj = json.loads(line)
        print(obj)

总结

操作 函数名
字典 → JSON 字符串 json.dumps()
JSON 字符串 → 字典 json.loads()
字典 → 写入 JSON 文件 json.dump()
JSON 文件 → 读取字典 json.load()

普通方法、类方法、静态方法

基本概念

普通方法 (实例方法)

  • 定义:第一个参数为self,指向实例对象
  • 调用:通过实例调用
  • 特点:可以访问和修改实例属性,也可以访问类属性

类方法 (classmethod)

  • 定义:使用@classmethod装饰器,第一个参数为cls,指向类对象
  • 调用:可通过类或实例调用
  • 特点:只能访问和修改类属性,不能访问实例属性

静态方法 (staticmethod)

  • 定义:使用@staticmethod装饰器,没有默认参数
  • 调用:可通过类或实例调用
  • 特点:不能访问类或实例属性,就像一个普通函数但属于类的命名空间

代码示例

class MyClass:
    class_attr = "类属性"
    
    def __init__(self, instance_attr):
        self.instance_attr = instance_attr
    
    # 普通方法
    def instance_method(self):
        print(f"实例方法访问实例属性: {self.instance_attr}")
        print(f"实例方法访问类属性: {self.class_attr}")
    
    # 类方法
    @classmethod
    def class_method(cls):
        print(f"类方法访问类属性: {cls.class_attr}")
        # print(cls.instance_attr)  # 错误,无法访问实例属性
    
    # 静态方法
    @staticmethod
    def static_method():
        print("静态方法不访问类或实例属性")
        # print(class_attr)  # 错误
        # print(self.instance_attr)  # 错误

优缺点对比

方法类型 优点 缺点
普通方法 1. 可以直接访问和修改实例状态 2. 直观易理解 1. 必须通过实例调用 2. 不能直接通过类调用
类方法 1. 可以在不创建实例的情况下操作类 2. 可以被子类继承和覆盖 3. 适合实现替代构造函数 1. 不能访问实例属性 2. 可能被误用导致设计问题
静态方法 1. 不依赖类或实例状态,更纯粹 2. 性能稍好(不需要自动传递self/cls) 3. 明确表明不修改类或实例状态 1. 不能访问类或实例属性 2. 可能更适合作为模块级函数

使用场景

普通方法适用场景

  • 需要访问或修改实例状态时
  • 方法行为依赖于特定实例的属性时
  • 大多数常规方法都应该是普通方法

类方法适用场景

  1. 工厂模式:创建类的不同实例
@classmethod
def from_string(cls, string):
    # 解析string并返回实例
    return cls(*string.split('-'))
  1. 单例模式:控制实例创建
  2. 类状态操作:修改类级别的配置
  3. 继承时的多态:子类可以覆盖类方法并提供特定实现

静态方法适用场景

  1. 工具函数:与类相关但不依赖类或实例状态
@staticmethod
def calculate_distance(x1, y1, x2, y2):
    return ((x2-x1)**2 + (y2-y1)**2)**0.5
  1. 辅助函数:用于支持类的其他方法
  2. 命名空间组织:将相关函数组织在类中
  3. 明确表明不修改状态:作为API设计的一部分

总结表格

特性 普通方法 类方法 静态方法
装饰器 @classmethod @staticmethod
第一个参数 self cls
访问实例属性 可以 不可以 不可以
访问类属性 可以 可以 不可以
调用方式 实例 类或实例 类或实例
多态支持
典型用途 实例操作 工厂方法、类操作 工具函数

自动化测试的流程

自动化测试流程

1.需求分析

2.挑选适合做自动化测试的功能

3.设计测试用例

4.搭建自动化测试环境[可选]

5.设计自动化测试项目的架构[可选](PO模式+数据驱动+log+报告)

6.编写代码

7.执行测试用例

8.生成测试报告并分析结果\分析log

自动化测试结构

图片

posted @ 2025-11-28 17:18  Falamo寒枝  阅读(64)  评论(0)    收藏  举报