SlideShare a Scribd company logo
1
2
跨平台移动应用的 
自动化验收测试 
QCon Shanghai 2014
4 
我们是谁?
5 
本话题不关注『弱网测试』
6 
』也不关注『性能测试』
甚至都不涉及『如何发现 Bug』 
7
8 
还有什么好说的?
9 
速度为王
10 
平安天下通
11 
正确的做产品 
做正确的产品
做正确的产品 
12 
正确的做产品 
成功的产品 
维护的噩梦 
业务失败 
回家洗洗睡吧 
图例来⾃自《实例化需求:团队如何交付正确的软件》一书
13 
正确的做产品 
• 一致的理解 
• 准确的需求说明 
• 有完成的客观标准 
• 与代码同步的文档
14 
面前的困难 
• 多终端 
• 测试案例多 
• 测试团队压⼒力⼤大 
• 测试覆盖率低 
• 版本发布频繁 
• 自动化工具维护成本高 
• ……
15 
跨平台移动开发的困难 
• 平台差异化 
• 功能需求的差异化 
• 测试⼯工具差异化 
• 文档 
• ……
16 
文档片段 
功能: 登录 
! 
场景: 成功登录 
当我使用有效的手机号和密码登录天下通 
那么我可以成功登录 
! 
场景: 注销登录时要提示用户不会删除任何历史数据 
当我已经登录天下通 
那么我尝试注销登录会看到提示信息 
当我确认注销后 
那么我可以成功注销
17 
演示
18 ! 
官方网址
19 
! 
• 官方网址 http://cukes.info/ 
• 支持很多的编程语言 
Ruby、Java、.NET 
• 使用自然语言来写测试 
中文、英文、吙煋呅、……
20
21
22 
! 
• 基于 Cucumber 
• 目前只支持 iOS 和 Android 
• 支持原生应用和 HTML5 应⽤用 
• 支持模拟器和真机 
• 支持 Ruby 和 Java 
• 有个控制台
23 
! 
query("tabBarButton") 
query("button marked:'查询'") 
touch("button marked:'查询'") 
touch("label {text LIKE 'C*ll'}") 
keyboard_enter_text "Hello World" 
screenshot_and_raise 
……
24 
或许我们还得修改一下代码
25 
或许我们还得修改一下代码
26 
或许我们还得修改一下代码
27 
测试代码结构 
Feature 
Step 
Page 
Action
28 
Feature
29 
Step
30 
Page
31 
Action
32 
跨平台测试代码分层的隔离 
Feature 
Step 
Page 
Action 
需求的描述 
}完全相同 
自然语言的实现 
隔离了平台间的操作差异 
隔离了自动化测试工具的差异
33 
跨平台差异的隔离 
跨平台的需求差异 
跨平台的操作差异
34 
跨平台差异的隔离 
跨平台的需求差异
35 
跨平台差异的隔离 
跨平台的需求差异 
跨平台的操作差异 
cucumber -r features -r features_android_support 
features/pages/login_page.rb features_android_support/pages/login_page.rb
36
37 
跨平台差异的隔离 
跨平台的需求差异 
跨平台的操作差异 
cucumber -r features -r features_android_support 
features/pages/login_page.rb features_android_support/pages/login_page.rb
38 
最终我们达到了 
95%的复用率 
一套测试代码库
39 
但是,多了个 Ruby
40 
没有事先的设计
41 
没有事先的设计 
只是在持续的重构
42 
没有事先的设计 
只是在持续的重构 
测试代码也是代码
43 
新旧对比
44 
团队内部的约定
45 
自动化不是目的
46 
自动化不是目的 
手工测试也很重要
47 
总结 
单元测试 
验收测试 
手工测试 
重构 
约定 
测试代码也是代码 
臭味 
Ruby 
隔离
谢谢 
柴锋,平安科技团队技术教练 
chaifeng@chaifeng.com 
高云,平安科技测试工程师 
gaoyun473@pingan.com.cn

More Related Content

What's hot

Php 5.4 performance
Php 5.4 performancePhp 5.4 performance
Php 5.4 performance
Xinchen Hui
 
Entity Framework實戰
Entity Framework實戰Entity Framework實戰
Entity Framework實戰
國昭 張
 
Weibo lamp improvements
Weibo lamp improvementsWeibo lamp improvements
Weibo lamp improvements
Xinchen Hui
 
Java SE 7 技術手冊投影片第 07 章 - 介面與多型
Java SE 7 技術手冊投影片第 07 章 - 介面與多型Java SE 7 技術手冊投影片第 07 章 - 介面與多型
Java SE 7 技術手冊投影片第 07 章 - 介面與多型
Justin Lin
 
關於 Javascript 非同步的那些事兒 公開版
關於 Javascript 非同步的那些事兒 公開版關於 Javascript 非同步的那些事兒 公開版
關於 Javascript 非同步的那些事兒 公開版
Kirk Chen
 
JavaScript 80+ Programming and Optimization Skills
JavaScript 80+ Programming and Optimization SkillsJavaScript 80+ Programming and Optimization Skills
JavaScript 80+ Programming and Optimization Skills
Ho Kim
 
Java SE 7 技術手冊投影片第 05 章 - 物件封裝
Java SE 7 技術手冊投影片第 05 章  - 物件封裝Java SE 7 技術手冊投影片第 05 章  - 物件封裝
Java SE 7 技術手冊投影片第 05 章 - 物件封裝
Justin Lin
 
驗證與訊息
驗證與訊息驗證與訊息
驗證與訊息
Shengyou Fan
 
Laravel installfest 工作坊 投影片
Laravel installfest 工作坊 投影片Laravel installfest 工作坊 投影片
Laravel installfest 工作坊 投影片
Shengyou Fan
 
驗證與訊息
驗證與訊息驗證與訊息
驗證與訊息
Shengyou Fan
 
選一個框架當好朋友,讓您成為開心攻城獅
選一個框架當好朋友,讓您成為開心攻城獅選一個框架當好朋友,讓您成為開心攻城獅
選一個框架當好朋友,讓您成為開心攻城獅
Shengyou Fan
 
Schema & Migration操作
Schema & Migration操作Schema & Migration操作
Schema & Migration操作
Shengyou Fan
 
Java SE 7 技術手冊投影片第 06 章 - 繼承與多型
Java SE 7 技術手冊投影片第 06 章 - 繼承與多型Java SE 7 技術手冊投影片第 06 章 - 繼承與多型
Java SE 7 技術手冊投影片第 06 章 - 繼承與多型
Justin Lin
 
微博Lamp性能优化之路(2014)
微博Lamp性能优化之路(2014)微博Lamp性能优化之路(2014)
微博Lamp性能优化之路(2014)
Xinchen Hui
 
做自己的可可豆夾 @ cocoahead.tw
做自己的可可豆夾 @ cocoahead.tw做自己的可可豆夾 @ cocoahead.tw
做自己的可可豆夾 @ cocoahead.tw
Kai-Yuan Cheng
 
Model 設定與 Seeding
Model 設定與 SeedingModel 設定與 Seeding
Model 設定與 Seeding
Shengyou Fan
 
給你一個使用 Laravel 的理由
給你一個使用 Laravel 的理由給你一個使用 Laravel 的理由
給你一個使用 Laravel 的理由
Shengyou Fan
 
Entity framework + Linq 介紹
Entity framework + Linq 介紹Entity framework + Linq 介紹
Entity framework + Linq 介紹
Alan Tsai
 
Java SE 7 技術手冊投影片第 04 章 - 認識物件
Java SE 7 技術手冊投影片第 04 章 - 認識物件Java SE 7 技術手冊投影片第 04 章 - 認識物件
Java SE 7 技術手冊投影片第 04 章 - 認識物件
Justin Lin
 
Model 設定與 Seeding
Model 設定與 SeedingModel 設定與 Seeding
Model 設定與 Seeding
Shengyou Fan
 

What's hot (20)

Php 5.4 performance
Php 5.4 performancePhp 5.4 performance
Php 5.4 performance
 
Entity Framework實戰
Entity Framework實戰Entity Framework實戰
Entity Framework實戰
 
Weibo lamp improvements
Weibo lamp improvementsWeibo lamp improvements
Weibo lamp improvements
 
Java SE 7 技術手冊投影片第 07 章 - 介面與多型
Java SE 7 技術手冊投影片第 07 章 - 介面與多型Java SE 7 技術手冊投影片第 07 章 - 介面與多型
Java SE 7 技術手冊投影片第 07 章 - 介面與多型
 
關於 Javascript 非同步的那些事兒 公開版
關於 Javascript 非同步的那些事兒 公開版關於 Javascript 非同步的那些事兒 公開版
關於 Javascript 非同步的那些事兒 公開版
 
JavaScript 80+ Programming and Optimization Skills
JavaScript 80+ Programming and Optimization SkillsJavaScript 80+ Programming and Optimization Skills
JavaScript 80+ Programming and Optimization Skills
 
Java SE 7 技術手冊投影片第 05 章 - 物件封裝
Java SE 7 技術手冊投影片第 05 章  - 物件封裝Java SE 7 技術手冊投影片第 05 章  - 物件封裝
Java SE 7 技術手冊投影片第 05 章 - 物件封裝
 
驗證與訊息
驗證與訊息驗證與訊息
驗證與訊息
 
Laravel installfest 工作坊 投影片
Laravel installfest 工作坊 投影片Laravel installfest 工作坊 投影片
Laravel installfest 工作坊 投影片
 
驗證與訊息
驗證與訊息驗證與訊息
驗證與訊息
 
選一個框架當好朋友,讓您成為開心攻城獅
選一個框架當好朋友,讓您成為開心攻城獅選一個框架當好朋友,讓您成為開心攻城獅
選一個框架當好朋友,讓您成為開心攻城獅
 
Schema & Migration操作
Schema & Migration操作Schema & Migration操作
Schema & Migration操作
 
Java SE 7 技術手冊投影片第 06 章 - 繼承與多型
Java SE 7 技術手冊投影片第 06 章 - 繼承與多型Java SE 7 技術手冊投影片第 06 章 - 繼承與多型
Java SE 7 技術手冊投影片第 06 章 - 繼承與多型
 
微博Lamp性能优化之路(2014)
微博Lamp性能优化之路(2014)微博Lamp性能优化之路(2014)
微博Lamp性能优化之路(2014)
 
做自己的可可豆夾 @ cocoahead.tw
做自己的可可豆夾 @ cocoahead.tw做自己的可可豆夾 @ cocoahead.tw
做自己的可可豆夾 @ cocoahead.tw
 
Model 設定與 Seeding
Model 設定與 SeedingModel 設定與 Seeding
Model 設定與 Seeding
 
給你一個使用 Laravel 的理由
給你一個使用 Laravel 的理由給你一個使用 Laravel 的理由
給你一個使用 Laravel 的理由
 
Entity framework + Linq 介紹
Entity framework + Linq 介紹Entity framework + Linq 介紹
Entity framework + Linq 介紹
 
Java SE 7 技術手冊投影片第 04 章 - 認識物件
Java SE 7 技術手冊投影片第 04 章 - 認識物件Java SE 7 技術手冊投影片第 04 章 - 認識物件
Java SE 7 技術手冊投影片第 04 章 - 認識物件
 
Model 設定與 Seeding
Model 設定與 SeedingModel 設定與 Seeding
Model 設定與 Seeding
 

Viewers also liked

冉有 支付宝钱包的研发挑战和最佳实践
冉有 支付宝钱包的研发挑战和最佳实践冉有 支付宝钱包的研发挑战和最佳实践
冉有 支付宝钱包的研发挑战和最佳实践
Trinea Trinea
 
手机自动化测试解决方案
手机自动化测试解决方案手机自动化测试解决方案
手机自动化测试解决方案
懿民 施
 
淺談 Geb 網站自動化測試(JCConf 2014)
淺談 Geb 網站自動化測試(JCConf 2014)淺談 Geb 網站自動化測試(JCConf 2014)
淺談 Geb 網站自動化測試(JCConf 2014)
Kyle Lin
 
Test automation with Cucumber-JVM
Test automation with Cucumber-JVMTest automation with Cucumber-JVM
Test automation with Cucumber-JVM
Alan Parkinson
 
Introduction to Selenium Web Driver
Introduction to Selenium Web DriverIntroduction to Selenium Web Driver
Introduction to Selenium Web Driver
Return on Intelligence
 
Automation Testing using Selenium
Automation Testing using SeleniumAutomation Testing using Selenium
Automation Testing using Selenium
Naresh Chintalcheru
 

Viewers also liked (7)

冉有 支付宝钱包的研发挑战和最佳实践
冉有 支付宝钱包的研发挑战和最佳实践冉有 支付宝钱包的研发挑战和最佳实践
冉有 支付宝钱包的研发挑战和最佳实践
 
手机自动化测试解决方案
手机自动化测试解决方案手机自动化测试解决方案
手机自动化测试解决方案
 
淺談 Geb 網站自動化測試(JCConf 2014)
淺談 Geb 網站自動化測試(JCConf 2014)淺談 Geb 網站自動化測試(JCConf 2014)
淺談 Geb 網站自動化測試(JCConf 2014)
 
Test automation with Cucumber-JVM
Test automation with Cucumber-JVMTest automation with Cucumber-JVM
Test automation with Cucumber-JVM
 
Introduction to Selenium Web Driver
Introduction to Selenium Web DriverIntroduction to Selenium Web Driver
Introduction to Selenium Web Driver
 
Automation Testing using Selenium
Automation Testing using SeleniumAutomation Testing using Selenium
Automation Testing using Selenium
 
Selenium ppt
Selenium pptSelenium ppt
Selenium ppt
 

Similar to 柴锋 跨平台移动应用的自动化验收测试

Mobile app的測試v2
Mobile app的測試v2Mobile app的測試v2
Mobile app的測試v2Mr PM
 
要质量还是要速度
要质量还是要速度要质量还是要速度
要质量还是要速度
Lijie Wang
 
BDD in .NET
BDD in .NETBDD in .NET
BDD in .NET
Joey Chen
 
敏捷自动化测试中的教训 45min 中文
敏捷自动化测试中的教训 45min   中文敏捷自动化测试中的教训 45min   中文
敏捷自动化测试中的教训 45min 中文Shuyong Lin
 
Test corner #20 誰說只有測試金字塔
Test corner #20 誰說只有測試金字塔Test corner #20 誰說只有測試金字塔
Test corner #20 誰說只有測試金字塔
yinwilliam
 
Top100summit 游戏中的自动化测试 - 金山 - 白银祖
Top100summit 游戏中的自动化测试 - 金山 - 白银祖Top100summit 游戏中的自动化测试 - 金山 - 白银祖
Top100summit 游戏中的自动化测试 - 金山 - 白银祖drewz lin
 
版控實務
版控實務版控實務
版控實務
Robin
 
Nb的敏捷
Nb的敏捷Nb的敏捷
Nb的敏捷oulan
 
iOS产品如何实现快速版本发布
iOS产品如何实现快速版本发布iOS产品如何实现快速版本发布
iOS产品如何实现快速版本发布
Bin Feng
 
天猫大促性能测试实践 耿电
天猫大促性能测试实践 耿电天猫大促性能测试实践 耿电
天猫大促性能测试实践 耿电drewz lin
 
超理性使用者介面設計 - Data-driven A/B Testing
超理性使用者介面設計 - Data-driven A/B Testing超理性使用者介面設計 - Data-driven A/B Testing
超理性使用者介面設計 - Data-driven A/B Testing
Ying-Hsiang Liao
 
The way to continuous delivery
The way to continuous deliveryThe way to continuous delivery
The way to continuous delivery
Qiao Liang
 
Running a Service in Production without Losing Your Sanity
Running a Service in Production without Losing Your SanityRunning a Service in Production without Losing Your Sanity
Running a Service in Production without Losing Your Sanity
Poga Po
 
App operationattaobao-velocity2010 bj-final
App operationattaobao-velocity2010 bj-finalApp operationattaobao-velocity2010 bj-final
App operationattaobao-velocity2010 bj-final
iambuku
 
Beta testing with CI
Beta testing with CIBeta testing with CI
Beta testing with CI
Liyao Chen
 
Discover agile(agile tour)-owen chen-iji
Discover agile(agile tour)-owen chen-ijiDiscover agile(agile tour)-owen chen-iji
Discover agile(agile tour)-owen chen-ijiOdd-e
 
移动测试中心Bmtc
移动测试中心Bmtc移动测试中心Bmtc
移动测试中心Bmtcdrewz lin
 
Test and Software Quality
Test and Software QualityTest and Software Quality
Test and Software Quality
Enzo Wang
 

Similar to 柴锋 跨平台移动应用的自动化验收测试 (20)

Mobile app的測試v2
Mobile app的測試v2Mobile app的測試v2
Mobile app的測試v2
 
要质量还是要速度
要质量还是要速度要质量还是要速度
要质量还是要速度
 
BDD in .NET
BDD in .NETBDD in .NET
BDD in .NET
 
敏捷自动化测试中的教训 45min 中文
敏捷自动化测试中的教训 45min   中文敏捷自动化测试中的教训 45min   中文
敏捷自动化测试中的教训 45min 中文
 
Nb的敏捷
Nb的敏捷Nb的敏捷
Nb的敏捷
 
Test corner #20 誰說只有測試金字塔
Test corner #20 誰說只有測試金字塔Test corner #20 誰說只有測試金字塔
Test corner #20 誰說只有測試金字塔
 
Top100summit 游戏中的自动化测试 - 金山 - 白银祖
Top100summit 游戏中的自动化测试 - 金山 - 白银祖Top100summit 游戏中的自动化测试 - 金山 - 白银祖
Top100summit 游戏中的自动化测试 - 金山 - 白银祖
 
版控實務
版控實務版控實務
版控實務
 
Nb的敏捷
Nb的敏捷Nb的敏捷
Nb的敏捷
 
iOS产品如何实现快速版本发布
iOS产品如何实现快速版本发布iOS产品如何实现快速版本发布
iOS产品如何实现快速版本发布
 
天猫大促性能测试实践 耿电
天猫大促性能测试实践 耿电天猫大促性能测试实践 耿电
天猫大促性能测试实践 耿电
 
超理性使用者介面設計 - Data-driven A/B Testing
超理性使用者介面設計 - Data-driven A/B Testing超理性使用者介面設計 - Data-driven A/B Testing
超理性使用者介面設計 - Data-driven A/B Testing
 
The way to continuous delivery
The way to continuous deliveryThe way to continuous delivery
The way to continuous delivery
 
Running a Service in Production without Losing Your Sanity
Running a Service in Production without Losing Your SanityRunning a Service in Production without Losing Your Sanity
Running a Service in Production without Losing Your Sanity
 
App operationattaobao-velocity2010 bj-final
App operationattaobao-velocity2010 bj-finalApp operationattaobao-velocity2010 bj-final
App operationattaobao-velocity2010 bj-final
 
Beta testing with CI
Beta testing with CIBeta testing with CI
Beta testing with CI
 
work@baidu 2014
work@baidu 2014work@baidu 2014
work@baidu 2014
 
Discover agile(agile tour)-owen chen-iji
Discover agile(agile tour)-owen chen-ijiDiscover agile(agile tour)-owen chen-iji
Discover agile(agile tour)-owen chen-iji
 
移动测试中心Bmtc
移动测试中心Bmtc移动测试中心Bmtc
移动测试中心Bmtc
 
Test and Software Quality
Test and Software QualityTest and Software Quality
Test and Software Quality
 

柴锋 跨平台移动应用的自动化验收测试