网易移动自动化测试实践(孔庆云)
Post on 14-May-2015
695 Views
Preview:
TRANSCRIPT
网易 - 孔庆云
网易移动自动化测试实践
主要内容• 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.FooTest#testFoo com.android.foo/android.test.InstrumentationTestRunner
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 APIvar app = UIATarget.localTarget().frontMostApp();
var window = app.mainWindow();
window. tableViews()[0]. buttons()[“ 登录” ].tap();
API 二次封装tuneup_js
封装后的 APIvar 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
appName -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 、如何针对自动化测试框架进行部门内推广
top related