在测试流程中,我们通常会加入一些性能采集,例如网络、cpu、线程情况、内存等等,本文介绍下如何用最简单的方式,获取 Android 应用的一些性能参数。
原理很常规,使用 adb shell
配合即可,但是需要使用 Node.js 对 adb
命令封装一下。
接下来介绍 supern 写的 android-performance 模块如何使用。
将 引入项目即可,下面的代码来自 android-performance
的单元测试,用以说明如何一次性取到所有指标。
// file: /test/android-performance.test.js
it('should all in one with promise', function(done) {
const perf = new AndroidPerformance();
const p1 = new Promise((resolve, reject) => {
perf
.initDevice()
.then(() => perf.getMeminfoByPackageName(pkgName))
.then(res => {
resolve({
item: 'Meminfo',
data: res
});
});
});
const p2 = new Promise((resolve, reject) => {
perf
.initDevice()
.then(() => perf.getPid(pkgName))
.then(pid => {
return perf
.getThreadCountByPid(pid)
.then(d => {
resolve({
item: 'ThreadCount',
data: d
});
})
.catch(e => {
resolve(null);
});
})
.catch(e => {
resolve(null);
});
});
const p3 = new Promise((resolve, reject) => {
perf
.initDevice()
.then(() => perf.getPid(pkgName))
.then(pid => {
return perf
.getUidByPid(pid)
.then(uid => {
return perf
.getTrafficByUid(uid)
.then(d => {
resolve({
item: 'Traffic',
data: d
});
})
.catch(e => {
resolve(null);
});
})
.catch(e => {
resolve(null);
});
})
.catch(e => {
resolve(null);
});
});
const p4 = new Promise((resolve, reject) => {
perf
.initDevice()
.then(() => perf.getPid(pkgName))
.then(pid => {
return perf
.getCPUByPid(pid)
.then(d => {
resolve({
item: 'cpu',
data: d
});
})
.catch(e => {
resolve(null);
});
});
});
Promise.all([p1, p2, p3, p4]).then(result => {
console.log(`performance:${JSON.stringify(result)}`);
done();
});
});
可以得到如下结果:
const wd = require('macaca-wd');
const androidPerfPin = function() {
// ...
// 封装性能探针即可
};
// 加到调用链扩展里
wd.addPromiseChainMethod('androidPerfPin', androidPerfPin);
然后就可以使用熟悉的语法啦
it('xxxxxxxx', function() {
return driver
.elmentById('xxxxxxxxx')
.click()
.androidPerfPin()
.screenshot();
...
});
本篇介绍了如何采集 Android 性能,下篇准备介绍如何采集页面的性能。
欢迎讨论,互相学习。
微博: http://weibo.com/xudafeng
Github: https://github.com/xudafeng