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

35
网网 - 网网网 网网网网网网网网网网网

Upload: drewz-lin

Post on 14-May-2015

695 views

Category:

Documents


7 download

TRANSCRIPT

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

网易 - 孔庆云

网易移动自动化测试实践

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

主要内容• Android UI 自动化测试实践

• Android 性能测试实践

• IOS UI 自动化测试探索

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

Android UI 自动化测试实践

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

使用 Robotium 发现的问题

1 、 用例 Crash 收集不到测试结果

2 、用例 Timeout 收集不到测试结果

3 、用例稳定性问题

4 、不能失败自动截屏5 、没有直观的测试报告6 、不能自动 SDK 全版本回归

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

Crash 问题adb shell am instrument -w -e class

com.android.foo.FooTest#testFoo com.android.foo/android.test.InstrumentationTestRunner

PC 端发送命令每次运行一个用例 返回值出现 shortMsg=Process

crashed用例结果标注为 crash

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

Crash 问题 参考 TestNG 在 PC 端新增 xml 配置执行的测试

用例

<classes timeout=“300”><class name=“com.netease.autotest.LoginTest"> <methods> <include name="testLogin” maxCount=“2" /> </methods></class></classes>

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

Timeout 问题 每个用例设置 timeout 时间

<classes timeout="300“ ><class name="com.netease.autotest.LoginTest"> <methods> <include name="testLogin” maxCount=“2" /> </methods></class></classes>

PC 端监控 adb 命令,如果指定的时间没有返回,用例结果标注为 timeout

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

用例稳定性问题

加入失败重跑机制 xml 文件配置用例重跑次数<classes timeout=“300” maxCount=“3" ><class name="com.netease.autotest.LoginTest">

<methods>

<include name="testLogin” />

</methods>

</class>

</classes>

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

用例稳定性问题 使用 android-junit-report工具生成

xml PC 端获取 xml 进行解析,失败则重跑

当前我们用例通过率在 95% 以上

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

失败自动截屏 继承 ActivityInstrumentationTestCase2 ,重

写 runTest 方法@Override

public void runTest() throws Exception {

try {

super.runTest();

} catch (Exception e) {

solo.takeScreenshot(screenshotName);

throw e;

}}

PC 端使用 adb 命令取出图片

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

直观的测试报告PC 端解析 xml 结果文件,生成 html

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

自动 SDK 全版本回归

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

自动 SDK 全版本回归 真机USB 连接 PC 、设置

模拟器

自动创建、启动、重启、删除android create avd --name 2.3 --target android-10

emulator -avd 2.3

android delete avd --name 2.3

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

自动 SDK 全版本回归 自动重签名 APK

jarsigner

自动安装卸载 apk

adb install

adb uninstall

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

SDK 全版本回归 - 经验分享 运行模拟器推荐在 Linux/Mac 系统, Windows 非常不

稳定 真机资源不够,可以使用模拟器自动 SDK 全版本回归 利用真机晚上的空闲时间运行用例 SDK 全版本回归是有必要的

发现兼容性问题 开发使用不兼容 API ,导致应用低版本下 crash

低 sdk 版本下资源名称和系统相同,资源对应控件低版本下不可见

Page 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

[email protected]

testCaseFile=/test-xml/AllTestCases.xml

logTag=System.err

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

用例可读性、可维护性实践 推荐使用 R.java 进行元素定位getView(index)

getView(R.id. loginButton)

用例解耦失败排查维护方便可以单独运行用例失败可以单独重跑

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

用例可读性、可维护性实践 使用 Page Object 模式

LoginTest.java

public void testSucceedToLogin () {

loginPage.enterUsername(“***@163.com”);

loginPage.enterPassword(“****”);

gridPage = loginPage.clickOnLoginButton();

boolean isMainPage = gridPage.isMainGridPage();

Assert.assertTrue(“ 登陆失败 ", isMainPage);

}

Page 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);

}

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

持续集成实践

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

持续集成实践

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

Android 性能测试实践 自动化性能测试

自动化收集被测应用 CPU 、内存、流量、电量等性能数据

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

Android 性能测试实践 协助手工测试自动化收集被测应用性能数据Emmagee- 开源性能测试工具https://github.com/NetEase/Emmagee

1 、支持测试指定应用运行过程中性能2 、当前支持 CPU 、内存、流量3 、支持浮窗实时显示性能数据4 、测试结果保存为 CSV 文件

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

Android 性能测试实践

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

Android 性能测试 - 后续工作 和 UI 自动化测试结合 对于性能优化的探索 基于用户体验的性能测试的探索

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

IOS UI 自动化测试探索

UIAutomation

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

IOS UI 自动化测试探索 使用 UIAutomation 发现问题1 、 API 编写用例可读性、可维护性差

2 、需要用例失败重跑机制3 、用例结果报告不直观

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

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);

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

API 可读性、可维护性 - 解决test("Login_ 孔庆云 ", function() {

var userName = Orange.getElementByType("UIATextField");

userName.setValue(“[email protected]");

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," 登陆后的信息不对 " );

});

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

用例失败重跑机制 - 解决Instruments –w udid –t Automation.tracetemplate

appName -e UIASCRIPT login.js

PC 端通过发送命令执行用例 解析 Automation Results.plist 结果文件,失

败重跑

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

用例测试结果不直观 - 解决PC 端解析 Automation Results.plist 生成直观的结果报告

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

用例测试结果不直观 - 解决PC 端解析 Automation Results.plist 生成直观 Log 日志

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

后续展望 统一 Android 、 IOS 框架 一份测试脚本、多个平台运行 采用 BDD ,通过描述语言编写测试用例 描述语言 = 手工用例 = 自动用例

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

Q&A

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

讨论话题

1 、移动自动化测试中碰到的问题 2 、如何更好的提高移动自动化测试的收益 3 、如何让产品方更加的重视自动化测试 4 、如何针对自动化测试框架进行部门内推广