Weitere ähnliche Inhalte Ähnlich wie 网易移动自动化测试实践(孔庆云) (20) 网易移动自动化测试实践(孔庆云)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);
}
23. Android 性能 践测试实
助手工 自 化收集被 用性能数据协 测试 动 测应
Emmagee- 源性能 工具开 测试
https://github.com/NetEase/Emmagee
1 、支持 指定 用 行 程中性能测试 应 运 过
2 、当前支持 CPU 、内存、流量
3 、支持浮窗 示性能数据实时显
4 、 果保存测试结 为 CSV 文件
25. Android 性能测试 - 后 工作续
和 UI 自 化动 测试 合结
于对 性能 化优 的探索
基于用 体 的性能户 验 测试的探索
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 ,通 描述 言 写 用例过 语 编 测试
描述 言语 = 手工用例 = 自 用例动
35. 讨论话题
1 、移 自 化 中 到的动 动 测试 碰 问题
2 、如何更好的提高移 自 化 的收益动 动 测试
3 、如何 品方更加的重 自 化让产 视 动 测试
4 、如何 自 化 框架 行部 内推广针对 动 测试 进 门
Hinweis der Redaktion 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 编写测试用例(更好的用例可读性、可维护性,不需要熟悉代码即可编写测试用例) 手工用例 = 自动用例(测试人员按照规范编写手工测试用例后可以直接在不同的平台运行自动测试用例)