SlideShare uma empresa Scribd logo
1 de 35
网易 - 孔 云庆
网易移 自 化 践动 动 测试实
主要内容
• Android UI 自 化 践动 测试实
• Android 性能 践测试实
• IOS UI 自 化 探索动 测试
Android UI 自 化 践动 测试实
使用 Robotium 的发现 问题
1 、 用例 Crash 收集不到 果测试结
2 、用例 Timeout 收集不到 果测试结
3 、用例 定性稳 问题
4 、不能失败自 截屏动
5 、没有直 的观 告测试报
6 、不能自动 SDK 全版本回归
Crash 问题
adb shell am instrument -w -e class com.android.foo.FooT
est#testFoo com.android.foo/android.test.Instrumenta
tionTestRunner
 PC 端 送命令发 每次 行一个用例运

返回 出值 现 shortMsg=Process crashed
用例 果 注结 标 为 crash
Crash 问题
 参考 TestNG 在 PC 端新增 xml 配置 行的 用例执 测试
<classes timeout=“300”>
<class name=“com.netease.autotest.LoginTest">
<methods>
<include name="testLogin” maxCount=“2" />
</methods>
</class>
</classes>
Timeout 问题
 每个用例 置设 timeout 时间
<classes timeout="300“ >
<class name="com.netease.autotest.LoginTest">
<methods>
<include name="testLogin” maxCount=“2" />
</methods>
</class>
</classes>
 PC端 控监 adb 命令,如果指定的 没有返回,用例 果 注时间 结 标 为 timeout
用例 定性稳 问题
加入失 重 机制败 跑
 xml 文件配置用例重 次数跑
<classes timeout=“300” maxCount=“3" >
<class name="com.netease.autotest.LoginTest">
<methods>
<include name="testLogin” />
</methods>
</class>
</classes>
用例 定性稳 问题
 使用 android-junit-report工具生成 xml
 PC 端 取获 xml 行解析,失 重进 败则 跑
当前我 用例通 率在们 过 95% 以上
失 自 截屏败 动
 承继 ActivityInstrumentationTestCase2 ,重写 runTest 方法
@Override
public void runTest() throws Exception {
try {
super.runTest();
} catch (Exception e) {
solo.takeScreenshot(screenshotName);
throw e;
}}
 PC 端使用 adb 命令取出 片图
直 的 告观 测试报
PC 端解析 xml 果文件,生成结 html
自动 SDK 全版本回归
自动 SDK 全版本回归
 真机
USB 接连 PC 、 置设
 模 器拟
自 建、 、动创 启动 重启、 除删
android create avd --name 2.3 --target android-10
emulator -avd 2.3
android delete avd --name 2.3
自动 SDK 全版本回归
 自 重 名动 签 APK
jarsigner
 自 安装卸动 载 apk
adb install
adb uninstall
SDK 全版本回归 - 分享经验

行运 模 器拟 推荐在 Linux/Mac 系 ,统 Windows 非常不 定稳
 真机 源不 ,可以使用模 器自资 够 拟 动 SDK 全版本回归
 利用真机晚上的空 行用例闲时间运

SDK 全版本回 是归 有必要的
兼容性发现 问题

使用开发 不兼容 API , 致 用低版本下导 应 crash

低 sdk 版本下 源名称和系 相同资 统 , 源 控件低版本下不可资 对应 见
基于 Robotium 展扩 -Orange

Orange 配置简单 整个自 化实现 动 测试 程自 化过 动
Java –jar Orange.jar config.properties
Config.properties
target=1.6, 2.1,android-7,android-8,android-10,android-15
devicename=HT843KV06088 , N760_CHINATELECOM
apkpath=/apk/pris.apk
testapkpath=/bin/PrisAndroidUITest-release.apk
keystore=debug.keystore
maillists=kevinkong@corp.netease.com
testCaseFile=/test-xml/AllTestCases.xml
logTag=System.err
用例可 性、可 性 践读 维护 实
 推荐使用 R.java 行元素定位进
getView(index)
getView(R.id. loginButton)

用例解耦
失 排 方便败 查维护
可以 独 行用例单 运
失 可以 独重败 单 跑
用例可 性、可 性 践读 维护 实

使用 Page Object 模式
LoginTest.java
public void testSucceedToLogin () {
loginPage.enterUsername(“***@163.com”);
loginPage.enterPassword(“****”);
gridPage = loginPage.clickOnLoginButton();
boolean isMainPage = gridPage.isMainGridPage();
Assert.assertTrue(“ 登 失陆 败 ", isMainPage);
}
用例可 性、可 性 践读 维护 实
 LoginPage.java
public void enterUsername(String userName) {
EditText edtUserName = (EditText) orange.getView(R.id.username);
orange.clearEditText(edtUserName );
orange.enterText(edtUserName , userName);
}
public void enterPassword(String passWord) {
****
}
public MainGridPage clickOnLoginButton() {
orange.clickOnView(orange.getView(R.id.btnLogin));
return new MainGridPage(orange);
}
持 集成 践续 实
持 集成 践续 实
Android 性能 践测试实
 自 化动 性能测试
自 化收集被 用动 测应 CPU 、内存、流量、 量等性能数据电
Android 性能 践测试实
 助手工 自 化收集被 用性能数据协 测试 动 测应
Emmagee- 源性能 工具开 测试
https://github.com/NetEase/Emmagee
1 、支持 指定 用 行 程中性能测试 应 运 过
2 、当前支持 CPU 、内存、流量
3 、支持浮窗 示性能数据实时显
4 、 果保存测试结 为 CSV 文件
Android 性能 践测试实
Android 性能测试 - 后 工作续
 和 UI 自 化动 测试 合结
 于对 性能 化优 的探索
 基于用 体 的性能户 验 测试的探索
IOS UI 自 化 探索动 测试
UIAutomation
IOS UI 自 化 探索动 测试
 使用 UIAutomation 发现问题
1 、 API 写用例编 可 性、可 性读 维护 差
2 、需要用例失 重 机制败 跑
3 、用例 果 告结 报 不直观
API 可 性、可 性读 维护 - 解决
 UIAutomation API
var app = UIATarget.localTarget().frontMostApp();
var window = app.mainWindow();
window. tableViews()[0]. buttons()[“ 登 ”录 ].tap();
 API 二次封装
tuneup_js
 封装后的 API
var loginButton= Orange.getElementByName(“ 登录 ");
Orange.clickOnElement(loginButton);
API 可 性、可 性读 维护 - 解决
test("Login_ 孔 云庆 ", function() {
var userName = Orange.getElementByType("UIATextField");
userName.setValue(“test@163.com");
var password = Orange.getElementByType("UIASecureTextField");
password.setValue("****");
var loginButton = Orange.getElementByName(" 登录 ");
Orange.clickOnElement(loginButton);
var userCell = Orange.getTableCell(" 空列表 ");
var userInfo = userCell.name();
Assert.assertMatch(/test@163.com/,userInfo," 登 后的信息不陆 对 " );
});
用例失 重 机制败 跑 - 解决
Instruments –w udid –t Automation.tracetemplate appNa
me -e UIASCRIPT login.js
 PC 端通 送命令 行用例过发 执

解析 Automation Results.plist 果文件,失结 败
重跑
用例 果不直测试结 观 - 解决
PC 端解析 Automation Results.plist 生成直 的 果 告观 结 报
用例 果不直测试结 观 - 解决
PC 端解析 Automation Results.plist 生成直观 Log 日志
后 展望续
 一统 Android 、 IOS 框架
 一份 脚本、多个平台 行测试 运
 采用 BDD ,通 描述 言 写 用例过 语 编 测试
 描述 言语 = 手工用例 = 自 用例动
Q&A
讨论话题
 1 、移 自 化 中 到的动 动 测试 碰 问题
 2 、如何更好的提高移 自 化 的收益动 动 测试
 3 、如何 品方更加的重 自 化让产 视 动 测试
 4 、如何 自 化 框架 行部 内推广针对 动 测试 进 门

Mais conteúdo relacionado

Mais procurados

例外處理與單元測試
例外處理與單元測試例外處理與單元測試
例外處理與單元測試國昭 張
 
Appium手机自动化测试 tester home公开课
Appium手机自动化测试 tester home公开课Appium手机自动化测试 tester home公开课
Appium手机自动化测试 tester home公开课lihuazhang
 
Clipper@datacon.2019.tw
Clipper@datacon.2019.twClipper@datacon.2019.tw
Clipper@datacon.2019.twWei-Yu Chen
 
Automated Web Testing Using Selenium
Automated Web Testing Using SeleniumAutomated Web Testing Using Selenium
Automated Web Testing Using Selenium昱劭 劉
 
Mvc training
Mvc trainingMvc training
Mvc trainingxioxu
 
例外處理實務
例外處理實務例外處理實務
例外處理實務Jeff Chu
 
Top100summit automan x之框架介绍 王超
Top100summit automan x之框架介绍 王超Top100summit automan x之框架介绍 王超
Top100summit automan x之框架介绍 王超drewz lin
 

Mais procurados (7)

例外處理與單元測試
例外處理與單元測試例外處理與單元測試
例外處理與單元測試
 
Appium手机自动化测试 tester home公开课
Appium手机自动化测试 tester home公开课Appium手机自动化测试 tester home公开课
Appium手机自动化测试 tester home公开课
 
Clipper@datacon.2019.tw
Clipper@datacon.2019.twClipper@datacon.2019.tw
Clipper@datacon.2019.tw
 
Automated Web Testing Using Selenium
Automated Web Testing Using SeleniumAutomated Web Testing Using Selenium
Automated Web Testing Using Selenium
 
Mvc training
Mvc trainingMvc training
Mvc training
 
例外處理實務
例外處理實務例外處理實務
例外處理實務
 
Top100summit automan x之框架介绍 王超
Top100summit automan x之框架介绍 王超Top100summit automan x之框架介绍 王超
Top100summit automan x之框架介绍 王超
 

Semelhante a 网易移动自动化测试实践(孔庆云)

豆瓣I os自动化测试实践和经验
豆瓣I os自动化测试实践和经验豆瓣I os自动化测试实践和经验
豆瓣I os自动化测试实践和经验drewz lin
 
张所勇:前端开发工具推荐
张所勇:前端开发工具推荐张所勇:前端开发工具推荐
张所勇:前端开发工具推荐zhangsuoyong
 
Android应用开发 - 沈大海
Android应用开发 - 沈大海Android应用开发 - 沈大海
Android应用开发 - 沈大海Shaoning Pan
 
110929 kn-手机软件测试
110929 kn-手机软件测试110929 kn-手机软件测试
110929 kn-手机软件测试Zoom Quiet
 
Er introduction
Er introductionEr introduction
Er introductionYubei Li
 
钱宝坤:多浏览器集成的JavaScript单元测试工具
钱宝坤:多浏览器集成的JavaScript单元测试工具钱宝坤:多浏览器集成的JavaScript单元测试工具
钱宝坤:多浏览器集成的JavaScript单元测试工具taobao.com
 
手机自动化测试解决方案
手机自动化测试解决方案手机自动化测试解决方案
手机自动化测试解决方案懿民 施
 
Efficient JavaScript Unit Testing (Chinese Version), JavaOne China 2013
Efficient JavaScript Unit Testing (Chinese Version), JavaOne China 2013Efficient JavaScript Unit Testing (Chinese Version), JavaOne China 2013
Efficient JavaScript Unit Testing (Chinese Version), JavaOne China 2013Hazem Saleh
 
容器驅動開發 - .NET Conf 2017 @ 台中
容器驅動開發 - .NET Conf 2017 @ 台中容器驅動開發 - .NET Conf 2017 @ 台中
容器驅動開發 - .NET Conf 2017 @ 台中Andrew Wu
 
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天Gelis Wu
 
J engine -构建高性能、可监控的前端应用框架
J engine -构建高性能、可监控的前端应用框架J engine -构建高性能、可监控的前端应用框架
J engine -构建高性能、可监控的前端应用框架fangdeng
 
J engine -构建高性能、可监控的前端应用框架
J engine -构建高性能、可监控的前端应用框架J engine -构建高性能、可监控的前端应用框架
J engine -构建高性能、可监控的前端应用框架wtxidian
 
Appium手机自动化测试 testerhome_bqcon版本
Appium手机自动化测试 testerhome_bqcon版本Appium手机自动化测试 testerhome_bqcon版本
Appium手机自动化测试 testerhome_bqcon版本延胜 黄
 
Azure Functions
Azure FunctionsAzure Functions
Azure FunctionsDino Wang
 
轻量级Flash服务器开发框架(刘恒)
轻量级Flash服务器开发框架(刘恒)轻量级Flash服务器开发框架(刘恒)
轻量级Flash服务器开发框架(刘恒)FLASH开发者交流会
 
[嵌入式系統] 嵌入式系統進階
[嵌入式系統] 嵌入式系統進階[嵌入式系統] 嵌入式系統進階
[嵌入式系統] 嵌入式系統進階Simen Li
 
zhuwenlongChinese
zhuwenlongChinesezhuwenlongChinese
zhuwenlongChineseWenlong Zhu
 
常用开发工具介绍
常用开发工具介绍常用开发工具介绍
常用开发工具介绍haozes
 
PHPUnit slide formal
PHPUnit slide formalPHPUnit slide formal
PHPUnit slide formaljameslabs
 

Semelhante a 网易移动自动化测试实践(孔庆云) (20)

豆瓣I os自动化测试实践和经验
豆瓣I os自动化测试实践和经验豆瓣I os自动化测试实践和经验
豆瓣I os自动化测试实践和经验
 
张所勇:前端开发工具推荐
张所勇:前端开发工具推荐张所勇:前端开发工具推荐
张所勇:前端开发工具推荐
 
beidakejian
beidakejianbeidakejian
beidakejian
 
Android应用开发 - 沈大海
Android应用开发 - 沈大海Android应用开发 - 沈大海
Android应用开发 - 沈大海
 
110929 kn-手机软件测试
110929 kn-手机软件测试110929 kn-手机软件测试
110929 kn-手机软件测试
 
Er introduction
Er introductionEr introduction
Er introduction
 
钱宝坤:多浏览器集成的JavaScript单元测试工具
钱宝坤:多浏览器集成的JavaScript单元测试工具钱宝坤:多浏览器集成的JavaScript单元测试工具
钱宝坤:多浏览器集成的JavaScript单元测试工具
 
手机自动化测试解决方案
手机自动化测试解决方案手机自动化测试解决方案
手机自动化测试解决方案
 
Efficient JavaScript Unit Testing (Chinese Version), JavaOne China 2013
Efficient JavaScript Unit Testing (Chinese Version), JavaOne China 2013Efficient JavaScript Unit Testing (Chinese Version), JavaOne China 2013
Efficient JavaScript Unit Testing (Chinese Version), JavaOne China 2013
 
容器驅動開發 - .NET Conf 2017 @ 台中
容器驅動開發 - .NET Conf 2017 @ 台中容器驅動開發 - .NET Conf 2017 @ 台中
容器驅動開發 - .NET Conf 2017 @ 台中
 
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
 
J engine -构建高性能、可监控的前端应用框架
J engine -构建高性能、可监控的前端应用框架J engine -构建高性能、可监控的前端应用框架
J engine -构建高性能、可监控的前端应用框架
 
J engine -构建高性能、可监控的前端应用框架
J engine -构建高性能、可监控的前端应用框架J engine -构建高性能、可监控的前端应用框架
J engine -构建高性能、可监控的前端应用框架
 
Appium手机自动化测试 testerhome_bqcon版本
Appium手机自动化测试 testerhome_bqcon版本Appium手机自动化测试 testerhome_bqcon版本
Appium手机自动化测试 testerhome_bqcon版本
 
Azure Functions
Azure FunctionsAzure Functions
Azure Functions
 
轻量级Flash服务器开发框架(刘恒)
轻量级Flash服务器开发框架(刘恒)轻量级Flash服务器开发框架(刘恒)
轻量级Flash服务器开发框架(刘恒)
 
[嵌入式系統] 嵌入式系統進階
[嵌入式系統] 嵌入式系統進階[嵌入式系統] 嵌入式系統進階
[嵌入式系統] 嵌入式系統進階
 
zhuwenlongChinese
zhuwenlongChinesezhuwenlongChinese
zhuwenlongChinese
 
常用开发工具介绍
常用开发工具介绍常用开发工具介绍
常用开发工具介绍
 
PHPUnit slide formal
PHPUnit slide formalPHPUnit slide formal
PHPUnit slide formal
 

Mais de drewz lin

Web security-–-everything-we-know-is-wrong-eoin-keary
Web security-–-everything-we-know-is-wrong-eoin-kearyWeb security-–-everything-we-know-is-wrong-eoin-keary
Web security-–-everything-we-know-is-wrong-eoin-kearydrewz lin
 
Via forensics appsecusa-nov-2013
Via forensics appsecusa-nov-2013Via forensics appsecusa-nov-2013
Via forensics appsecusa-nov-2013drewz lin
 
Phu appsec13
Phu appsec13Phu appsec13
Phu appsec13drewz lin
 
Owasp2013 johannesullrich
Owasp2013 johannesullrichOwasp2013 johannesullrich
Owasp2013 johannesullrichdrewz lin
 
Owasp advanced mobile-application-code-review-techniques-v0.2
Owasp advanced mobile-application-code-review-techniques-v0.2Owasp advanced mobile-application-code-review-techniques-v0.2
Owasp advanced mobile-application-code-review-techniques-v0.2drewz lin
 
I mas appsecusa-nov13-v2
I mas appsecusa-nov13-v2I mas appsecusa-nov13-v2
I mas appsecusa-nov13-v2drewz lin
 
Defeating xss-and-xsrf-with-my faces-frameworks-steve-wolf
Defeating xss-and-xsrf-with-my faces-frameworks-steve-wolfDefeating xss-and-xsrf-with-my faces-frameworks-steve-wolf
Defeating xss-and-xsrf-with-my faces-frameworks-steve-wolfdrewz lin
 
Csrf not-all-defenses-are-created-equal
Csrf not-all-defenses-are-created-equalCsrf not-all-defenses-are-created-equal
Csrf not-all-defenses-are-created-equaldrewz lin
 
Chuck willis-owaspbwa-beyond-1.0-app secusa-2013-11-21
Chuck willis-owaspbwa-beyond-1.0-app secusa-2013-11-21Chuck willis-owaspbwa-beyond-1.0-app secusa-2013-11-21
Chuck willis-owaspbwa-beyond-1.0-app secusa-2013-11-21drewz lin
 
Appsec usa roberthansen
Appsec usa roberthansenAppsec usa roberthansen
Appsec usa roberthansendrewz lin
 
Appsec usa2013 js_libinsecurity_stefanodipaola
Appsec usa2013 js_libinsecurity_stefanodipaolaAppsec usa2013 js_libinsecurity_stefanodipaola
Appsec usa2013 js_libinsecurity_stefanodipaoladrewz lin
 
Appsec2013 presentation-dickson final-with_all_final_edits
Appsec2013 presentation-dickson final-with_all_final_editsAppsec2013 presentation-dickson final-with_all_final_edits
Appsec2013 presentation-dickson final-with_all_final_editsdrewz lin
 
Appsec2013 presentation
Appsec2013 presentationAppsec2013 presentation
Appsec2013 presentationdrewz lin
 
Appsec 2013-krehel-ondrej-forensic-investigations-of-web-exploitations
Appsec 2013-krehel-ondrej-forensic-investigations-of-web-exploitationsAppsec 2013-krehel-ondrej-forensic-investigations-of-web-exploitations
Appsec 2013-krehel-ondrej-forensic-investigations-of-web-exploitationsdrewz lin
 
Appsec2013 assurance tagging-robert martin
Appsec2013 assurance tagging-robert martinAppsec2013 assurance tagging-robert martin
Appsec2013 assurance tagging-robert martindrewz lin
 
Amol scadaowasp
Amol scadaowaspAmol scadaowasp
Amol scadaowaspdrewz lin
 
Agile sdlc-v1.1-owasp-app sec-usa
Agile sdlc-v1.1-owasp-app sec-usaAgile sdlc-v1.1-owasp-app sec-usa
Agile sdlc-v1.1-owasp-app sec-usadrewz lin
 
Vulnex app secusa2013
Vulnex app secusa2013Vulnex app secusa2013
Vulnex app secusa2013drewz lin
 
基于虚拟化技术的分布式软件测试框架
基于虚拟化技术的分布式软件测试框架基于虚拟化技术的分布式软件测试框架
基于虚拟化技术的分布式软件测试框架drewz lin
 
新浪微博稳定性经验谈
新浪微博稳定性经验谈新浪微博稳定性经验谈
新浪微博稳定性经验谈drewz lin
 

Mais de drewz lin (20)

Web security-–-everything-we-know-is-wrong-eoin-keary
Web security-–-everything-we-know-is-wrong-eoin-kearyWeb security-–-everything-we-know-is-wrong-eoin-keary
Web security-–-everything-we-know-is-wrong-eoin-keary
 
Via forensics appsecusa-nov-2013
Via forensics appsecusa-nov-2013Via forensics appsecusa-nov-2013
Via forensics appsecusa-nov-2013
 
Phu appsec13
Phu appsec13Phu appsec13
Phu appsec13
 
Owasp2013 johannesullrich
Owasp2013 johannesullrichOwasp2013 johannesullrich
Owasp2013 johannesullrich
 
Owasp advanced mobile-application-code-review-techniques-v0.2
Owasp advanced mobile-application-code-review-techniques-v0.2Owasp advanced mobile-application-code-review-techniques-v0.2
Owasp advanced mobile-application-code-review-techniques-v0.2
 
I mas appsecusa-nov13-v2
I mas appsecusa-nov13-v2I mas appsecusa-nov13-v2
I mas appsecusa-nov13-v2
 
Defeating xss-and-xsrf-with-my faces-frameworks-steve-wolf
Defeating xss-and-xsrf-with-my faces-frameworks-steve-wolfDefeating xss-and-xsrf-with-my faces-frameworks-steve-wolf
Defeating xss-and-xsrf-with-my faces-frameworks-steve-wolf
 
Csrf not-all-defenses-are-created-equal
Csrf not-all-defenses-are-created-equalCsrf not-all-defenses-are-created-equal
Csrf not-all-defenses-are-created-equal
 
Chuck willis-owaspbwa-beyond-1.0-app secusa-2013-11-21
Chuck willis-owaspbwa-beyond-1.0-app secusa-2013-11-21Chuck willis-owaspbwa-beyond-1.0-app secusa-2013-11-21
Chuck willis-owaspbwa-beyond-1.0-app secusa-2013-11-21
 
Appsec usa roberthansen
Appsec usa roberthansenAppsec usa roberthansen
Appsec usa roberthansen
 
Appsec usa2013 js_libinsecurity_stefanodipaola
Appsec usa2013 js_libinsecurity_stefanodipaolaAppsec usa2013 js_libinsecurity_stefanodipaola
Appsec usa2013 js_libinsecurity_stefanodipaola
 
Appsec2013 presentation-dickson final-with_all_final_edits
Appsec2013 presentation-dickson final-with_all_final_editsAppsec2013 presentation-dickson final-with_all_final_edits
Appsec2013 presentation-dickson final-with_all_final_edits
 
Appsec2013 presentation
Appsec2013 presentationAppsec2013 presentation
Appsec2013 presentation
 
Appsec 2013-krehel-ondrej-forensic-investigations-of-web-exploitations
Appsec 2013-krehel-ondrej-forensic-investigations-of-web-exploitationsAppsec 2013-krehel-ondrej-forensic-investigations-of-web-exploitations
Appsec 2013-krehel-ondrej-forensic-investigations-of-web-exploitations
 
Appsec2013 assurance tagging-robert martin
Appsec2013 assurance tagging-robert martinAppsec2013 assurance tagging-robert martin
Appsec2013 assurance tagging-robert martin
 
Amol scadaowasp
Amol scadaowaspAmol scadaowasp
Amol scadaowasp
 
Agile sdlc-v1.1-owasp-app sec-usa
Agile sdlc-v1.1-owasp-app sec-usaAgile sdlc-v1.1-owasp-app sec-usa
Agile sdlc-v1.1-owasp-app sec-usa
 
Vulnex app secusa2013
Vulnex app secusa2013Vulnex app secusa2013
Vulnex app secusa2013
 
基于虚拟化技术的分布式软件测试框架
基于虚拟化技术的分布式软件测试框架基于虚拟化技术的分布式软件测试框架
基于虚拟化技术的分布式软件测试框架
 
新浪微博稳定性经验谈
新浪微博稳定性经验谈新浪微博稳定性经验谈
新浪微博稳定性经验谈
 

网易移动自动化测试实践(孔庆云)

  • 1. 网易 - 孔 云庆 网易移 自 化 践动 动 测试实
  • 2. 主要内容 • Android UI 自 化 践动 测试实 • Android 性能 践测试实 • IOS UI 自 化 探索动 测试
  • 3. Android UI 自 化 践动 测试实
  • 4. 使用 Robotium 的发现 问题 1 、 用例 Crash 收集不到 果测试结 2 、用例 Timeout 收集不到 果测试结 3 、用例 定性稳 问题 4 、不能失败自 截屏动 5 、没有直 的观 告测试报 6 、不能自动 SDK 全版本回归
  • 5. Crash 问题 adb shell am instrument -w -e class com.android.foo.FooT est#testFoo com.android.foo/android.test.Instrumenta tionTestRunner  PC 端 送命令发 每次 行一个用例运  返回 出值 现 shortMsg=Process crashed 用例 果 注结 标 为 crash
  • 6. Crash 问题  参考 TestNG 在 PC 端新增 xml 配置 行的 用例执 测试 <classes timeout=“300”> <class name=“com.netease.autotest.LoginTest"> <methods> <include name="testLogin” maxCount=“2" /> </methods> </class> </classes>
  • 7. Timeout 问题  每个用例 置设 timeout 时间 <classes timeout="300“ > <class name="com.netease.autotest.LoginTest"> <methods> <include name="testLogin” maxCount=“2" /> </methods> </class> </classes>  PC端 控监 adb 命令,如果指定的 没有返回,用例 果 注时间 结 标 为 timeout
  • 8. 用例 定性稳 问题 加入失 重 机制败 跑  xml 文件配置用例重 次数跑 <classes timeout=“300” maxCount=“3" > <class name="com.netease.autotest.LoginTest"> <methods> <include name="testLogin” /> </methods> </class> </classes>
  • 9. 用例 定性稳 问题  使用 android-junit-report工具生成 xml  PC 端 取获 xml 行解析,失 重进 败则 跑 当前我 用例通 率在们 过 95% 以上
  • 10. 失 自 截屏败 动  承继 ActivityInstrumentationTestCase2 ,重写 runTest 方法 @Override public void runTest() throws Exception { try { super.runTest(); } catch (Exception e) { solo.takeScreenshot(screenshotName); throw e; }}  PC 端使用 adb 命令取出 片图
  • 11. 直 的 告观 测试报 PC 端解析 xml 果文件,生成结 html
  • 13. 自动 SDK 全版本回归  真机 USB 接连 PC 、 置设  模 器拟 自 建、 、动创 启动 重启、 除删 android create avd --name 2.3 --target android-10 emulator -avd 2.3 android delete avd --name 2.3
  • 14. 自动 SDK 全版本回归  自 重 名动 签 APK jarsigner  自 安装卸动 载 apk adb install adb uninstall
  • 15. SDK 全版本回归 - 分享经验  行运 模 器拟 推荐在 Linux/Mac 系 ,统 Windows 非常不 定稳  真机 源不 ,可以使用模 器自资 够 拟 动 SDK 全版本回归  利用真机晚上的空 行用例闲时间运  SDK 全版本回 是归 有必要的 兼容性发现 问题  使用开发 不兼容 API , 致 用低版本下导 应 crash  低 sdk 版本下 源名称和系 相同资 统 , 源 控件低版本下不可资 对应 见
  • 16. 基于 Robotium 展扩 -Orange  Orange 配置简单 整个自 化实现 动 测试 程自 化过 动 Java –jar Orange.jar config.properties Config.properties target=1.6, 2.1,android-7,android-8,android-10,android-15 devicename=HT843KV06088 , N760_CHINATELECOM apkpath=/apk/pris.apk testapkpath=/bin/PrisAndroidUITest-release.apk keystore=debug.keystore maillists=kevinkong@corp.netease.com testCaseFile=/test-xml/AllTestCases.xml logTag=System.err
  • 17. 用例可 性、可 性 践读 维护 实  推荐使用 R.java 行元素定位进 getView(index) getView(R.id. loginButton)  用例解耦 失 排 方便败 查维护 可以 独 行用例单 运 失 可以 独重败 单 跑
  • 18. 用例可 性、可 性 践读 维护 实  使用 Page Object 模式 LoginTest.java public void testSucceedToLogin () { loginPage.enterUsername(“***@163.com”); loginPage.enterPassword(“****”); gridPage = loginPage.clickOnLoginButton(); boolean isMainPage = gridPage.isMainGridPage(); Assert.assertTrue(“ 登 失陆 败 ", isMainPage); }
  • 19. 用例可 性、可 性 践读 维护 实  LoginPage.java public void enterUsername(String userName) { EditText edtUserName = (EditText) orange.getView(R.id.username); orange.clearEditText(edtUserName ); orange.enterText(edtUserName , userName); } public void enterPassword(String passWord) { **** } public MainGridPage clickOnLoginButton() { orange.clickOnView(orange.getView(R.id.btnLogin)); return new MainGridPage(orange); }
  • 22. Android 性能 践测试实  自 化动 性能测试 自 化收集被 用动 测应 CPU 、内存、流量、 量等性能数据电
  • 23. Android 性能 践测试实  助手工 自 化收集被 用性能数据协 测试 动 测应 Emmagee- 源性能 工具开 测试 https://github.com/NetEase/Emmagee 1 、支持 指定 用 行 程中性能测试 应 运 过 2 、当前支持 CPU 、内存、流量 3 、支持浮窗 示性能数据实时显 4 、 果保存测试结 为 CSV 文件
  • 25. Android 性能测试 - 后 工作续  和 UI 自 化动 测试 合结  于对 性能 化优 的探索  基于用 体 的性能户 验 测试的探索
  • 26. IOS UI 自 化 探索动 测试 UIAutomation
  • 27. IOS UI 自 化 探索动 测试  使用 UIAutomation 发现问题 1 、 API 写用例编 可 性、可 性读 维护 差 2 、需要用例失 重 机制败 跑 3 、用例 果 告结 报 不直观
  • 28. API 可 性、可 性读 维护 - 解决  UIAutomation API var app = UIATarget.localTarget().frontMostApp(); var window = app.mainWindow(); window. tableViews()[0]. buttons()[“ 登 ”录 ].tap();  API 二次封装 tuneup_js  封装后的 API var loginButton= Orange.getElementByName(“ 登录 "); Orange.clickOnElement(loginButton);
  • 29. API 可 性、可 性读 维护 - 解决 test("Login_ 孔 云庆 ", function() { var userName = Orange.getElementByType("UIATextField"); userName.setValue(“test@163.com"); var password = Orange.getElementByType("UIASecureTextField"); password.setValue("****"); var loginButton = Orange.getElementByName(" 登录 "); Orange.clickOnElement(loginButton); var userCell = Orange.getTableCell(" 空列表 "); var userInfo = userCell.name(); Assert.assertMatch(/test@163.com/,userInfo," 登 后的信息不陆 对 " ); });
  • 30. 用例失 重 机制败 跑 - 解决 Instruments –w udid –t Automation.tracetemplate appNa me -e UIASCRIPT login.js  PC 端通 送命令 行用例过发 执  解析 Automation Results.plist 果文件,失结 败 重跑
  • 31. 用例 果不直测试结 观 - 解决 PC 端解析 Automation Results.plist 生成直 的 果 告观 结 报
  • 32. 用例 果不直测试结 观 - 解决 PC 端解析 Automation Results.plist 生成直观 Log 日志
  • 33. 后 展望续  一统 Android 、 IOS 框架  一份 脚本、多个平台 行测试 运  采用 BDD ,通 描述 言 写 用例过 语 编 测试  描述 言语 = 手工用例 = 自 用例动
  • 34. Q&A
  • 35. 讨论话题  1 、移 自 化 中 到的动 动 测试 碰 问题  2 、如何更好的提高移 自 化 的收益动 动 测试  3 、如何 品方更加的重 自 化让产 视 动 测试  4 、如何 自 化 框架 行部 内推广针对 动 测试 进 门

Notas do Editor

  1. Robotium http://code.google.com/p/robotium/ 很成熟的一个开源框架,社区活跃度高,当前最新版本也支持 webView ,不需要开发代码中侵入代码,只需要有 apk 就可以测试 NativeDriver : http://code.google.com/p/nativedriver/ 需要在开发代码中侵入额外的代码重新打包,在 PC 端编写测试用例,可以使用 TestNg 等测试框架,不过框架当前已经暂停维护,有很多 bug 也没修复,社区的活跃度也不高,不推荐使用 Athrun http://code.taobao.org/p/athrun/src/ 淘宝开源的框架,底层实现也是使用的 instrument ,和 Robotium 类似, Calabash-android https://github.com/calabash/calabash-android
  2. 解决方法是基于 Robotium 二次开发扩展,另外加入 PC 端的一些控制,完善整个流程。
  3. 如果每次运行所有的用例的话中间有一个用例 crash 了,则收集不到所有用例的测试结果。 Android 本身自带的命令行,通过这个命令行可以指定每次只运行一个测试用例 adb shell am instrument -w -e class com.android.foo.FooTest #testFoo com.android.foo/android.test.InstrumentationTestRunner PC 端通过命令行每次运行一个用例 命令行返回值出现“ shortMsg=Process crashed” 用例结果标注为 crash
  4. PC 端新增功能自动解析 xml 文件,封装为命令行的方式,每次发送一个用例到指定的设备上去运行。 当前这个 Xml 文件还有其他功能看添加,后续会介绍到,比如设置用例的超时时间、设置用例的最大重跑次数等, 另外也可以扩展实现类似 testng 的 group 功能。
  5. PC 端会监控这个命令,如果指定的时间内没有返回值则标注为 timeout adb shell am instrument -w -e class com.android.foo.FooTest #testFoo com.android.foo/android.test.InstrumentationTestRunner
  6. 统一 Android 、 iOS 框架(降低不同框架的学习成本) 一份测试脚本、多个平台运行 采用 BDD 编写测试用例(更好的用例可读性、可维护性,不需要熟悉代码即可编写测试用例) 手工用例 = 自动用例(测试人员按照规范编写手工测试用例后可以直接在不同的平台运行自动测试用例)