网易 - 孔 云庆
网易移 自 化 践动 动 测试实
主要内容
• 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
tio...
Crash 问题
 参考 TestNG 在 PC 端新增 xml 配置 行的 用例执 测试
<classes timeout=“300”>
<class name=“com.netease.autotest.LoginTest">
<meth...
Timeout 问题
 每个用例 置设 timeout 时间
<classes timeout="300“ >
<class name="com.netease.autotest.LoginTest">
<methods>
<include ...
用例 定性稳 问题
加入失 重 机制败 跑
 xml 文件配置用例重 次数跑
<classes timeout=“300” maxCount=“3" >
<class name="com.netease.autotest.LoginTest"...
用例 定性稳 问题
 使用 android-junit-report工具生成 xml
 PC 端 取获 xml 行解析,失 重进 败则 跑
当前我 用例通 率在们 过 95% 以上
失 自 截屏败 动
 承继 ActivityInstrumentationTestCase2 ,重写 runTest 方法
@Override
public void runTest() throws Exception {
try {
su...
直 的 告观 测试报
PC 端解析 xml 果文件,生成结 html
自动 SDK 全版本回归
自动 SDK 全版本回归
 真机
USB 接连 PC 、 置设
 模 器拟
自 建、 、动创 启动 重启、 除删
android create avd --name 2.3 --target android-10
emulator -avd...
自动 SDK 全版本回归
 自 重 名动 签 APK
jarsigner
 自 安装卸动 载 apk
adb install
adb uninstall
SDK 全版本回归 - 分享经验

行运 模 器拟 推荐在 Linux/Mac 系 ,统 Windows 非常不 定稳
 真机 源不 ,可以使用模 器自资 够 拟 动 SDK 全版本回归
 利用真机晚上的空 行用例闲时间运

SDK 全...
基于 Robotium 展扩 -Orange

Orange 配置简单 整个自 化实现 动 测试 程自 化过 动
Java –jar Orange.jar config.properties
Config.properties
target=...
用例可 性、可 性 践读 维护 实
 推荐使用 R.java 行元素定位进
getView(index)
getView(R.id. loginButton)

用例解耦
失 排 方便败 查维护
可以 独 行用例单 运
失 可以 独重败 单...
用例可 性、可 性 践读 维护 实

使用 Page Object 模式
LoginTest.java
public void testSucceedToLogin () {
loginPage.enterUsername(“***@163....
用例可 性、可 性 践读 维护 实
 LoginPage.java
public void enterUsername(String userName) {
EditText edtUserName = (EditText) orange.g...
持 集成 践续 实
持 集成 践续 实
Android 性能 践测试实
 自 化动 性能测试
自 化收集被 用动 测应 CPU 、内存、流量、 量等性能数据电
Android 性能 践测试实
 助手工 自 化收集被 用性能数据协 测试 动 测应
Emmagee- 源性能 工具开 测试
https://github.com/NetEase/Emmagee
1 、支持 指定 用 行 程中性能测试 应 运...
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();
w...
API 可 性、可 性读 维护 - 解决
test("Login_ 孔 云庆 ", function() {
var userName = Orange.getElementByType("UIATextField");
userName.se...
用例失 重 机制败 跑 - 解决
Instruments –w udid –t Automation.tracetemplate appNa
me -e UIASCRIPT login.js
 PC 端通 送命令 行用例过发 执

解析 A...
用例 果不直测试结 观 - 解决
PC 端解析 Automation Results.plist 生成直 的 果 告观 结 报
用例 果不直测试结 观 - 解决
PC 端解析 Automation Results.plist 生成直观 Log 日志
后 展望续
 一统 Android 、 IOS 框架
 一份 脚本、多个平台 行测试 运
 采用 BDD ,通 描述 言 写 用例过 语 编 测试
 描述 言语 = 手工用例 = 自 用例动
Q&A
讨论话题
 1 、移 自 化 中 到的动 动 测试 碰 问题
 2 、如何更好的提高移 自 化 的收益动 动 测试
 3 、如何 品方更加的重 自 化让产 视 动 测试
 4 、如何 自 化 框架 行部 内推广针对 动 测试 进 门
Upcoming SlideShare
Loading in...5
×

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

779

Published on

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
779
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
4
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide
  • 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
  • 解决方法是基于 Robotium 二次开发扩展,另外加入 PC 端的一些控制,完善整个流程。
  • 如果每次运行所有的用例的话中间有一个用例 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
  • PC 端新增功能自动解析 xml 文件,封装为命令行的方式,每次发送一个用例到指定的设备上去运行。 当前这个 Xml 文件还有其他功能看添加,后续会介绍到,比如设置用例的超时时间、设置用例的最大重跑次数等, 另外也可以扩展实现类似 testng 的 group 功能。
  • PC 端会监控这个命令,如果指定的时间内没有返回值则标注为 timeout adb shell am instrument -w -e class com.android.foo.FooTest #testFoo com.android.foo/android.test.InstrumentationTestRunner
  • 统一 Android 、 iOS 框架(降低不同框架的学习成本) 一份测试脚本、多个平台运行 采用 BDD 编写测试用例(更好的用例可读性、可维护性,不需要熟悉代码即可编写测试用例) 手工用例 = 自动用例(测试人员按照规范编写手工测试用例后可以直接在不同的平台运行自动测试用例)
  • Transcript of "网易移动自动化测试实践(孔庆云)"

    1. 1. 网易 - 孔 云庆 网易移 自 化 践动 动 测试实
    2. 2. 主要内容 • Android UI 自 化 践动 测试实 • Android 性能 践测试实 • IOS UI 自 化 探索动 测试
    3. 3. Android UI 自 化 践动 测试实
    4. 4. 使用 Robotium 的发现 问题 1 、 用例 Crash 收集不到 果测试结 2 、用例 Timeout 收集不到 果测试结 3 、用例 定性稳 问题 4 、不能失败自 截屏动 5 、没有直 的观 告测试报 6 、不能自动 SDK 全版本回归
    5. 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. 6. Crash 问题  参考 TestNG 在 PC 端新增 xml 配置 行的 用例执 测试 <classes timeout=“300”> <class name=“com.netease.autotest.LoginTest"> <methods> <include name="testLogin” maxCount=“2" /> </methods> </class> </classes>
    7. 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. 8. 用例 定性稳 问题 加入失 重 机制败 跑  xml 文件配置用例重 次数跑 <classes timeout=“300” maxCount=“3" > <class name="com.netease.autotest.LoginTest"> <methods> <include name="testLogin” /> </methods> </class> </classes>
    9. 9. 用例 定性稳 问题  使用 android-junit-report工具生成 xml  PC 端 取获 xml 行解析,失 重进 败则 跑 当前我 用例通 率在们 过 95% 以上
    10. 10. 失 自 截屏败 动  承继 ActivityInstrumentationTestCase2 ,重写 runTest 方法 @Override public void runTest() throws Exception { try { super.runTest(); } catch (Exception e) { solo.takeScreenshot(screenshotName); throw e; }}  PC 端使用 adb 命令取出 片图
    11. 11. 直 的 告观 测试报 PC 端解析 xml 果文件,生成结 html
    12. 12. 自动 SDK 全版本回归
    13. 13. 自动 SDK 全版本回归  真机 USB 接连 PC 、 置设  模 器拟 自 建、 、动创 启动 重启、 除删 android create avd --name 2.3 --target android-10 emulator -avd 2.3 android delete avd --name 2.3
    14. 14. 自动 SDK 全版本回归  自 重 名动 签 APK jarsigner  自 安装卸动 载 apk adb install adb uninstall
    15. 15. SDK 全版本回归 - 分享经验  行运 模 器拟 推荐在 Linux/Mac 系 ,统 Windows 非常不 定稳  真机 源不 ,可以使用模 器自资 够 拟 动 SDK 全版本回归  利用真机晚上的空 行用例闲时间运  SDK 全版本回 是归 有必要的 兼容性发现 问题  使用开发 不兼容 API , 致 用低版本下导 应 crash  低 sdk 版本下 源名称和系 相同资 统 , 源 控件低版本下不可资 对应 见
    16. 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. 17. 用例可 性、可 性 践读 维护 实  推荐使用 R.java 行元素定位进 getView(index) getView(R.id. loginButton)  用例解耦 失 排 方便败 查维护 可以 独 行用例单 运 失 可以 独重败 单 跑
    18. 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. 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); }
    20. 20. 持 集成 践续 实
    21. 21. 持 集成 践续 实
    22. 22. Android 性能 践测试实  自 化动 性能测试 自 化收集被 用动 测应 CPU 、内存、流量、 量等性能数据电
    23. 23. Android 性能 践测试实  助手工 自 化收集被 用性能数据协 测试 动 测应 Emmagee- 源性能 工具开 测试 https://github.com/NetEase/Emmagee 1 、支持 指定 用 行 程中性能测试 应 运 过 2 、当前支持 CPU 、内存、流量 3 、支持浮窗 示性能数据实时显 4 、 果保存测试结 为 CSV 文件
    24. 24. Android 性能 践测试实
    25. 25. Android 性能测试 - 后 工作续  和 UI 自 化动 测试 合结  于对 性能 化优 的探索  基于用 体 的性能户 验 测试的探索
    26. 26. IOS UI 自 化 探索动 测试 UIAutomation
    27. 27. IOS UI 自 化 探索动 测试  使用 UIAutomation 发现问题 1 、 API 写用例编 可 性、可 性读 维护 差 2 、需要用例失 重 机制败 跑 3 、用例 果 告结 报 不直观
    28. 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. 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. 30. 用例失 重 机制败 跑 - 解决 Instruments –w udid –t Automation.tracetemplate appNa me -e UIASCRIPT login.js  PC 端通 送命令 行用例过发 执  解析 Automation Results.plist 果文件,失结 败 重跑
    31. 31. 用例 果不直测试结 观 - 解决 PC 端解析 Automation Results.plist 生成直 的 果 告观 结 报
    32. 32. 用例 果不直测试结 观 - 解决 PC 端解析 Automation Results.plist 生成直观 Log 日志
    33. 33. 后 展望续  一统 Android 、 IOS 框架  一份 脚本、多个平台 行测试 运  采用 BDD ,通 描述 言 写 用例过 语 编 测试  描述 言语 = 手工用例 = 自 用例动
    34. 34. Q&A
    35. 35. 讨论话题  1 、移 自 化 中 到的动 动 测试 碰 问题  2 、如何更好的提高移 自 化 的收益动 动 测试  3 、如何 品方更加的重 自 化让产 视 动 测试  4 、如何 自 化 框架 行部 内推广针对 动 测试 进 门
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×