想看
#105 楼 @automation 感谢回复,linux 和 macos 做了处理,原因是因为 linux 和 macos 启动后会有独立的 logcat 进程,但 windows 不是(目前观察来看是这样),所以没办法单独关闭单独 logcat 的进程。windows 这部分模块没想好怎么处理
#102 楼 @zlx_lizzy 安装 app 失败了,检查下手机安装时是不是有一些弹窗,选择确认。目前仅封装了一些常见手机弹窗的处理
#103 楼 @xiaocong168 demo 自带了两个用例,第二个用例继承上一个用例(每次执行完毕后会初始化环境)
不需要 try,判断 Element 获取控件后返回是不是 None,是的话点击另一个控件即可
很棒!知识的整理归纳很重要,学习了
#78 楼 @gmjdadk 未来会支持,短期之内(二个月)不会支持
1:书写用例的方式已经极低了压缩撰写用力的的成本。
在用例层只需变更用例的继承名即可。
2:cpu 与内存我觉得是报告里最有价值的东西,横向对比可分析出迭代后相同模块的性能异常问题,通过性能异常可深入追查代码层面异常,举个实际的例子:本次此用例业务内优化了加载的方案,从用户无法明显感知,所以就要从性能入手,确认优化效果
3.关于日志过滤只有 exception,大部分异常其实只能通过 debug 日志才看出,目前没有有效的方式处理,之后可能会增加关键词过滤
adb connect
#63 楼 @xiaocong168 不需要手动打开,代码里已经用命令方式开启,我在最新的提交里加了启动的日志,你再失败的话,把日志贴出来看看
#61 楼 @xiaocong168
#57 楼 @JeffLiu
这个问题都是因为 appium 没起来,你们要是方便的话重新拉取下 github 最新的提交,我在这块加了写 log,用于分析问题
厉害!
#48 楼 @410637312
#50 楼 @lose
设计框架的时候需要考虑到这些,用的是单例模式,每个线程不会互相影响。关于错误的捕捉:
1.来看代码,解释器方法包裹了一个错误捕捉器。用来捕获执行成错误的原因
def e():
"""
捕获用例执行函数异常安装
:return: True|AssertionError|AttributeError
"""
def E(func):
def wrapper(*args, **kwargs):
error_msg = True
try:
return func(*args, **kwargs)
except AssertionError as e:
U.Logging.warn(traceback.format_exc())
U.Logging.error(e)
error_msg = 'Assertion error'
except AttributeError as e:
U.Logging.warn(traceback.format_exc())
U.Logging.error(e)
error_msg = 'Attribute Error'
except Exception as e:
error_msg = traceback.format_exc()
U.Logging.error(e)
finally:
return error_msg
return wrapper
return E
@e()
def __analysis_yaml(self, path_yaml):
pass
2.错误日志的捕捉
def logcat(self, log_path):
return self.adb('logcat -v time > %s&' % (log_path))
class Anl:
def __init__(self, all_result_path):
self.all_result_path = all_result_path
@U.l()
def __log_file(self, all_path_result, the_suffix_name):
"""
:return: 日志列表
"""
return GetFilePath.all_file_path(
all_path_result, the_suffix_name).values()
def analyze(self, log_file):
"""
过滤Exception到log文件夹内
:param log_file: log的路径
:return:
"""
errorId = 0
go_on_id = 0
log_filter_name = os.path.split(log_file)[1].split('.')[0]
with open(self.all_result_path + '/log/{}filter.log'.format(log_filter_name), 'w') as s:
with open(log_file) as f:
for line in f:
if 'Exception' in line:
go_on_id = 1
s.write('#' + '-' * 40 + '\n')
s.write(line)
errorId = line.split('(')[1].split(')')[0].strip()
elif go_on_id == 1:
if errorId in line:
s.write(line)
else:
go_on_id = 0
def main(self):
"""
获取log,生成filter log
:return:
"""
for log_file in self.__log_file(self.all_result_path, '.log'):
self.analyze(log_file)
这样执行过程中的异常和错误的异常均能捕捉,查看报告即可
期待你关于人工智能的分享