本篇主要提供软件自动化测试实战解析:基于Python3编程语言徐西宁电子书的pdf版本下载,本电子书下载方式为百度网盘方式,点击以上按钮下单完成后即会通过邮件和网页的方式发货,有问题请联系邮箱ebook666@outlook.com
1.本书内容详实、深入浅出、案例生动、语言简练,是软件自动化测试工程师 的参考资料,也可供相关专业的在校学生、手工测试工程师和希望提升技术水平的自动化测试工程师学习参考。 2.业内多个行业专家联袂 。 3.读者可以在微信公众号“Python阅码场”看到 多关于软件开发和测试相关的技术文章,也可通过公众号与作者交流互动。
本书由浅入深地对自动化软件测试进行了阐述,内容涵盖软件测试的基础知识、Python、PyTest、Selenium、面向对象编程、自动化测试框架的设计要点和测试自动化开发实践等,本书内容组织成入门、进阶和高阶三个逐步提高的版块,每个版块都有实战编程章节,清晰呈现了技术方案的打磨和改进的过程。
徐西宁,毕业于华中科技大学计算机学院, 全栈软件工程师,从事软件开发和测试工作15年,先后任职于Autodesk、EMC、每锐软件等公司,在自动化测试框架设计、自动化测试流程优化、持续集成、Web开发等方面有丰富的经验,是一位活跃的开源软件和技术分享实践者。
序一<br/>序二<br/>前言<br/>第1章 软件测试基础1<br/>1.1 什么是软件测试1<br/>1.2 软件测试的类型2<br/>1.2.1 按测试对象的颗粒度划分2<br/>1.2.2 按内部逻辑的透明度划分3<br/>1.2.3 按执行阶段划分4<br/>1.2.4 按执行方式划分4<br/>1.3 敏捷开发模式5<br/>1.4 测试经济学6<br/>1.4.1 测试是必需的吗6<br/>1.4.2 放弃追求 7<br/>1.4.3 关注核心功能8<br/>1.4.4 等价类划分8<br/>1.4.5 边界值分析9<br/>1.4.6 用机器取代人工10<br/>1.5 自动化测试不容易12<br/>1.6 本章小结12<br/>第2章 Python入门13<br/>2.1 世界上 的两种编程语言13<br/>2.2 别问我怎么安装14<br/>2.3 解释器是什么14<br/>2.4 初识变量16<br/>2.5 函数基础17<br/>2.6 代码缩进和代码块18<br/>2.7 字符串19<br/>2.7.1 拼接和格式化21<br/>2.7.2 下标访问22<br/>2.7.3 多常见操作23<br/>2.8 数值类型26<br/>2.8.1 数值类型的基本运算27<br/>2.8.2 浮点数的常见运算29<br/>2.9 布尔值和条件判断32<br/>2.9.1 条件判断的组合33<br/>2.9.2 条件判断的短路34<br/>2.9.3 条件判断的链式表达35<br/>2.10 日期和时间36<br/>2.10.1 生成时间对象37<br/>2.10.2 格式化日期字符串38<br/>2.11 list基础39<br/>2.11.1 下标访问40<br/>2.11.2 插入元素40<br/>2.11.3 删除元素41<br/>2.11.4 简单排序42<br/>2.11.5 多常见操作43<br/>2.11.6 遍历44<br/>2.11.7 元素类型46<br/>2.12 dict基础47<br/>2.12.1 读取48<br/>2.12.2 插入和 新49<br/>2.12.3 合并50<br/>2.12.4 删除51<br/>2.12.5 遍历53<br/>2.12.6 key的选择55<br/>2.13 循环56<br/>2.13.1 while循环57<br/>2.13.2 for循环58<br/>2.13.3 多重循环59<br/>2.13.4 循环的终止60<br/>2.13.5 递归63<br/>2.14 异常63<br/>2.14.1 基本语法64<br/>2.14.2 异常的类型67<br/>2.14.3 捕获特定类型的异常68<br/>2.14.4 主动抛出异常71<br/>2.15 断言72<br/>2.15.1 assertion72<br/>2.15.2 AssertionError73<br/>2.15.3 assert73<br/>2.16 pip的基础用法74<br/>2.17 本章小结76<br/>第3章 PyTest入门77<br/>3.1 框架是什么77<br/>3.2 测试框架77<br/>3.2.1 筛选测试源文件77<br/>3.2.2 筛选测试函数78<br/>3.2.3 测试函数的启动79<br/>3.2.4 成功还是失败80<br/>3.2.5 测试报告80<br/>3.2.6 测试前的环境配置81<br/>3.2.7 测试后的现场清理81<br/>3.2.8 核心功能的扩充82<br/>3.2.9 主流测试框架82<br/>3.3 PyTest是什么83<br/>3.4 自动发现84<br/>3.4.1 自动发现测试源文件84<br/>3.4.2 自动发现测试函数84<br/>3.5 使用断言85<br/>3.6 测试结果解读86<br/>3.7 测试报告88<br/>3.8 本章小结89<br/>第4章 Selenium入门90<br/>4.1 Selenium是什么90<br/>4.1.1 Selenium IDE91<br/>4.1.2 Selenium Grid97<br/>4.1.3 Web Driver98<br/>4.2 Selenium的安装配置99<br/>4.3 用Web Driver驱动网页100<br/>4.4 页面元素的定位102<br/>4.4.1 简单定位102<br/>4.4.2 CSS定位107<br/>4.5 页面元素的常见操作108<br/>4.6 本章小结112<br/>第5章 实战12306之入门篇113<br/>5.1 测 例设计文档113<br/>5.2 代码实战114<br/>5.3 代码解析116<br/>5.3.1 审视测试逻辑116<br/>5.3.2 用变量澄清代码逻辑117<br/>5.3.3 DRY原则118<br/>5.3.4 改善代码可读性120<br/>5.4 本章小结122<br/>第6章 Python进阶123<br/>6.1 基本数据类型的深入了解123<br/>6.1.1 转义字符123<br/>6.1.2 字符串的不可变性124<br/>6.1.3 深入了解布尔类型126<br/>6.1.4 set128<br/>6.1.5 tuple131<br/>6.1.6 整型数的设计很 132<br/>6.1.7 浮点数为什么算不准133<br/>6.1.8 Decimal,准!134<br/>6.2 深入了解函数137<br/>6.2.1 函数的调用137<br/>6.2.2 函数的返回138<br/>6.2.3 不支持函数重载139<br/>6.2.4 默认参数141<br/>6.2.5 可变参数142<br/>6.3 关于时间144<br/>6.3.1 时间差144<br/>6.3.2 UTC时间146<br/>6.4 面向对象基础148<br/>6.4.1 面向对象到底是什么意思148<br/>6.4.2 类和对象148<br/>6.4.3 初始化函数149<br/>6.5 模块是什么151<br/>6.6 排序153<br/>6.6.1 list的排序153<br/>6.6.2 dict的排序157<br/>6.6.3 自定义对象序列的排序159<br/>6.7 复杂的遍历场景160<br/>6.7.1 一边遍历一边修改160<br/>6.7.2 一边遍历一边删除162<br/>6.8 文件和文件系统操作基础165<br/>6.8.1 路径的正确操作方式165<br/>6.8.2 文件系统的基本操作168<br/>6.8.3 文本文件的读169<br/>6.8.4 文本文件的写170<br/>6.8.5 文本文件的关闭171<br/>6.8.6 CSV文件的读写172<br/>6.8.7 Excel文件的读写174<br/>6.9 浅拷贝与深拷贝176<br/>6.10 深入了解import179<br/>6.11 变量的作用域182<br/>6.12 局部变量和全局变量的冲突185<br/>6.13 __name__和__main__186<br/>6.14 注释188<br/>6.15 pip的工程用法190<br/>6.16 本章小结192<br/>第7章 PyTest进阶193<br/>7.1 自动发现测试类193<br/>7.2 测试集合194<br/>7.3 标记195<br/>7.3.1 忽略执行195<br/>7.3.2 条件执行197<br/>7.3.3 期待失败的发生199<br/>7.3.4 限时执行201<br/>7.3.5 自定义标签201<br/>7.4 参数化测试204<br/>7.5 测 例的ID206<br/>7.6 Fixture初探207<br/>7.7 PyTest的插件机制209<br/>7.7.1 Hook函数209<br/>7.7.2 PyTest插件210<br/>7.7.3 多级conftest协同210<br/>7.7.4 第三方插件212<br/>7.8 本章小结213<br/>第8章 Selenium进阶214<br/>8.1 页面元素的XPath定位214<br/>8.2 页面元素的等待215<br/>8.2.1 隐式等待216<br/>8.2.2 显式等待216<br/>8.3 Selenium的局限218<br/>8.4 本章小结219<br/>第9章 实战12306之进阶篇220<br/>9.1 PO设计模式220<br/>9.2 有针对性的显式等待223<br/>9.3 健壮的代码逻辑224<br/>9.4 函数单一职责原则225<br/>9.5 测试单一职责原则226<br/>9.6 本章小结227<br/> 0章 Python高阶228<br/>10.1 面向对象设计思想228<br/>10.1.1 继承228<br/>10.1.2 封装230<br/>10.1.3 多态232<br/>10.2 对类的深入了解233<br/>10.2.1 析构函数233<br/>10.2.2 访问权限控制235<br/>10.2.3 self不是关键字236<br/>10.2.4 实例属性和类属性239<br/>10.2.5 成员方法和类方法240<br/>10.2.6 类方法和静态方法242<br/>10.3 重写244<br/>10.3.1 如何重写244<br/>10.3.2 重写中的代码复用247<br/>10.3.3 重写__str__方法249<br/>10.3.4 重写运算符249<br/>10.4 深入了解函数252<br/>10.4.1 函数也是一种对象252<br/>10.4.2 内嵌函数254<br/>10.4.3 函数装饰器255<br/>10.4.4 不只是会装饰259<br/>10.4.5 用Property装饰器改进设计261<br/>10.5 None是什么264<br/>10.6 Enum是什么265<br/>10.7 Python不支持常量267<br/>10.8 随机数据和时间戳268<br/>10.9 自定义异常类型270<br/>10.10 需要用强类型吗271<br/>10.11 日志272<br/>10.12 本章小结277<br/> 1章 测试框架的设计和演进278<br/>11.1 代码的可读性278<br/>11.1.1 统一的代码风格279<br/>11.1.2 丑陋的函数名280<br/>11.1.3 糟糕的变量名282<br/>11.2 友好的函数设计283<br/>11.2.1 简洁的接口283<br/>11.2.2 操作状态的处理285<br/>11.2.3 不要过度设计287<br/>11.2.4 防呆288<br/>11.3 有效管理测试资源290<br/>11.3.1 封装微服务290<br/>11.3.2 统一的资源入口295<br/>11.3.3 资源的延迟加载296<br/>11.3.4 保证资源的释放298<br/>11.3.5 支持多环境测试300<br/>11.3.6 容忍不稳定的测试环境302<br/>11.4 不要引入getter和setter304<br/>11.5 一次收集多个断言错误306<br/>11.6 日志的支持和改进308<br/>11.7 减少重复执行的负面影响310<br/>11.8 数据驱动测试的设计311<br/>11.8.1 让PyTest支持中文ID311<br/>11.8.2 优雅的参数化测试314<br/>11.8.3 用YML取代JSON316<br/>11.8.4 面向对象的测试数据317<br/>11.9 接受一定程度的重复代码319<br/>11.10 本章小结320<br/> 2章 实战12306之高阶篇321<br/>12.1 就近原则321<br/>12.2 用Enum澄清设计意图322<br/>12.3 支持链式表达324<br/>12.4 简化函数名325<br/>12.5 封装复杂逻辑326<br/>12.6 单例设计模式328<br/>12.7 异常和断言的使用场景的区别331<br/>12.8 测 例的维护333<br/>12.9 本章小结334<br/>术语表335<br/>参考文献336<br/>后记337