封面
版权信息
序一
序二
前言
第1章 软件测试基础
1.1 什么是软件测试
1.2 软件测试的类型
1.2.1 按测试对象的颗粒度划分
1.2.2 按内部逻辑的透明度划分
1.2.3 按执行阶段划分
1.2.4 按执行方式划分
1.3 敏捷开发模式
1.4 测试经济学
1.4.1 测试是必需的吗
1.4.2 放弃追求完美
1.4.3 关注核心功能
1.4.4 等价类划分
1.4.5 边界值分析
1.4.6 用机器取代人工
1.5 自动化测试不容易
1.6 本章小结
第2章 Python入门
2.1 世界上最好的两种编程语言
2.2 别问我怎么安装
2.3 解释器是什么
2.4 初识变量
2.5 函数基础
2.6 代码缩进和代码块
2.7 字符串
2.7.1 拼接和格式化
2.7.2 下标访问
2.7.3 更多常见操作
2.8 数值类型
2.8.1 数值类型的基本运算
2.8.2 浮点数的常见运算
2.9 布尔值和条件判断
2.9.1 条件判断的组合
2.9.2 条件判断的短路
2.9.3 条件判断的链式表达
2.10 日期和时间
2.10.1 生成时间对象
2.10.2 格式化日期字符串
2.11 list基础
2.11.1 下标访问
2.11.2 插入元素
2.11.3 删除元素
2.11.4 简单排序
2.11.5 更多常见操作
2.11.6 遍历
2.11.7 元素类型
2.12 dict基础
2.12.1 读取
2.12.2 插入和更新
2.12.3 合并
2.12.4 删除
2.12.5 遍历
2.12.6 key的选择
2.13 循环
2.13.1 while循环
2.13.2 for循环
2.13.3 多重循环
2.13.4 循环的终止
2.13.5 递归
2.14 异常
2.14.1 基本语法
2.14.2 异常的类型
2.14.3 捕获特定类型的异常
2.14.4 主动抛出异常
2.15 断言
2.15.1 assertion
2.15.2 AssertionError
2.15.3 assert
2.16 pip的基础用法
2.17 本章小结
第3章 PyTest入门
3.1 框架是什么
3.2 测试框架
3.2.1 筛选测试源文件
3.2.2 筛选测试函数
3.2.3 测试函数的启动
3.2.4 成功还是失败
3.2.5 测试报告
3.2.6 测试前的环境配置
3.2.7 测试后的现场清理
3.2.8 核心功能的扩充
3.2.9 主流测试框架
3.3 PyTest是什么
3.4 自动发现
3.4.1 自动发现测试源文件
3.4.2 自动发现测试函数
3.5 使用断言
3.6 测试结果解读
3.7 测试报告
3.8 本章小结
第4章 Selenium入门
4.1 Selenium是什么
4.1.1 Selenium IDE
4.1.2 Selenium Grid
4.1.3 Web Driver
4.2 Selenium的安装配置
4.3 用Web Driver驱动网页
4.4 页面元素的定位
4.4.1 简单定位
4.4.2 CSS定位
4.5 页面元素的常见操作
4.6 本章小结
第5章 实战12306之入门篇
5.1 测试用例设计文档
5.2 代码实战
5.3 代码解析
5.3.1 审视测试逻辑
5.3.2 用变量澄清代码逻辑
5.3.3 DRY原则
5.3.4 改善代码可读性
5.4 本章小结
第6章 Python进阶
6.1 基本数据类型的深入了解
6.1.1 转义字符
6.1.2 字符串的不可变性
6.1.3 深入了解布尔类型
6.1.4 set
6.1.5 tuple
6.1.6 整型数的设计很优秀
6.1.7 浮点数为什么算不准
6.1.8 Decimal,准!
6.2 深入了解函数
6.2.1 函数的调用
6.2.2 函数的返回
6.2.3 不支持函数重载
6.2.4 默认参数
6.2.5 可变参数
6.3 关于时间
6.3.1 时间差
6.3.2 UTC时间
6.4 面向对象基础
6.4.1 面向对象到底是什么意思
6.4.2 类和对象
6.4.3 初始化函数
6.5 模块是什么
6.6 高级排序
6.6.1 list的排序
6.6.2 dict的排序
6.6.3 自定义对象序列的排序
6.7 复杂的遍历场景
6.7.1 一边遍历一边修改
6.7.2 一边遍历一边删除
6.8 文件和文件系统操作基础
6.8.1 路径的正确操作方式
6.8.2 文件系统的基本操作
6.8.3 文本文件的读
6.8.4 文本文件的写
6.8.5 文本文件的关闭
6.8.6 CSV文件的读写
6.8.7 Excel文件的读写
6.9 浅拷贝与深拷贝
6.10 深入了解import
6.11 变量的作用域
6.12 局部变量和全局变量的冲突
6.13 __name__和__main__
6.14 注释
6.15 pip的工程用法
6.16 本章小结
第7章 PyTest进阶
7.1 自动发现测试类
7.2 测试集合
7.3 标记
7.3.1 忽略执行
7.3.2 条件执行
7.3.3 期待失败的发生
7.3.4 限时执行
7.3.5 自定义标签
7.4 参数化测试
7.5 测试用例的ID
7.6 Fixture初探
7.7 PyTest的插件机制
7.7.1 Hook函数
7.7.2 PyTest插件
7.7.3 多级conftest协同
7.7.4 第三方插件
7.8 本章小结
第8章 Selenium进阶
8.1 页面元素的XPath定位
8.2 页面元素的等待
8.2.1 隐式等待
8.2.2 显式等待
8.3 Selenium的局限
8.4 本章小结
第9章 实战12306之进阶篇
9.1 PO设计模式
9.2 更有针对性的显式等待
9.3 更健壮的代码逻辑
9.4 函数单一职责原则
9.5 测试单一职责原则
9.6 本章小结
第10章 Python高阶
10.1 面向对象设计思想
10.1.1 继承
10.1.2 封装
10.1.3 多态
10.2 对类的深入了解
10.2.1 析构函数
10.2.2 访问权限控制
10.2.3 self不是关键字
10.2.4 实例属性和类属性
10.2.5 成员方法和类方法
10.2.6 类方法和静态方法
10.3 重写
10.3.1 如何重写
10.3.2 重写中的代码复用
10.3.3 重写__str__方法
10.3.4 重写运算符
10.4 深入了解函数
10.4.1 函数也是一种对象
10.4.2 内嵌函数
10.4.3 函数装饰器
10.4.4 不只是会装饰
10.4.5 用Property装饰器改进设计
10.5 None是什么
10.6 Enum是什么
10.7 Python不支持常量
10.8 随机数据和时间戳
10.9 自定义异常类型
10.10 需要用强类型吗
10.11 日志
10.12 本章小结
第11章 测试框架的设计和演进
11.1 代码的可读性
11.1.1 统一的代码风格
11.1.2 丑陋的函数名
11.1.3 糟糕的变量名
11.2 友好的函数设计
11.2.1 简洁的接口
11.2.2 操作状态的处理
11.2.3 不要过度设计
11.2.4 防呆
11.3 有效管理测试资源
11.3.1 封装微服务
11.3.2 统一的资源入口
11.3.3 资源的延迟加载
11.3.4 保证资源的释放
11.3.5 支持多环境测试
11.3.6 容忍不稳定的测试环境
11.4 不要引入getter和setter
11.5 一次收集多个断言错误
11.6 日志的支持和改进
11.7 减少重复执行的负面影响
11.8 数据驱动测试的设计
11.8.1 让PyTest支持中文ID
11.8.2 更优雅的参数化测试
11.8.3 用YML取代JSON
11.8.4 面向对象的测试数据
11.9 接受一定程度的重复代码
11.10 本章小结
第12章 实战12306之高阶篇
12.1 就近原则
12.2 用Enum澄清设计意图
12.3 支持链式表达
12.4 简化函数名
12.5 封装复杂逻辑
12.6 单例设计模式
12.7 异常和断言的使用场景的区别
12.8 测试用例的维护
12.9 本章小结
术语表
参考文献
后记
更新时间:2021-07-23 16:18:22