Open ELWIN-MAO opened 7 years ago
2016.11.23下午讨论结果:
张琳萍: 工作目标: 参照lkpjishigou增加一个2048【或者其他apk】的benchmark到oto_lkp中。 自动安装apk ,运行apk,采集数据生成json文件,会自动生成lkp collect要求的csv数据。 https://github.com/openthos/oto_lkp/tree/master/testcase/lkpjishigou
帮助信息: lkp新增测试用例,需要添加的文件列表: https://github.com/openthos/oto_lkp/blob/master/lkp-tests-master/README.md https://github.com/openthos/oto_lkp/blob/master/lkp-tests-master/doc/lkp-howto.md
以下5个文件是lkp官方文档要求添加的文件: https://github.com/openthos/oto_lkp/blob/master/lkp-tests-master/pack/jishigou #编译安装测试用例 https://github.com/openthos/oto_lkp/blob/master/lkp-tests-master/stats/jishigou #将benchmark的原始输出,转变为key:value中间结果 https://github.com/openthos/oto_lkp/blob/master/lkp-tests-master/tests/jishigou #benchmark的运行方法【“执行”启动activity,启动gui自动交互的脚本】 https://github.com/openthos/oto_lkp/blob/master/lkp-tests-master/jobs/jishigou.yaml #描述benchmark的配置文件 https://github.com/openthos/oto_lkp/blob/master/benchmark_mirror/jishigou.v0.1.tar.gz #benchmark压缩包
以下内容是由于引入了anroidx86,chroot,还有自动化框架,需要添加的文件: https://github.com/openthos/oto_lkp/blob/master/joblist/jishigou.sh #运行lkp
https://github.com/openthos/oto_lkp/tree/master/testcase/lkpjishigou/ #用于自动化测试框架调用的目录
https://github.com/openthos/oto_lkp/blob/master/benchmark_mirror/jishigou.v0.1/ #benchmark压缩包对应的目录 https://github.com/openthos/oto_lkp/blob/master/benchmark_mirror/jishigou.v0.1/net.jishigou.t2.8.0.apk #要安装的apk https://github.com/openthos/oto_lkp/blob/master/benchmark_mirror/jishigou.v0.1/auto_interact.sh #启动activity,gui自动交互的脚本
以下是chrooted ubuntu和androidx86通过telnet协作,需要添加的expect脚本: https://github.com/openthos/oto_lkp/blob/master/lkp-tests-master/pack/jishigou_pack.expt https://github.com/openthos/oto_lkp/blob/master/benchmark_mirror/jishigou.v0.1/jishigou_benchmark.expt
薛海龙: 工作目标: 将新增的monitor加入到oto_lkp并生成json,csv
monitor原始输出无法生成json的原因是./stats/xxx.py脚本加了.py后缀,去掉.py后缀加上shangbang即可解决问题。
了解lkp运行过程,新增测试用例过程,帮助张琳苹和蕾蕾解决问题。
帮助信息: lkp run 会调用./bin/run-local https://github.com/openthos/oto_lkp/blob/master/lkp-tests-master/bin/run-local
lkp run同时开启benchmark和montors采集信息的过程: system job_script, 'run_job'
lkp run把benchmark和montors采集的信息原始输出通过./stats/xxx转换为key:value临时文件的过程: system job_script, 'extract_stats' https://github.com/openthos/oto_lkp/blob/master/lkp-tests-master/stats/wrapper
/stats/xxx脚本不能有后缀.rb,.py,加上shangbang和可执行权限即可,其从表准输入中读数据,把数据写到标准输出。
lkp 自动会调用/stats/xxx脚本,并重定向标准输入和输出 if [[ -f $log ]]; then $program_dir/$program $log < $log > $tmpfile || { echo "$program_dir/$program $log < $log exit code $?, check $tmpfile" >&2; exit
./stats/xxxx脚本编写示例: http://166.111.68.197:11123/research/kernel/Openthos4H170pro2016#A20160928-ruby_to_json
mointor阻塞和benchmark唤醒monitor的原理:wait和wakeupe配对实现协作。 run_monitor $LKP_SRC/monitors/event/wait 'activate-monitor' run_test $LKP_SRC/tests/wrapper ebizzy
telnet和exept协作,实现androidx86和chroot ubuntu通信。 https://github.com/openthos/oto_lkp/blob/master/testcase/lkpjishigou/lkp_test/before_chroot.sh ##开启telnet服务
https://github.com/openthos/oto_lkp/blob/master/benchmark_mirror/jishigou.v0.1/jishigou
https://github.com/openthos/oto_lkp/blob/master/benchmark_mirror/jishigou.v0.1/jishigou_benchmark.expt #向telnet发送命令
https://github.com/openthos/oto_lkp/blob/master/benchmark_mirror/jishigou.v0.1/auto_interact.sh ##此脚本内容应该替换为实际的uiautomater脚本。
雷蕾: 张琳萍加上benchmark,薛海龙加上monitor以后,gui的csv文件会自动生成。 需要联系敖权测试不同commitid的openthos,从而得到多行csv数据,从而展现出一条曲线。 协助张琳萍、薛海龙一起解决问题。
毛英明: 修改lkp代码,过滤掉gui benchmark输出的信息中包含的非数字key:value
薛海龙的问题: 问题1: lkp install 没有weget下载/benchmark_mirror/wechat.v0.1.tar.gz压缩包:
出错原因: 压缩包url没有写对 错误的URL https://github.com/openthos/oto_lkp/blob/master/benchmark_mirror/wechat.v0.1.tar.gz 正确的URL https://github.com/openthos/oto_lkp/raw/master/benchmark_mirror/wechat.v0.1.tar.gz
新加的脚本要增加可执行权限,并且push到github上面 pack/wechat pack/wechat_pack.expt test/ stats/
问题2: lkp run 没有自动启动微信 原因和解决方法: 每个apk的main activity名字都不一样,需要一对一的修改 am start -n net.wechat.t/net.wechat.t.StartActivity
雷蕾 csv集成到result.php的问题: 已经完成了一部分内容。但是还有很多问题: 问题1: 目前的情况是多台机器生成的csv会相互覆盖,导致insterdata.py执行出错。 可能的解决方法: 方法1:每个机器的csv单独命名,ebizzy1.csv ,ebizzy2.csv【多个csv不能利用cat eibzzy1.csv ebizzy2.csv >>union.csv进行合并,因为表头有可能不一样】 方法2:在对多台机器的/result结果的并集:/var/ww/html/result 目录进行lkp collect操作。 需要合并多台机器的/lkp/paths/xxx文件【会存在不同机器上面同名文件覆盖的问题】。
问题2: ebizzy.csv文件中短7列数据,这7列数据的来源不太好追溯和匹配。
问题3: 多台机器的csv如果合并,需要都加上前7列数据以后,并且表头一致的情况下才能合并。 如果表头不一致,那么合并就比较麻烦了,需要对所有的表头取一个并集,然后再往里填数据。如果某项数据不存在,需要填充NULL或者N/A。这样就形成了一个很大的稀疏矩阵。不知道这个稀疏矩阵是否和intel的做法一致,好像他们处理数据时就碰到了稀疏矩阵,降维的问题。
csv集成过程,文档完善。 在http://166.111.131.12:7780/result.php 一加载就执行 getfilelist.py -f ebizzy/nbench 输入 '/root/oto_lkp/testcase/lkp'+file+'/lkp_tmp_result/result/'+file 改为 '/var/www/html/result'+file
输出: /var/www/html/lkp_web_oto/path/'+file+'.txt'
insertdata.py -f ebizzy/nbench 输入: MySelectPath = '/root/oto_lkp/testcase/lkp'+filename+'/lkp_tmp_result/result/'+filename+'/'+filename+'.csv'
改为: '/var/www/html/result'+filename+'.csv'
输出 OutPath = '/var/www/html/lkp_web_oto/csv/'+filename+'.csv'
testcase
<option value="all">ALL</option>
<option value="ebizzy">ebizzy</option>
<option value="jishigou">jishigou</option>
insertdata.py写死的部分【匹配哪几列】:
需要根据实际环境修改一下
n = 7
while n<=13:
line.append(path[n])
n = n+1
for item in rows[i]:
越界错误:【多台机器csv相互覆盖导致的】
root@a:/var/www/html/lkp_web_oto# ./insertdata.py -f ebizzy
1
0.0
0.0
0.0
0.0
2
0.0
Traceback (most recent call last):
File "./insertdata.py", line 74, in
蕾蕾:
第1部分: 进入/result/$benchmark目录 获取到各个$benchmark.txt文件。 https://github.com/hanhy/lkp-analysis/tree/master/code/multi_thread_test/path https://github.com/hanhy/lkp-analysis/tree/master/code/multi_thread_test/path/ebizzy.txt
第2部分: collect.py
原本是读matrix.json文件,其需要删除source字段,然后再算一遍平均值。 现在的方法是直接读取avg.json文件,不需要删除source字段,然后再算一遍平均值。
第3部分: result.php 调用了两个python 脚本 getfilelist.py和insertdata.py 下面把insertdata.py替换为collect.py
薛海龙: 问题1: expect 执行微信交互程序不成功原因是uiautomator脚本里面执行了sleep操作,导致expect认为超时了,然后直接结束了。
问题2: ps | grep com.tencent.mm 中|被当做了ps的命令行参数了。 eval /system/bin/sh /system/xbin/sh
有可能是shell不兼容导致的。 也有可能是telnet给出的环境变量和tty1下面给出的环境变量不同。 也有可能是java的execv这个函数有很多版本,各个版本实现有出入,把这些版本挨个试一遍。 java中execve("")函数的实现方法应该是通过启动一个子shell来实现的,这个子shell出现了问题。 https://github.com/openthos/oto_Uitest/blob/master/wechat/src/com/autoTestUI/window_lib.java
问题3: 测试用例的自动编译过程: 是通过lkp 执行benchmark包中的Makefile来实现的。 https://github.com/openthos/oto_lkp/blob/master/benchmark_mirror/wechat.v0.1/Makefile all: chmod 777 ./wechat chmod 777 ./auto_interact.sh chmod 777 ./wechat_benchmark.expt ./mycpjava #编译java文件为jar包
测试用例的安装过程:
是通过执行pack/$benchmark脚本中的install()函数来实现的。
https://github.com/openthos/oto_lkp/blob/master/lkp-tests-master/pack/wechat
VERSION="2.2.3"
WEB_URL="https://github.com/openthos/oto_lkp/raw/master/benchmark_mirror/wechat.v0.1.tar.gz"
install() {
cp -af $BM_NAME $BM_ROOT
cp -af .apk $BM_ROOT
cp -af .jar $BM_ROOT
cp -af auto_interact.sh $BM_ROOT
cp -af wechat_benchmark.expt $BM_ROOT
$LKP_SRC/pack/wechat_pack.expt
cp /xxx.jar /dat/local/tmp
}
昨天我和向老师讨论了一下,gui输出结果转json和csv的存在的问题,解决方法如下: 1.gui输出的信息,没有按照lkp方式组织。导致lkp collect失败。解决方法是:安装lkp新增benchmark的方法,一个gui测试对应一个lkp benchmark。 2.由于gui输出的key:value对中存在非数字的东西,会导致生成json和csv时导致lkp奔溃。需要修改lkp代码,过滤掉非数字的key:value
我需要张琳萍给出一个apk gui采集的原始输出文件,中间key:value文件,和对应的程序。然后才能知道如何过滤。你们商量一下啥时候有空 把那些东西准备好,来东主楼这里再当面讨论一下。明确一下各自的任务,争取把这个问题早点解决。 @雷蕾 @张琳苹