UITesting自动化测试log日志

1、XCTestSuite
官方解释:

@interface XCTestSuite : XCTest {
#ifndef __OBJC2__
@private
    id _internalImplementation;
#endif
}

+ (instancetype)defaultTestSuite;
+ (instancetype)testSuiteForBundlePath:(NSString *)bundlePath;
+ (instancetype)testSuiteForTestCaseWithName:(NSString *)name;
+ (instancetype)testSuiteForTestCaseClass:(Class)testCaseClass;

+ (instancetype)testSuiteWithName:(NSString *)name;
- (instancetype)initWithName:(NSString *)name NS_DESIGNATED_INITIALIZER;

- (void)addTest:(XCTest *)test;

@property (readonly, copy) NSArray <__kindof XCTest *> *tests;

@end

综上可知,该类可在任意地方获取已经建立的XCTestCase用例个数,可通过用例名、类名来查找具体的用例;也可通过属性获取用例数组后,遍历获取用例;
举个栗子:

    XCTestSuite *suite = [XCTestSuite defaultTestSuite];
    NSArray *array = suite.tests;
    for (XCTestCase *cases in array) {
        NSLog(@"%@",cases.description);
    }

运行结果:

屏幕快照 2017-05-10 18.17.06.png

2、获取完整log日志:
日志存储路径:
/Users/username/Library/Developer/Xcode/DerivedData/project/Logs/Test

屏幕快照 2017-05-10 19.09.21.png

(1)每个case执行结果截图在Attachments文件夹;

(2)case执行正确、错误数量:.plist文件

(3)log输出:.log文件

(4)已经点击成功的控件元素本地缓存:Cache.db

备注:当某个用例执行失败时,无日志保存。根据这些成功后的信息,后续想完成一个log显示系统

3、解析并简单显示测试结果
(1)通过.plist文件找出所有的执行case详细信息:

143FBFCF-07F1-4A32-BFD5-D2FA0D8F9C5F.png

其中,ActivitySummaries中包含了所有的case信息,但是我们只需要拿到:
Title:case信息;
UUID:截图保存的名称;
备注:关于UUID有一些又多层叠加,所以需要在子层中找到存在的截图名称,如下图中的第三层才是正确的:

6F4B3AFC-71A7-48EA-BE56-472A70AAF08F.png

(2)Python解析文件,并编写HTML给出简单的日志分析表:
首先安装PyH,使用方法点击此处

安装:
sudo python setup.py install

关于源码,见请GitHub

(3)在解析的过程中过滤了大量没有截图的信息:

def function_dictionary(rootPath,dictionary,title_array):
    title = str(dictionary['Title'])
    imagePath = append_image_path(rootPath,dictionary['UUID'])
    global isWait
    if "Synthesize event" in title:
        return title_array
    elif "Snapshot accessibility hierarchy for com.meelive.ingkee" in title:
        return title_array
    elif "Use cached accessibility hierarchy for com.meelive.ingkee" in title:
        return title_array
    elif "Unable to" in title:
        return title_array
    elif "Set Up" in title:
        return title_array
    elif "Terminate" in title:
        return title_array
    elif "Get" in title:
        return title_array
    elif "Find" in title:
        return title_array
    elif "Launch com.meelive.ingkee" in title:
        return title_array
    elif "Start Test" in title:
        return title_array
    else:
        title_array.append({title:imagePath})
        return title_array
屏幕快照 2017-05-19 11.56.19.png

结果展示页:

屏幕快照 2017-05-19 11.57.35.png

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 132,619评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 168,513评论 25 707
  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    O感悟人生O阅读 11,536评论 2 34
  • 【谨以此文献给自己,献给曾经奋斗在共青团事业的兄弟姐妹】 今天是五四过后的第一天。 铺天盖地的五四宣传热潮已过, ...
    林旦玲阅读 818评论 4 7
  • 自夏开始,就一直做着一家万统的美梦,然而短则一代,长不过几百年,天下的统治者又换了别家…… 周朝在昭穆之后,国力已...
    懒虫小狮子阅读 150评论 0 0