软件测试入门和基础
什么是软件测试?
使用技术手段确定软件是否满足使用需求。
目的是什么?
减少软件缺陷,保障软件质量。使软件能够满足用户的需求和期望。
编写测试用例的方法有哪几种?
等价类划分、边界值法、因果图、流程分析、错误分析、正交法、场景法、大纲法
(四)测试的六条基本法则是什么?
功能性、可维护性、易用性、效率、可移植性
测试的分类
按阶段划分
- 单元测试:针对代码源程序的测试
- 集成测试:针对功能模块组装的测试
- 系统测试:针对整个系统的测试(无论功能和非功能)
- 验收测试:以用户身份验证系统是否满足需求
按代码可见度划分
- 黑盒测试:针对有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. 可能更适合作为模块级函数 |
使用场景
普通方法适用场景
- 需要访问或修改实例状态时
- 方法行为依赖于特定实例的属性时
- 大多数常规方法都应该是普通方法
类方法适用场景
- 工厂模式:创建类的不同实例
@classmethod
def from_string(cls, string):
# 解析string并返回实例
return cls(*string.split('-'))
- 单例模式:控制实例创建
- 类状态操作:修改类级别的配置
- 继承时的多态:子类可以覆盖类方法并提供特定实现
静态方法适用场景
- 工具函数:与类相关但不依赖类或实例状态
@staticmethod
def calculate_distance(x1, y1, x2, y2):
return ((x2-x1)**2 + (y2-y1)**2)**0.5
- 辅助函数:用于支持类的其他方法
- 命名空间组织:将相关函数组织在类中
- 明确表明不修改状态:作为API设计的一部分
总结表格
| 特性 | 普通方法 | 类方法 | 静态方法 |
|---|---|---|---|
| 装饰器 | 无 | @classmethod | @staticmethod |
| 第一个参数 | self | cls | 无 |
| 访问实例属性 | 可以 | 不可以 | 不可以 |
| 访问类属性 | 可以 | 可以 | 不可以 |
| 调用方式 | 实例 | 类或实例 | 类或实例 |
| 多态支持 | 是 | 是 | 否 |
| 典型用途 | 实例操作 | 工厂方法、类操作 | 工具函数 |
自动化测试的流程
自动化测试流程
1.需求分析
2.挑选适合做自动化测试的功能
3.设计测试用例
4.搭建自动化测试环境[可选]
5.设计自动化测试项目的架构[可选](PO模式+数据驱动+log+报告)
6.编写代码
7.执行测试用例
8.生成测试报告并分析结果\分析log
自动化测试结构


一些软件测试的基础知识
浙公网安备 33010602011771号