本书作为“蜗牛学院”自动化测试开发的核心教材,全面而深入地讲解了自动化测试开发的四大核心技术:接口测试、GUI测试、性能测试和测试框架设计。本书全程以项目和实验为主线,将所有测试开发的核心技术以及底层实现原理进行了详细的剖析,并结合Java代码完整地实现了这些原理。由于本书以Java作为核心编程语言,所以也有专门的项目讲解测试开发过程中常用的Java核心编程知识。同时,笔者也将从业多年来关于软件测试的项目和实验进行了总结,这也是本书的特色和价值所在。考虑到目前读者对测试工具的学习需求,本书也对目前比较流行的几款测试工具进行了讲解。
本书面向的主要读者群为软件测试工程师、测试主管、测试架构师和对自动化测试开发有浓厚兴趣的爱好者。本书也可以作为整个研发团队提升测试技术和质量意识的参考书。希望通过本书的学习,能为读者建立起一套完整的、有竞争力的自动化测试技术体系化思维。
项目3代码级接口测试自动化项目简介
被测程序(ArrayCompare)实现如下功能。
输入一个以逗号(或其他字符)分隔的字符串,程序将解析该字符串并得到一个数组。以同样的方式输入第二个字符串,并解析成数组。
对输入的字符分隔的每一个值进行判断,必须为数值类型,否则程序将不做任何处理。
如果输入合法,将按如下顺序进行判断。
(1) 如果数组长度为零,将直接输出信息“结果: 数组长度为零.”。
(2) 如果两个数组长度不相等,将直接输出信息“结果: 数组长度不一致.”。
(3) 如果两个数组不经过任何排序,自然相等,输出信息为“结果: 数组相同.”。
(4) 如果两个数组经过排序后比较,是相等的,输出信息为“结果: 数组排序后相同.”。
(5) 如果两个数组经过排序后比较,不相等,输出信息为“结果: 数组不同.”。
程序不需要设计专门的GUI界面,直接使用命令行即可。
☆代码路径: \\bookworkspace\\CodeTest
项目展示
实验结果如图31所示。
图31数组判断
项目目标
(1) 理解路径覆盖和条件覆盖对测试用例设计的指导价值。(2) 熟练运用基于代码级的接口测试自动化技术。
(3) 对代码级自动化测试框架JUnit和TestNG有深入理解。
(4) 理解代码覆盖率对代码级自动测试的价值。
(5) 深入理解并熟练运用代码级自动化测试技术,突破自动化测试技术难题。
3.1预备知识: 深入理解接口测试及白盒测试〖*2〗实验简介随着移动互联网的触角深入人们生活的每个角落,伴随而来的便是企业不断对其软件系统接口定义和研发,以便于进行数据传输和交换。由此导致目前企业急需大量专业接口测试工程师,因为接口测试天然具备自动化测试的可行性。所以本项目专门介绍接口测试的各种存在形式。
实验目的
(1) 理解接口测试的含义与作用。
(2) 理解白盒测试与灰盒测试。
(3) 理解代码级接口测试与协议级接口测试。
项目1自动化测试体系及环境准备1
1.1预备知识2
1.1.1软件工程与“没有银弹”2
1.1.2理解自动化测试6
1.1.3自动化测试实施过程9
1.1.4软件测试专业术语14
1.2核心实验18
1.2.1Eclipse开发环境的配置与使用18
1.2.2安装XAMPP并配置数据库及应用系统24
项目2WoniuATM模拟系统32
2.1预备知识33
2.1.1Java程序设计基础——变量与类型33
2.1.2Java程序设计基础——控制结构37
2.1.3Java程序设计基础——数组44
2.2核心实验: 实现WoniuATM的注册与登录50
2.3预备知识56
2.3.1Java面向对象——类与实例56
2.3.2Java面向对象——静态与非静态61
2.3.3Java面向对象——构造方法63
2.3.4Java面向对象——失血模型66
2.3.5Java面向对象——继承与多态69
2.4核心实验: 重构WoniuATM并完善其功能77
2.5预备知识86
2.5.1Java异常处理机制86
2.5.2Java数据持久化——文本文件91
2.5.3Java数据持久化——Excel文件95
2.5.4Java数据持久化——JDBC数据库99
2.6核心实验102
2.6.1利用文本文件重构WoniuATM102
2.6.2利用数据库重构WoniuATM108
2.6.3利用正则表达式检验用户输入113项目3代码级接口测试自动化118
3.1预备知识: 深入理解接口测试及白盒测试119
3.2核心实验122
3.2.1实现被测程序ArrayCompare代码122
3.2.2基于Java实现TDD测试驱动开发127
3.2.3基于Java实现代码级接口测试132
3.2.4基于Java实现代码级集成测试135
3.2.5基于JUnit实现代码级接口测试137
3.2.6基于TestNG实现代码级接口测试149
3.2.7基于EclEmma实现代码覆盖率统计157
3.2.8将被测程序导出为Jar包并完成测试161
项目4协议级接口测试自动化164
4.1预备知识165
4.1.1协议级接口测试的价值165
4.1.2网络通信过程与TCP/IP协议167
4.2核心实验173
4.2.1利用Wireshark完成协议监控与分析173
4.2.2利用Java实现TCP通信过程175
4.2.3利用Java对飞秋客户端实施可靠性测试177
4.3预备知识: Web系统通信协议HTTP179
4.4核心实验189
4.4.1利用协议分析工具监控Agileone通信过程189
4.4.2利用Java发送GET请求获取页面源文件193
4.4.3利用Java发送POST请求实现登录测试196
4.4.4使用Java对Agileone进行暴力破解200
4.4.5利用Java对需求提案模块进行测试202
4.4.6利用HttpClient实现需求提案的测试212
4.4.7利用Java对Phpwind论坛进行“灌水”216
4.4.8利用Java完成对Phpwind论坛的随机回帖223
4.4.9利用Java处理JSON格式的数据内容226
4.4.10利用Java实现文件的上传下载232
4.4.11利用Java实现HTTPS协议通信240
4.4.12利用Java完成对Web Service协议接口测试247
4.5工具应用254
4.5.1利用SoupUI实现协议级接口测试254
4.5.2利用TesseractOCR实现验证码识别260
项目5界面级黑盒测试自动化265
5.1预备知识: 基于界面的自动化测试核心技术266
5.2核心实验271
5.2.1对象识别原理——Java实现Monkey测试271
5.2.2对象识别原理——Java操作Windows窗体对象276
5.2.3对象识别原理——Java操作Java窗体对象283
5.2.4对象识别原理——JavaScript操作Web窗体对象294
5.2.5Selenium IDE——测试Agileone的公告管理297
5.2.6Selenium WebDriver——配置与使用306
5.2.7Selenium WebDriver——代码结构优化310
5.2.8Selenium WebDriver——代码深度优化316
5.2.9Selenium WebDriver——对象识别机制327
5.2.10Selenium WebDriver——鼠标与键盘操作338
5.2.11Selenium WebDriver——对话框与窗口341
5.2.12Selenium WebDriver——其他重要对象344
5.2.13Selenium WebDriver——兼容性测试347
5.3工具应用: 使用Appium测试Android应用程序348
项目6协议级性能测试自动化356
6.1预备知识357
6.1.1性能测试核心原理与技术体系357
6.1.2性能测试工程体系与场景设计361
6.1.3性能测试指标体系与结果分析370
6.2核心实验375
6.2.1基于Java的多线程技术应用375
6.2.2利用Java的Executor框架运行多线程387
6.2.3利用Java开发Phpwind性能测试脚本392
6.2.4利用Java+JSoup实现页面资源的下载407
6.2.5利用Java设计拱形场景及思考时间412
6.2.6监控并分析Windows和Linux关键性能指标417
6.2.7基于Web前端的性能测试分析430
6.3工具应用437
6.3.1使用JMeter实现Agileone的接口测试437
6.3.2使用JMeter实现Phpwind的性能测试444
项目7CBT自动化测试框架设计451
7.1预备知识: 理解自动化测试框架设计与CBT452
7.2核心实验454
7.2.1利用CBT的ATM模型实现基础框架454
7.2.2利用DDT模型重构CBT框架463
7.2.3在CBT中定制测试报告组件467
7.2.4对CBT测试报告组件进行测试479
7.2.5在CBT中定制公共组件模块485
7.2.6利用CBT完成与禅道管理系统集成495
7.2.7让CBT完成产品的持续集成500
参考文献509