第七章 測(cè)試報(bào)告的生成_第1頁(yè)
第七章 測(cè)試報(bào)告的生成_第2頁(yè)
第七章 測(cè)試報(bào)告的生成_第3頁(yè)
第七章 測(cè)試報(bào)告的生成_第4頁(yè)
第七章 測(cè)試報(bào)告的生成_第5頁(yè)
已閱讀5頁(yè),還剩26頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第七章 測(cè)試報(bào)告的生成宋現(xiàn)鋒 2015-4-29最近有好幾天沒(méi)有寫(xiě)這個(gè)手機(jī)自動(dòng)化的教程,因?yàn)槲以谘芯咳绾?生成測(cè)試報(bào)告。手機(jī)自動(dòng)化測(cè)試起步比較晚,現(xiàn)成的方法不是太多, 要么就是網(wǎng)站上對(duì)應(yīng)的教程不多。這造成了我只好自己摸索去學(xué)習(xí), 不過(guò)還是有成效的,學(xué)習(xí)了三種生成報(bào)告的方法以及兩種美化報(bào)告的 方法,下面我們?cè)敿?xì)講解一下。 7.1 使用 junit-report 生成報(bào)告這個(gè)是參考網(wǎng)上的:/2148574.html,經(jīng) 我個(gè)人驗(yàn)證是可行的方法,網(wǎng)上寫(xiě)的挺詳細(xì)的,不過(guò)有些不太清楚明 白的地方,鑒于網(wǎng)上說(shuō)的有點(diǎn)迷茫,所以下面我再細(xì)化一下。 (1) 下載 j

2、unit-report 包這個(gè)包是我們生成報(bào)告的基礎(chǔ),所以先下載這個(gè)包,下載地址如 下:/jsankey/android-junit-report(2) 創(chuàng)建 Robotium 測(cè)試用例創(chuàng)建好我們的 Robotium 測(cè)試用例,并且根據(jù)需要組織好測(cè)試用例。 現(xiàn)在我們測(cè)試用例是針對(duì)眾籌網(wǎng)的,只有一個(gè)登錄測(cè)試用例,如圖 7.1.1 所示:圖 7.1.1 準(zhǔn)備好測(cè)試用例(3) 添加 junit-report 包到工程中 將剛剛下載的 android-junit-report-1.5.8.jar 包,添加到項(xiàng)目中。通過(guò)右擊項(xiàng)目”Build path”Configure

3、 build path”,在打開(kāi)的對(duì)話 框中“Libraries”Add External JARs”,將包附加進(jìn)來(lái)。如圖 7.1.2 所示:圖 7.1.2 添加 junit-report 包同時(shí),選擇“Orderand Export”選項(xiàng)卡,將剛剛添加進(jìn)來(lái)的包選擇,單擊“OK”按鈕,完成包的添加。 (4) 修改 AndroidManifest.xml 文件修改AndroidManifest.xml文件如下,使用JUnitReportTestRunner 運(yùn)行測(cè)試用例。將下面兩句: 修改成: (5) 修改 Run Configurations 配置當(dāng)我們修改了 xml 文件后,還需要修改一下

4、Run Configurations配置。右擊項(xiàng)目,選擇“Run as”“Run Configurations”,在 打開(kāi)的窗口中左側(cè)的“Andriod JUnit Test”下選擇要設(shè)置的項(xiàng)目,如“AllTests”。然后在右側(cè)選擇“Run all tests in the selected project or package”,單擊“Instrumention runner”后面的下拉 框,就可以看到我們?cè)?Xml 文件中填寫(xiě)的“com.zutubi.android.junitreport.JUnitReportTestRunner”,然 后單擊“run”按鈕,則測(cè)試用例就會(huì)在我們的測(cè)試

5、機(jī)上運(yùn)行起來(lái)。 如圖 7.1.3 所示:圖 7.1.3 配置 Run Configuration(6) 查看測(cè)試報(bào)告經(jīng)過(guò)上面的配置,通過(guò) JUnitReportTestRunner 運(yùn)行測(cè)試用例后,會(huì)在手機(jī)上/data/data/com.subject.zhongchou/files 下生成測(cè)試報(bào)告文件 junit-report.xml 。 如果你用的是其他的 App ,則 com.subject.zhongchou 會(huì)不同,找到你自己的 App 名稱即可。如圖7.1.4 所示:圖 7.1.4 在手機(jī)上生成測(cè)試報(bào)告注:用 junit-report 在手機(jī)上生成報(bào)告是有一個(gè)前提的,你的手 機(jī)必須

6、已經(jīng) Root,并且給/data/data 文件夾設(shè)置了 777 權(quán)限。否則我們無(wú)法將測(cè)試報(bào)告寫(xiě)到系統(tǒng)數(shù)據(jù)文件夾下,也沒(méi)有辦法查看文件。 (7) 取出測(cè)試報(bào)告測(cè)試用例是在手機(jī)上運(yùn)行的,所以產(chǎn)生的測(cè)試也在手機(jī)中。雖然 我們可以直接用手機(jī)查看報(bào)告,可是還是不如在電腦上查看的方便。 現(xiàn)在我們?cè)跍y(cè)試工程中創(chuàng)建文件夾“test-output”,使用下面的命令 將測(cè)試報(bào)告拉取到這個(gè)文件夾中: C:adbpull/data/data/com.subject.zhongchou/files/junit-report.xmlD:robotiumautotestZhongChouDemotest-output然后

7、在打開(kāi)測(cè)試報(bào)告文件,內(nèi)容如下: (8) 總結(jié)這個(gè) junit-report 是官方提供的包,使用起來(lái)比較方便。但是測(cè) 試機(jī)必須先 root。測(cè)試報(bào)告是 Xml 格式的,不方便閱讀,網(wǎng)上說(shuō)在 jenkins 中任務(wù)構(gòu)建完成后即可使用Publish JUnit test result report 插件分析得出單元測(cè)試報(bào)告。由于時(shí)間問(wèn)題,我還沒(méi)有嘗試一下 jenkins能否分析,不過(guò)后面我們會(huì)有自己的辦法分析 xml 報(bào)告。7.2 使用 testuntils 生成報(bào)告Testunitils 和 junit-report 類似,也是借助于第三方的包,產(chǎn)生測(cè)試 報(bào)告的,除了產(chǎn)生的測(cè)試報(bào)告文件名為 TE

8、ST-all.xml 外,使用步驟和產(chǎn)生報(bào)告的路徑也完全一樣。怎么說(shuō)這也是另一種方法,多學(xué)習(xí)一點(diǎn) 兒也沒(méi)有壞處的同,下面我們講解一下這個(gè)方法。 (1)下載 testuntils 包當(dāng)然在使用第三方的包之前,要下載對(duì)應(yīng)的包。Testuntils 包的下載地址是:/p/nbandroid-utils/(2)創(chuàng)建 Robotium 測(cè)試用例創(chuàng)建好我們的 Robotium 測(cè)試用例,并且根據(jù)需要組織好測(cè)試用例。 同樣我們使用上面創(chuàng)建的測(cè)試用例文件,結(jié)構(gòu)如圖 7.1.1 所示。(3)添加 Testuntils 包到工程將剛剛下載的 testutils.jar 包

9、,添加到項(xiàng)目中。通過(guò)右擊項(xiàng)目 ”Build path”Configure build path”,在打開(kāi)的對(duì)話框中“Libraries”Add External JARs”,將包附加進(jìn)來(lái)。如圖 7.2.1 所示:圖 7.2.1 添加 testutils 包同時(shí),選擇“Order and Export”選項(xiàng)卡,將剛剛添加進(jìn)來(lái)的包選擇,單擊“OK”按鈕,完成包的添加。 (4)修改 AndroidManifest.xml 配置修改 AndroidManifest.xml 文件如下,使用 testutils 運(yùn)行測(cè)試 用例。將下面兩句: 修改成: (5)修改 Run Configurations 配置

10、當(dāng)我們修改了 xml 文件后,還需要修改一下 Run Configurations配置。右擊項(xiàng)目,選擇“Run as”“Run Configurations”,在 打開(kāi)的窗口中左側(cè)的“Andriod JUnit Test”下選擇要設(shè)置的項(xiàng)目,如“AllTests”。然后在右側(cè)選擇“Run all tests in the selected project or package”,單擊“Instrumention runner”后面的下拉 框,就可以看到我們?cè)?Xml 文件中填寫(xiě)的“com.neenbedankt.android.test.InstrumentationTestRunner”,

11、然后單擊“run”按鈕,則測(cè)試用例就會(huì)在我們的測(cè)試機(jī)上運(yùn)行起來(lái)。 如圖 7.2.2 所示:圖 7.2.2 配置 Run Configuration(6)查看測(cè)試報(bào)告經(jīng)過(guò)上面的配置,通過(guò) InstrumentationTestRunner 運(yùn)行測(cè)試用例后,會(huì)在手機(jī)上/data/data/com.subject.zhongchou/files 下生成測(cè)試報(bào)告文件 TEST-all.xml 。如果你用的是其他的 App ,則 com.subject.zhongchou 會(huì)不同,找到你自己的 App 名稱即可。如圖7.2.3 所示:圖 7.2.3 在手機(jī)上生成測(cè)試報(bào)告注:和 junit-report

12、一樣,用 Testuntils 在手機(jī)上生成報(bào)告是有一個(gè)前提的,你的手機(jī)必須已經(jīng) Root,并且給/data/data 文件夾設(shè)置了 777 權(quán)限。否則我們無(wú)法將測(cè)試報(bào)告寫(xiě)到系統(tǒng)數(shù)據(jù)文件夾下,也 沒(méi)有辦法查看文件。 (7)取出測(cè)試報(bào)告測(cè)試用例是在手機(jī)上運(yùn)行的,所以產(chǎn)生的測(cè)試也在手機(jī)中。雖然 我們可以直接用手機(jī)查看報(bào)告,可是還是不如在電腦上查看的方便。 現(xiàn)在我們?cè)跍y(cè)試工程中創(chuàng)建文件夾“test-output”,使用下面的命令 將測(cè)試報(bào)告拉取到這個(gè)文件夾中: C:adbpull/data/data/com.subject.zhongchou/files/TEST-all.xmlD:robotium

13、autotestZhongChouDemotest-output然后在打開(kāi)測(cè)試報(bào)告文件,內(nèi)容如下: (8)總結(jié)Testuntils 和 Junit-report 是完全一樣的兩個(gè)第三方包,只是生成的 報(bào)告文件名不同,使用方法等都類似,它們之間的區(qū)別我沒(méi)有深入去 研究,不過(guò)使用這兩個(gè)包都可以生成手機(jī)測(cè)試報(bào)告。 7.3 重寫(xiě) InstrumentationTestRunner 類生成報(bào)告 由于 Junit-report 和 testuntils 生成的報(bào)告都是在系統(tǒng)目錄/data/data 下面,如果手機(jī)沒(méi)有 Root,是沒(méi)有權(quán)限生成報(bào)告的。所以我在網(wǎng)上看到了另一種方法,重寫(xiě) Instrument

14、ationTestRunner 類把報(bào)告生成到手機(jī)卡上,參考博客 (/hunterno4/article/details/14485663)。下面我們 也講述一下這種方法: (1)編寫(xiě)測(cè)試用例在我們執(zhí)行測(cè)試用例之前,已經(jīng)完成了測(cè)試用例工程和具體測(cè)試 用例的編寫(xiě),此時(shí)我們有公用的函數(shù)類和具體的測(cè)試用例文件,上面 已經(jīng)介紹過(guò)結(jié)構(gòu)了,此處不再累述。 (2)編寫(xiě) InstrumentationTestRunner 類由于我們要重寫(xiě) InstrumentationTestRunner 類,所以在我們的測(cè)試工程公共類中,如:/src/com/zhongchou/Com

15、monFunctions 路徑下創(chuàng)建類文件 InstrumentationTestRunner.java,內(nèi)容如下:package com.zhongchou.CommonFunctions;import java.io.File;import java.io.FileWriter; import java.io.IOException; import java.io.Writer;import org.xmlpull.v1.XmlPullParserFactory;import org.xmlpull.v1.XmlSerializer;import android.content.Conte

16、xt;import android.os.Bundle;import android.os.Environment;/* This test runner creates a TEST-all.xml in the files directory of the application under test.public class InstrumentationTestRunner extends android.test.InstrumentationTestRunner private Writer mWriter;private XmlSerializer mTestSuiteSeria

17、lizer;private long mTestStarted;private static final String JUNIT_XML_FILE = TEST-all.xml;*/Overridepublic void onStart() tryFile fileRobo = new File(getTestResultDir(getTargetContext();if(!fileRobo.exists() fileRobo.mkdir();if(isSDCardAvaliable() File resultFile = newFile(getTestResultDir(getTarget

18、Context(),JUNIT_XML_FILE);startJUnitOutput(new FileWriter(resultFile);elsestartJUnitOutput(new FileWriter(new File(getTargetContext().getFilesDir(),JUNIT_XML_FILE);catch(IOException e)throw new RuntimeException(e);super.onStart();void startJUnitOutput(Writer writer) try mWriter = writer;mTestSuiteSe

19、rializer = newSerializer(mWriter); mTestSuiteSerializer.startDocument(null, null); mTestSuiteSerializer.startTag(null, testsuites); mTestSuiteSerializer.startTag(null, testsuite); catch (Exception e) throw new RuntimeException(e);/* 判斷SD卡是否存在 * return*/private boolean isSDCardAvaliable()return Envir

20、onment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);/* 獲取測(cè)試結(jié)果報(bào)告文件所在的路徑 * param context被測(cè)工程的context* return返回測(cè)試結(jié)果報(bào)告文件所在的路徑 */private String getTestResultDir(Contextcontext) String packageName = / + robotium;String filepath = context.getCacheDir().getPath() + packageName;if(android.os.B

21、uild.VERSION.SDK_INT -1) message = reason.substring(index+1); reason = reason.substring(0, index);mTestSuiteSerializer.attribute(null, message, message); mTestSuiteSerializer.attribute(null, type, reason); mTestSuiteSerializer.text(stack);mTestSuiteSerializer.endTag(null, failure); else mTestSuiteSe

22、rializer.attribute(null, time, String.format(%.3f, time);mTestSuiteSerializer.endTag(null, testcase);if (current = total) mTestSuiteSerializer.startTag(null, system- out); mTestSuiteSerializer.endTag(null, system- out); mTestSuiteSerializer.startTag(null, system- err); mTestSuiteSerializer.endTag(nu

23、ll, system- err); mTestSuiteSerializer.endTag(null, testsuite); mTestSuiteSerializer.flush();Overridepublic void finish(int resultCode, Bundle results) endTestSuites();super.finish(resultCode, results);void endTestSuites() try mTestSuiteSerializer.endTag(null, testsuites); mTestSuiteSerializer.endDo

24、cument(); mTestSuiteSerializer.flush();mWriter.flush(); mWriter.close(); catch (IOException e) throw new RuntimeException(e);代碼是網(wǎng)上提供的,并且有相應(yīng)的注釋,在此就不講解代碼了。 (3)修改 AndroidManifest.xml 配置修 改AndroidManifest.xml文件 如 下 , 使用InstrumentationTestRunner 運(yùn)行測(cè)試用例。將下面兩句: 修改成: (4)修改 Run Configurations 配置當(dāng)我們修改了 xml 文件

25、后,還需要修改一下 Run Configurations配置。右擊項(xiàng)目,選擇“Run as”“Run Configurations”,在 打開(kāi)的窗口中左側(cè)的“Andriod JUnit Test”下選擇要設(shè)置的項(xiàng)目,如“AllTests”。然后在右側(cè)選擇“Run all tests in the selected project or package”,單擊“Instrumention runner”后面的下拉 框,就可以看到我們?cè)?Xml 文件中填寫(xiě)的“com.zhongchou.CommonFunctions.InstrumentationTestRunner”, 然后單擊“run”按鈕,

26、則測(cè)試用例就會(huì)在我們的測(cè)試機(jī)上運(yùn)行起來(lái)。 如圖 7.3.1 所示:圖 7.3.1 配置 Run Configuration(5)查看測(cè)試報(bào)告經(jīng)過(guò)上面的配置,通過(guò)我們重寫(xiě)后的InstrumentationTestRunner 運(yùn)行測(cè)試用例,會(huì)在手機(jī)上/sdcard/robotuim/下生成測(cè)試報(bào)告文件 TEST-all.xml。如圖 7.3.2 所示:圖 7.3.2 在手機(jī)上生成測(cè)試報(bào)告注:和前面的兩種方法不同,此方法生成的測(cè)試報(bào)告在手機(jī)卡上, 所以不需要 Root 手機(jī),以設(shè)置權(quán)限等操作。(6)取出測(cè)試報(bào)告測(cè)試用例是在手機(jī)上運(yùn)行的,所以產(chǎn)生的測(cè)試也在手機(jī)中。雖然 我們可以直接用手機(jī)查看報(bào)告,可

27、是還是不如在電腦上查看的方便。 現(xiàn)在我們?cè)跍y(cè)試工程中創(chuàng)建文件夾“test-output”,使用下面的命令 將測(cè)試報(bào)告拉取到這個(gè)文件夾中: C:adb pull /sdcard/robotium/TEST-all.xml D:robotiumautotestZhongChouDemotest-output然后在打開(kāi)測(cè)試報(bào)告文件,內(nèi)容如下: (7)總結(jié)經(jīng)過(guò)重寫(xiě)InstrumentationTestRunner后,我們可以定義測(cè)試報(bào)告 保存的位置,不需要對(duì)手機(jī)進(jìn)行root和對(duì)系統(tǒng)文件進(jìn)行權(quán)限設(shè)置。相 對(duì)來(lái)說(shuō)限制條件少了一些兒,當(dāng)然有現(xiàn)成的代碼,我們也不需要修改 什么,如果你的編碼能力還可以,可以根據(jù)

28、自己的需要,重寫(xiě)上面的 類。7.4 測(cè)試報(bào)告優(yōu)化 通過(guò)上面的三種方法,我們都可以得到一個(gè) Xml 格式的測(cè)試報(bào)告, 不過(guò)這不是我們想要的,因?yàn)檫@樣的報(bào)告讀起來(lái)很費(fèi)勁,而且這樣的 報(bào)告發(fā)給領(lǐng)導(dǎo)們也是不行的。所以我們要美化一下才行,一般都是把 Xml 文件給轉(zhuǎn)化成 HTML 格式的。經(jīng)過(guò)查詢,找到了一種通過(guò) ant_junit 下面的一個(gè) junit-noframes.xsl來(lái)美化我們的測(cè)試報(bào)告,下面我們講解一下方法: (1) 下載 ant-junit.jarjunit-noframes.xsl 文件在 ant-junit.jar 包中,所以我們要先在網(wǎng)上下載這個(gè)包。下載地址我忘記了,你可以自己搜

29、索,也可以在我們本 章后面提供的網(wǎng)盤地址中下載。下載后解壓 ant-junit.jar,在下面的路 徑中會(huì)看到 junit-noframes.xsl。junit-noframes.xsl 文件路徑:ant-junitorgapachetoolsanttaskdefsoptionaljunitxsl(2) 整理測(cè)試用例報(bào)告和 junit-noframes.xsl將測(cè)試用例報(bào)告和 junit-noframes.xsl 都入到我們?cè)谏厦嫘陆ǖ奈募A test-output 文件夾中,這樣方便我們整理測(cè)試報(bào)告。(3) 美化測(cè)試報(bào)告通過(guò) python 或是 java 將 Xml,Xsl 文件換化成 HT

30、ML 文件,具體 的方法我們下節(jié)介紹。轉(zhuǎn)換后的測(cè)試報(bào)告如圖 7.4.1 所示:7.4.1 生成的 HTML 測(cè)試報(bào)告此時(shí)生成的 HTMl 報(bào)告是默認(rèn)的 junit-noframes.xsl 篩選的結(jié)果,包含的信息也許不是我們想要的,所以要修改 junit-noframes.xsl 文件, 生成我們想要的報(bào)告。 (4) 修改 junit-noframes.xsl為了測(cè)試我們想的效果:先展示出總體的運(yùn)行情況,然后列出所 有測(cè)試用例的執(zhí)行情況,我們要修改 junit-noframes.xsl 文件。在修改這個(gè)文件之前,我們手動(dòng)改一下測(cè)試報(bào)告文件 junit-report.xml, 增加 一些兒測(cè)試用

31、例的運(yùn)行結(jié)果。當(dāng)時(shí)如果正常運(yùn)行的情況下會(huì)有很多測(cè) 試用例的結(jié)果,現(xiàn)在我們只有一個(gè)測(cè)試用例,為了達(dá)到效果,我們修 改如下:然后根據(jù)我們的需要,修改 junit-noframes.xsl。由于我對(duì) xsl 文件不太了解,只好一邊學(xué)習(xí)一邊來(lái)修改了,修改的效果不是太好,大家 可以根據(jù)需要,對(duì)期進(jìn)行更好的優(yōu)化,希望我的用例能起到拋磚引玉 的效果。junit-noframes.xsl 修改如下: ZhongChou App TestReport body font:normal 68% verdana,arial,helvetica; color:#000000;table tr td, table tr

32、 th font-size: 68%;table.details trth font-weight: bold; text- align:left;background:#a6caf0;table.details trtd background:#eeep line-height:1.5em;margin-top:0.5em; margin-bottom:1.0em;h1 margin: 0px 0px 5px; font: 165% verdana,arial,helveticah2 margin-top: 1em; margin-bottom: 0.5em; font: bold 125%

33、 verdana,arial,helveticah3 margin-bottom: 0.5em; font: bold 115% verdana,arial,helveticah4 margin-bottom: 0.5em; font: bold 100% verdana,arial,helveticah5 margin-bottom: 0.5em; font: bold 100% verdana,arial,helveticah6 margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica.Error font-weight:b

34、old; color:red;.Failure font-weight:bold; color:purple;.Properties text-align:right; var TestCases = new Array();var cur;!CDATA function displayProperties (name) var win = window.open(,JUnitSystemProperties,scrollbars=1,resizable=1); var doc = win.document;doc.open();doc.write(Properties of + name +

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論