框架准备 44
3.1RobotFramework框架介绍 44
3.1.1优势和亮点 44
3.1.2不足 45
3.1.3RobotFramework生态系统 45
3.2Windows平台环境搭建 47
3.2.1Python的安装与配置 47
3.2.2pip的安装与升级 49
3.2.3RobotFramework框架的安装 50
3.2.4wxPython框架的安装 50
3.2.5RobotFrameworkRIDE的安装 51
3.3Mac平台环境搭建 52
3.3.1Python的安装与配置 52
3.3.2pip的安装 53
3.3.3RobotFramework框架的安装 54
3.3.4MacOSX无法启动RIDE的解决方案 54
3.4Linux平台环境搭建 57
3.4.1Python的安装与配置 57
3.4.2pip的安装与配置 58
3.4.3RobotFramework框架的安装 58
3.4.4wxPython框架的安装 59
3.5RobotFrameworkRIDE支持Python3 59
3.5.1RobotFrameworkRIDE1.7.3的新特性 59
3.5.2RobotFrameworkRIDE1.7.3的安装与升级 60
3.6本章总结 60
第4章Python测试编程 62
4.1 语法规范 62
4.1.1代码编排 63
4.1.2文档编排 63
4.1.3 空格的使用 64
4.1.4 注释及文档描述 64
4.1.5 命名规范 65
4.1.6 编码建议 66
4.2 Python2和Python3如何选择 67
4.2.1为什么Python2和Python3都要学 67
4.2.2Python2和Python3的主要特性区别 68
4.2.3Python2和Python3同时兼容的技巧 73
4.3快速入门 75
4.3.1Python变量和赋值 75
4.3.2Python字符串 77
4.3.3Python列表和元组 78
4.3.4Python字典 79
4.3.5Pythonif分支条件 80
4.3.6Pythonwhile循环 81
4.3.7Pythonfor循环 81
4.3.8Pythonrange内建函数 82
4.3.9Python列表解析 83
4.3.10Pythonopen函数 85
4.3.11Python错误和异常 88
4.3.12Python函数 93
4.3.13Python类 102
4.3.14Python模块与包 110
4.3.15Python常用内置函数 115
4.4Python编程常用技巧 116
4.4.1Python拼接字符串的7种方式 116
4.4.2Python列表推导、字典推导、集合推导 118
4.4.3Python三元操作符用来进行条件赋值 119
4.4.4Python同时迭代两个列表 120
4.4.5Python带索引的列表迭代 120
4.4.6Python迭代列表组合 120
4.4.7Python统计元素出现次数 121
4.4.8Python找出列表中出现次数最多的元素 121
4.4.9Python一键启用文件服务器 122
4.4.10Python快速拼接构造列表 122
4.4.11Python一行代码搜索字符串的多个前后缀 122
4.4.12Python实现真正的switch-case语句 123
4.4.13Python实例方法、静态方法、类方法 123
4.4.14Python求集合并集、交集、差集 124
4.4.15Python去除列表重复元素的几种方法 125
第5章RobotFramework功能的使用 127
5.1RIDE两种启动方式 127
5.2RIDE功能介绍 128
5.2.1菜单栏 128
5.2.2工具栏 131
5.2.3案例区 131
5.2.4工作区 131
5.2.5常用快捷键 132
5.3常用RobotFramework编辑器工具 133
5.3.1PyCharm 133
5.3.2SublimeText 138
5.3.3 其他工具 140
5.4测试项目、测试套件和测试用例 141
5.4.1测试项目 141
5.4.2测试套件 141
5.4.3测试用例 142
5.5资源文件 143
5.5.1内部资源文件 143
5.5.2外部资源文件 143
5.6常量和变量 144
5.6.1变量与常量介绍 144
5.6.2变量作用域 145
5.6.3RobotFramework内置变量 146
5.6.4标量变量的定义和使用 147
5.6.5列表变量的定义和使用 149
5.6.6字典变量的定义和使用 151
5.6.7变量知识补充 153
5.7用户关键字 153
5.7.1关键字Arguments 154
5.7.2关键字Teardown 160
5.7.3关键字Return 161
5.8Edit选项卡 162
5.8.1测试项目Edit选项卡 162
5.8.2测试套件Edit选项卡 163
5.8.3测试用例Edit选项卡 165
5.8.4小结 166
5.9TextEdit选项卡 167
5.10Run选项卡 168
5.10.1自动保存 168
5.10.2失败暂停 168
5.10.3Arguments参数配置 169
5.10.4Onlyruntestswiththesetags 170
5.10.5Skiptestswiththesetags 171
5.10.6查看测试报告和测试日志 172
5.11RobotFramework常用技巧 173
5.11.1If分支结构 173
5.11.2For循环结构 174
5.11.3列表变量的用法和元素获取 176
5.11.4变量使用方法补充 177
5.11.5搜索关键字 178
5.11.6测试用例执行六大技巧 179
5.11.7测试标签技巧 181
5.11.8Setup和Teardown 183
5.11.9Pybot和Robot命令 183
5.11.10Jybot模式安装与运行 185
第6章RobotFramework常用函数库 189
6.1内置库介绍 189
6.1.1标准库 189
6.1.2扩展库 190
6.2Evaluate万能关键字 191
6.3类型转换 194
6.3.1 ConvertToString:转换成字符串 194
6.3.2 ConvertToInteger:转换成整数 194
6.3.3ConvertToNumber:转换成符点数 194
6.3.4ConvertToBoolean:转换成布尔值 195
6.3.5EncodeStringToBytes:字符编码 196
6.4变量操作 196
6.4.1LogVariables:打印变量 196
6.4.2ImportVariables:导入变量 196
6.4.3SetVariable:设置变量 197
6.4.4SetGlobalVariable:设置全局变量 197
6.4.5SetSuiteVariable:设置测试套件变量 198
6.4.6SetTestVariable:设置测试用例变量 198
6.4.7SetVariableIf:当条件满足时设置变量 199
6.4.8GetVariables:获取所有变量 199
6.4.9GetVariableValue:获取变量值 199
6.4.10GetEnvironmentVariables:获取所有环境变量 200
6.4.11GetEnvironmentVariable:获取环境变量值 200
6.4.12SetEnvironmentVariable:设置环境变量 200
6.5关键字操作 201
6.5.1RunKeyword:运行关键字 201
6.5.2RunKeywordIf:当条件满足时运行关键字 201
6.5.3RunKeywordUnless:当条件不满足时运行关键字 201
6.5.4RepeatKeyword:重复运行某关键字 202
6.5.5RunKeywords:运行多个关键字 202
6.5.6RunKeywordAndReturn:运行关键字并返回结果 202
6.5.7RunKeywordAndReturnIf:当条件满足时运行关键字并返回结果 203
6.5.8RunKeywordAndContinueOnFailure:失败后仍运行指定关键字 203
6.5.9RunKeywordAndIgnoreError:运行关键字并忽略错误 203
6.5.10RunKeywordIfAllTestsPassed:所有测试用例通过后运行关键字 203
6.5.11RunKeywordIfAnyTestsFailed:任一测试用例失败后运行关键字 204
6.5.12RunKeywordIfTestPassed:测试用例通过后运行关键字 204
6.5.13RunKeywordIfTestFailed:测试用例失败后运行关键字 204
6.5.14RunKeywordIfTimeoutOccurred:测试用例超时后运行关键字 204
6.6条件与循环 205
6.6.1ContinueForLoop:直接继续下一次循环 205
6.6.2ContinueForLoopIf:当条件满足时继续下一次循环 205
6.6.3ExitForLoop:立即退出循环 205
6.6.4ExitForLoopIf:当条件满足时退出循环 206
6.7断言操作 206
6.7.1Should(Not)BeEmpty:断言是否为空 206
6.7.2Should(Not)BeEqual:断言是否相等 207
6.7.3Should(Not)BeEqualAsStrings:断言作为字符串是否相等 207
6.7.4Should(Not)BeEqualAsIntegers:断言作为整数是否相等 208
6.7.5Should(Not)BeTrue:断言是否为真 208
6.7.6Should(Not)Contain:断言是否包含某元素 209
6.7.7Should(Not)ContainAny:断言是否包含任一元素 210
6.7.8ShouldContainXTimes:断言某元素是否被包含指定次数 210
6.7.9Should(Not)StartWith:断言是否以某某开头 210
6.7.10Should(Not)EndWith:断言是否以某某结尾 211
6.7.11Should(Not)MatchRegexp:断言是否匹配正则表达式 211
6.7.12LengthShouldBe:断言长度是否相等 212
6.7.13KeywordShouldExist:断言关键字是否存在 213
6.7.14ListShould(Not)ContainValue:断言列表是否包含某值 213
6.7.15ListsShouldBeEqual:断言两个列表是否相等 213
6.7.16ListShouldNotContainDuplicates:断言列表不包含重复项 214
6.7.17DictionaryShouldContainItem:断言字典是否包含某键值对 214
6.7.18DictionaryShould(Not)ContainKey:断言字典是否包含某Key值 214
6.7.19DictionaryShould(Not)ContainValue:断言字典是否包含某Value值 215
6.7.20DictionariesShouldBeEqual:断言给定的字典是否相等 215
6.8集合操作 215
6.8.1CreateList:创建列表 215
6.8.2LogList:打印输出列表中的值 216
6.8.3AppendToList:添加元素到列表 216
6.8.4InsertIntoList:插入元素到列表 216
6.8.5CopyList:复制列表 217
6.8.6GetFromList:从列表中取值 217
6.8.7GetIndexFromList:获取列表值对应的索引位置 217
6.8.8ReverseList:反转列表 218
6.8.9SetListValue:设置列表值 218
6.8.10SortList:排序列表 219
6.8.11RemoveFromList:移除列表中指定位置的元素 219
6.8.12RemoveValuesFromList:从列表中移除给定的所有值 219
6.8.13RemoveDuplicates:从列表中移除重复项 220
6.8.14CreateDictionary:创建字典 220
6.8.15LogDictionary:打印字典 220
6.8.16SetToDictionary:添加元素到字典 221
6.8.17CopyDictionary:复制字典 221
6.8.18GetDictionaryItems:获取字典中的所有元素 221
6.8.19GetDictionaryKeys:获取字典中的所有Key值 222
6.8.20GetDictionaryValues:获取字典中的所有Value值 222
6.8.21GetFromDictionary:获取字典中的指定Key值 222
6.8.22PopFromDictionary:删除并返回字典中的指定Key值 222
6.8.23RemoveFromDictionary:删除字典中的指定Key值 223
6.9常用关键字 223
6.9.1Log:打印输出 223
6.9.2LogMany:打印各元素值 224
6.9.3LogToConsole:打印到控制台 225
6.9.4Sleep:延时等待 225
6.9.5Comment:添加注释 226
6.9.6CallMethod:调用方法 226
6.9.7GetCount:获取数量 227
6.9.8GetLength:获取长度 227
6.9.9GetTime:获取时间 227
6.9.10PassExecution:标记测试用例执行成功 229
6.9.11PassExecutionIf:当条件满足时标记测试用例执行成功 229
6.9.12Fail:标记当前测试用例失败 229
6.9.13FatalError:停止执行所有测试用例 230
6.9.14ImportLibrary:导入测试库 230
第3部分 项目实战篇
第7章 基于HTTP接口的自动化测试 234
7.1接口测试扫盲 234
7.1.1接口的本质 234
7.1.2接口有哪些类别 235
7.1.3什么是接口测试 236
7.1.4接口测试的重要性 236
7.1.5接口测试的关注点 237
7.1.6接口测试的介入时机 238
7.1.7接口测试的根本目标 238
7.2开展接口测试的基本流程 239
7.3接口测试用例设计 240
7.3.1三类对象抽象模型 240
7.3.2接口测试三层模型 240
7.3.3接口输入用例设计 241
7.3.4接口逻辑用例设计 243
7.3.5接口输出用例设计 245
7.3.6其他部分用例设计 246
7.3.7一个完整的例子 247
7.3.8小结 250
7.4环境依赖安装 250
7.4.1所需第三方库列表 250
7.4.2安装Requests依赖库 251
7.4.3安装RequestsLibrary依赖库 251
7.4.4安装HttpLibrary.HTTP依赖库 251
7.5接口测试设计规范 252
7.5.1接口测试整体分层结构 252
7.5.2接口测试功能划分原则 254
7.5.3接口测试套件命名约定 255
7.5.4接口测试用例命名与分类 255
7.6接口测试项目实战:最佳实践 257
7.6.1实战项目接口分析 257
7.6.2实战项目框架设计 260
7.6.3实战项目业务分层 262
7.6.4实战项目模块划分 264
7.6.5公共请求方法 265
7.6.6业务资源文件 271
7.7接口测试项目实战:用例设计 273
7.7.1实战一:登录型接口功能测试设计 274
7.7.2实战二:列表型接口功能测试设计 286
7.7.3实战三:信息型接口功能测试设计 295
7.7.4实战四:基于业务场景下的接口组合测试设计 301
7.8接口测试项目实战:成果展示 307
7.9RobotFramework实战常用技巧 308
7.9.1一套测试用例支持多个环境运行 309
7.9.2测试用例标签分类策略 311
7.9.3测试套件和测试用例Hook 313
7.9.4动态构造测试数据 315
7.9.5自定义Python方法 317
7.10RobotFramework开发系统关键字 319
7.11RobotFramework+GitLab代码管理 323
7.12RobotFramework+Jenkins构建持续集成 324
7.12.1Jenkins环境搭建 325
7.12.2RobotFrameworkJenkins插件安装 327
7.12.3添加运行节点Slave 328
7.12.4RobotFramework+Job接口自动化测试配置 332
7.12.5RobotFramework+Job测试构建及结果查看 336
第8章基于Selenium的WebUI自动化测试 339
8.1Selenium框架介绍 339
8.1.1Selenium是什么 339
8.1.2Selenium与RobotFramework的关系 339
8.2环境安装 340
8.2.1安装依赖库 340
8.2.2查看库版本 340
8.3第一个示例 340
8.3.1打开RIDE 341
8.3.2创建项目 341
8.3.3创建测试套件 342
8.3.4创建测试用例 342
8.3.5编写测试用例 343
8.3.6运行及查看结果 344
8.4常用关键字 346
8.4.1浏览器操作 346
8.4.2iFrame操作 347
8.4.3输入操作 347
8.4.4单击元素操作 348
8.4.5属性获取 349
8.4.6元素等待操作 349
8.4.7预期结果校验 350
8.4.8Cookie操作 351
8.4.9其他常用关键字 352
8.4.10小结 352
8.5元素定位 353
8.5.1常用定位工具 353
8.5.2常用定位方法 355
8.6多浏览器处理 357
8.6.1Chrome浏览器 357
8.6.2Firefox浏览器 358
8.6.3Safari浏览器 360
8.6.4PhantomJS浏览器 362
8.7RobotFramework+SeleniumWebUI自动化测试项目实战 363
8.7.1实战项目背景说明 363
8.7.2 WebUI项目分层设计 365
8.7.3实战一:WebUI登录类测试设计 367
8.7.4实战二:WebUI应用类测试设计 372
8.7.5实战三:WebUI列表类测试设计 376
8.7.6小结 379
第9章基于Appium的移动端自动化测试 381
9.1Appium框架介绍 381
9.1.1Appium是什么 381
9.1.2Appium常见概念 382
9.1.3Appium工作原理 383
9.1.4Appium与RobotFramework的关系 385
9.2环境搭建 385
9.2.1Android自动化测试所需环境搭建 385
9.2.2Appium框架所需环境搭建 388
9.2.3iOS自动化测试所需环境搭建 391
9.3AppiumDesktop使用介绍 393
9.3.1AppiumDesktop的安装 393
9.3.2AppiumDesktop的功能介绍 393
9.4RobotFramework+Appium开展Android自动化测试 400
9.4.1需要了解的ADB知识 400
9.4.2获取Android设备序列号 402
9.4.3获取App包名和Activity名 403
9.4.4第一个AppiumAndroid自动化测试示例 406
9.4.5获取AndroidApp控件元素的方法 408
9.4.6AndroidApp元素常用定位方式 411
9.4.7AppiumLibrary常用关键字 413
9.4.8Android自动化测试实战:前期准备 414
9.4.9Android自动化测试实战:项目结构设计 416
9.4.10Android自动化测试实战:公共关键字设计 418
9.4.11实战一:实现AndroidApp自动登录测试 420
9.4.12实战二:测试AndroidApp同页面的多个同类型元素 423
9.4.13实战三:获取并断言AndroidAppToast提示信息 427
9.4.14小结 428
9.5RobotFramework+Appium开展iOS自动化测试 429
9.5.1iOS开发证书、描述文件与BundleID的关系 430
9.5.2iOS产出物的几种格式 431
9.5.3获取iOS设备的UDID和AppBundleID 432
9.5.4iOS常用命令 434
9.5.5iOS模拟器的安装和使用 435
9.5.6iOS模拟器simctl常用命令 437
9.5.7Appium安装配置WebDriverAgent 439
9.5.8获取iOSApp控件元素的三种方法 444
9.5.9iOSApp元素常用定位方式 448
9.5.10第一个AppiumiOS模拟器自动化测试示例 450
9.5.11第一个AppiumiOS真机自动化测试示例 452
9.5.12RobotFramework+Appium实现iOS模拟器自动化测试 454
9.5.13RobotFramework+Appium实现iOS真机自动化测试 459
9.5.14小结 464
9.6Appium+Python开展H5混合应用自动化测试 465
9.6.1在混合应用中识别H5页面的几种方法 465
9.6.2混合应用元素定位整体思路 467
9.6.3AppWebView调试模式的检查和开启 467
9.6.4利用DevTools远程调试WebView 468
9.6.5一个Appium+PythonH5自动化测试示例 469
9.6.6小结 475
9.7RobotFramework+Appium开展小程序自动化测试 476
9.7.1小程序和H5的区别 476
9.7.2一个Appium+Python小程序自动化测试示例 477
9.7.3RobotFramework+Appium实现小程序自动化测试 480
9.8本章总结 486
第4部分 扩展篇
第10章RobotFramework框架部分源码解析 490
10.1RobotFramework框架目录结构 490
10.1.1RobotFramework源码位置 490
10.1.2RobotFramework源码目录结构 492
10.2RobotFramework执行用例逻辑分析 500
10.3RobotFramework二次开发—命令行实时显示日志 511