首先,我们为什么要引入自动化测试?
我们把范围略微缩小点,放在移动端这个环境上,自动化测试是指在预设条件、路径下运行app,运行之后给出一个评估结果,通常会生成一份测试报告,有哪些用例通过,有哪些些用例没有通过。这一过程完全是自动的,几乎不需要认为干预的,这对于人力不足的团队来说,对于保证产品质量方面,是一个较好的选择。
其次,自动化测试框架有哪些,我们该如何选择?
首先,从Android,ios两个平台上来看,这两个系统本身就提供了各自的自动化测试框架,比如
当然,以上并没有,全部一一列举出来,不过,稍稍了解一下,我们就知道,以上提到的测试框架它们都限定了平台,说白了就是不支持跨平台,这样,就痛苦了,写测试用例还需要对两个平台来写,这样开发同学就不乐意了,学习成本略大。
那么,对于我们这群苦逼的开发,到底该如何选择呢?可以从以下两个方面考虑
1、跨平台性
2、支持脚本录制
嗯,基于上面两个需求点出发,我是如何做的选择呢?
我选择了appium作为自动化测试框架!为什么会选择它?
还有哪些类似的自动化测试框架值得关注?
据我了解,类似的这种测试框架还Macaca,是阿里维护的,也在github上开源,star数比appium要少很多,单功能貌似开起来还挺完备的。这点还是要对阿里的技术赞一个,不过,比较遗憾的是,由于精力有限,我并没有研究这个,但是它同样对我非常有吸引力。
更加匪夷所思的是,居然还有带自然语言处理的自动化测试框架Calabash。
好的,自动化测试框架的选取就说明到这里,至于appium如何install,如何跑起来录制测试用例脚本,那又可以写一篇文章了,本文只想写一篇指导性的文章,因此这不打算在继续深入。
ps,install,录制脚本,我是直接参考的官网,并没有到社区去找其他文章,说明他的官网文档还算可以的。
嗯,下面一个环节是如何在自动化测试环境中搜集性能数据了。
这里,我决定使用Android为例,来介绍一下,搜集app内存,帧率,cpu等信息的思路。android平台上,adb shell dumpsys
命名提供了我们所需要的所有信息,如
内存方面
adb shell dumpsys meminfo packagename
那么,问题来了,我们如何提取里面的字段,比如Java Heap,Native Heap,Total等呢?我采取的是使用python对文本分析,具体代码如下:
# dump 内存信息
@staticmethod
def dump_current_mem_info():
orgin_lines = os.popen("adb shell dumpsys meminfo xxx.xxx.xxx").readlines()
app_summary = "App Summary"
java_heap = "Java Heap:"
native_heap = "Native Heap:"
total = "TOTAL"
index = 0;
for line in orgin_lines:
if re.findall(app_summary, line): # 找到appSummary 这一行,取下面的15行
break
else:
index = index + 1;
lines = orgin_lines[index:index + 15]
for line in lines:
if re.findall(java_heap, line): # 找到TOTAL 这一行
lis = line.split(" ") # 将这一行,按空格分割成一个list
while '' in lis: # 将list中的空元素删除
lis.remove('')
java_heap = lis[2].replace("\n", "")
if re.findall(native_heap, line):
lis = line.split(" ")
while '' in lis:
lis.remove('')
native_heap = lis[2].replace("\n", "")
if re.findall(total, line):
lis = line.split(" ")
while '' in lis:
lis.remove('')
total = lis[1].replace("\n", "")
print([java_heap, native_heap, total])
return [java_heap, native_heap, total]
pass
帧率等信息
adb shell dumpsys gfxinfo packagename
同样的道理,使用python脚本分析,可以轻易拿到你想拿的性能数据。
cpu相关信息
adb shell dumpsys cpuinfo |grep xxx.xxx.xxxx
可以拿到当前app占用cpu数据。
ok,性能数据都搜集到了之后,接下来的事情是要将这些搜集到的性能数据放到某个地方了
对于数据上报这块,无非就是调用某接口将数据写入到文件,或者数据库(其实也是文件,只不过是有模式的文件),那么到底已那种方式写入呢,我倾向于写数据库,因为,数据库记录的文件查询起来比较方便,可以很简单的做一些条件查询,不过两种方式都没有什么问题,主要看那种方便了,结合后面数据的程序,我选择了使用MongoDB存储我搜集到的性能数据。
ps,MongoDB我并没有学习,而是参考官方教程直接开搞,主要也是得益于官方文档写的比较好,下面是我定义的数据模式,也就是我要上报的字段。
var PerformanceSchema = new Schema({
platform: {
type: String,
default: 'Android'
},
environment: {
type: String,
default: ''
},
test_case: {
type: String,
default: ''
},
java_heap: {
type: Number,
default: 0
},
native_heap: {
type: Number,
default: 0
},
total_memory: {
type: Number,
default: 0
},
cpu: {
type: Number,
default: 0
},
total_frames: {
type: Number,
default: 0
},
jank_frames: {
type: Number,
default: 0
},
frame_50_percentile: {
type: Number,
default: 0
},
frame_90_percentile: {
type: Number,
default: 0
},
number_missed_vsync: {
type: Number,
default: 0
},
// status: {
// type: [{
// type: String,
// enum: ['pending', 'ongoing', 'completed']
// }],
// default: ['pending']
// },
ctime: {
type: Date,
default: Date.now
}
})
好了,数据库表建立ok之后,如何将数据发送给MongoDB保存呢?这时候,我考虑使用restful接口将数据post过去。
于是,我在Google上搜索了 node restful,
很快,我遍用express构建好了搭建了一个restful框架,简单的配置好路由之后,如下:
我就可以通过http://localhost:3000/performances 来post我搜集的性能数据到MongoDB了。
数据发送到MongoDB之后,接下来要做的事情当然就是呈现出数据,让我们直观的了解app性能数据的一个趋势了。
数据的呈现一般来说,会涉及到图表的展示,我这里使用的chart.js 。然后css这块的话,我也不准备自己来手写,直接使用了一css框架bootstrap。
最后做出来的效果是:
对于告警这块,就比较愉快了,配置一些性能参数的阈值,达到这个阈值,就出发告警条件,可以对关注着发送邮件报告,或者短信通知了,比如,在跑测试用例的过程中,捕捉到的一条性能数据出现,cpu消耗过高,超过了20%率用率,说明这块可能存在复杂的计算逻辑,看看能否优化优化了。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。