四,生成测试报告

xctool 的 reporter 选项可以生成不同形式的测试报告:
¬ pretty: (默认) 一个文字化的输出器,使用 ANSI 颜色和 unicode 符号来进行美化输出。
¬ plain: 类似 pretty, 不过没有颜色和 Unicode。
¬ phabricator: 把构建/测试的结果输出为 JSON 数组,它可以被 Phabricator 的代码评审工具读取。
¬ junit: 把测试结果输出成和 JUnit/xUnit 兼容的 XML 文件。
¬ json-stream: 一个由构建/测试事件组成的 JSON 字典流,每行一个(示例输出)。
¬ json-compilation-database: 输出构建事件的 JSON Compilation Database ,它可以用于基于 Clang Tooling 的工具,例如 OCLint.
而我们通常使用 xml 格式测试报告,一则做持续化集成的时候,Jenkins 可以直接这个报告;二则我们可以借助于 ant 将期转换成 html 的报告:
1,生成 junit 报告:
xctool -workspace TenMinDemo.xcworkspace -scheme TenMinDemo run-tests TenMinDemoTests:LoginTest -sdk "iphonesimulator11.3" -reporter junit:/Users/growingio/Documents/report.xml
2,转换测试报告 xml 成 html
由于 xctool 输出的报告中含有中间输出信息,所以不能直接转换,需要先处理一下,去掉无用的信息。或是先将报告转化成 json 格式,然后再提取出合适的信息,生成 xml 文件。这个方法需要另外写脚本转换一下。
生成报告的步骤如下:
(1)安装 ant
(2)优化 xctool 生成的 xml,把中间输出信息去掉
(3)创建 builld.xml 文件

<project name="TestNG_WORKSPACE" default="junit-report" basedir=".">
<!-- Sets the property variables to point to respective directories -->
<property name="junit-xml-dir" value="${basedir}/junitreports"/> //junit报告文件的路径
<property name="report-dir" value="${basedir}/html-report" /> //生成html生成报告的位置
<!-- Ant target to generate html report -->
<target name="junit-report">
<!-- Delete and recreate the html report directories -->
<delete dir="${report-dir}" failonerror="false"/>
<mkdir dir="${report-dir}" />
<mkdir dir="${report-dir}/Junit" />
<!-- Ant task to generate the html report.
todir - Directory to generate the output reports
fileset - Directory to look for the junit xml reports.
report - defines the type of format to be generated.
Here we are using "noframes" which generates a single html report.
-->
<junitreport todir="${report-dir}/Junit">
<fileset dir="${junit-xml-dir}">
<include name="**/*.xml" />
</fileset>
<report format="noframes" todir="${report-dir}/Junit" /> //format:"frames",还左边框的报告,“noframes”,无边框的报告
</junitreport>
</target>
</project>

(4)将 juntreport.xml 的路径设置好,同时将 build.xml 给保存到相应的位置,然后在 build.xml 的路径下执行命令:ant,则会生成如下格式的 html 报告!

五,持续化集成

持续化集成的核心思想就是借助于 Jenkins 的任务调度功能,将自动化测试用例放到 Git/Svn 上,然后配置相应的代码库地址,执行脚本命令等。根据不同的触发条件,完成自动运行的机制。其中还要根据需要进行相关的配置等等,网上相应的步骤比较多,在此就不详细介绍了,可以参考一下:“基于 KIF 的 iOS UI 自动化测试和持续集成(https://tech.meituan.com/iOS-UITest-KIF.html)”
在做持续化集成的时候,一定要考虑到因为环境原因,网络原因等造成的非正常失败的情况,故要加上用例失败重跑机制。
Commands 如下所示:
xctool -workspace TenMinDemo.xcworkspace -scheme TenMinDemo run-tests TenMinDemoTests:LoginTest -sdk "iphonesimulator11.3" -reporter junit:/Users/growingio/Documents/report.xml
array=( TimerTests HistoryTests )
for data in ${array[@]}
do
xctool -workspace TenMinDemo.xcworkspace -scheme TenMinDemo run-tests -only TenMinDemoTests:${data} -sdk "iphonesimulator11.3" -reporter junit:/Users/growingio/Documents/report.xml
done

六,总结
最近在公司以 KIF 框架做了一些 IOS 自动化测试相关的东西,中间磕磕碰碰的遇到了不少问题,也查了资料进行了解答。现在就整个项目的实现过程给总结一下,以方便知识的总结和记录,也有利于后来者进行快速入门。
由于经验有限,难免会存在不足之处,后续会不断更新和完善。


↙↙↙阅读原文可查看相关链接,并与作者交流