您的位置:軟件測(cè)試 > 開(kāi)源軟件測(cè)試 > 開(kāi)源測(cè)試管理工具 > Testlink
使用TestLink管理軟件自動(dòng)化測(cè)試過(guò)程
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2016/3/29 14:16:26 ] 推薦標(biāo)簽:測(cè)試管理工具 自動(dòng)化測(cè)試

  從測(cè)試計(jì)劃中獲取測(cè)試用例信息
  測(cè)試計(jì)劃 TestPlan 是使用 TestLink 管理自動(dòng)化測(cè)試過(guò)程的切入點(diǎn),通過(guò)指定測(cè)試計(jì)劃的名稱(chēng)作為參數(shù),編寫(xiě)代碼自動(dòng)化獲取測(cè)試用例的信息,進(jìn)而獲取測(cè)試用例的腳本文件信息并完成腳本文件的執(zhí)行。本部分介紹如何通過(guò)編程從測(cè)試計(jì)劃中獲取測(cè)試用例信息。本文使用第三方 Java 程序 TestLink Java API 請(qǐng)參考本系列的第一部分。
  在調(diào)用 TestLink Java API 之前,需要先實(shí)例化 TestLinkAPI 實(shí)例對(duì)象,代碼清單如下。關(guān)于如何獲取個(gè)人訪問(wèn)密鑰 devKey ,請(qǐng)參考本系列文章的第一部分。
  清單 1. 獲取 TestLinkAPI 實(shí)例
public class APIObject {
private static Logger logger = Logger.getLogger(APIObject.class);
private static TestLinkAPI api = null;
public static TestLinkAPI getAPI() {
if (null == api) {
String url = "http://localhost/testlink/lib/api/xmlrpc.php";
String devKey = "92b9cc5fc38e1ebde8813ff219ce5a07";
logger.debug("URL=" + url);
logger.debug("devKey=" + devKey);
try {
api = new TestLinkAPI(new URL(url), devKey);
} catch (TestLinkAPIException te) {
logger.error(te.getMessage(), te);
} catch (MalformedURLException mue) {
logger.error(mue.getMessage(), mue);
}
}
return api;
}
}
  借助上述實(shí)例化 api 對(duì)象,接著可以獲取測(cè)試計(jì)劃中的測(cè)試用例信息。使用測(cè)試計(jì)劃獲取測(cè)試用例信息的代碼清單如下。需要指定的參數(shù)為測(cè)試項(xiàng)目的名稱(chēng)和測(cè)試計(jì)劃的名稱(chēng),返回的是測(cè)試用例數(shù)組。。在調(diào)用 getTestCasesForTestPlan() 方法時(shí),只使用了執(zhí)行類(lèi)型 ExecutionType.AUTOMATED 對(duì)返回的測(cè)試用例數(shù)組進(jìn)行過(guò)濾,可以根據(jù)項(xiàng)目組情況,添加更多的過(guò)濾條件。
  清單 2. 獲取測(cè)試用例信息
  String planName="kenneth 測(cè)試計(jì)劃 ";
  String projectName= " 測(cè)試演示 ";
  TestLinkAPI api = APIObject.getAPI();
  TestPlan tl = api.getTestPlanByName(planName,projectName);
  TestCase[] tcs=api.getTestCasesForTestPlan(tl.getId(), null, null,null,null,null,
  null,null,ExecutionType.AUTOMATED,null,null);
  for(TestCase tc:tcs){
  logger.debug(tc.toString());
  }
  測(cè)試腳本上傳
  使用 TestLink 管理自動(dòng)化測(cè)試腳本的優(yōu)勢(shì)之一是,很容易復(fù)用維護(hù)在 TestLink 上的功能自動(dòng)化測(cè)試用例。自動(dòng)化測(cè)試團(tuán)隊(duì)負(fù)責(zé)對(duì)現(xiàn)有的測(cè)試用例進(jìn)行分析,劃定需要作為自動(dòng)化測(cè)試執(zhí)行的用例部分。編寫(xiě)自動(dòng)化測(cè)試用例腳本,并上傳到相應(yīng)的測(cè)試用例的附件部分。這樣自動(dòng)化測(cè)試與其相應(yīng)的自動(dòng)化測(cè)試腳本文件可以一一對(duì)應(yīng)起來(lái)。編寫(xiě)完畢自動(dòng)化測(cè)試腳本后,訪問(wèn) Testlink 站點(diǎn),點(diǎn)擊主頁(yè)的 Test Specification 鏈接,導(dǎo)航到相應(yīng)的測(cè)試用例節(jié)點(diǎn)上,雙擊定位到的用例,可以進(jìn)入用例編輯頁(yè)面。手工上傳附件非常簡(jiǎn)單,如圖 2 所示。上傳之后,顯示附件的標(biāo)題,附件的文件名稱(chēng),文件大小,文件的 MIME 類(lèi)型和附件的上傳日期等。點(diǎn)擊附件標(biāo)題超鏈接可以下載附件到本地。


圖 2. 手工上傳附件到測(cè)試用例

  除了手工上傳測(cè)試用例腳本文件外,還可以通過(guò)類(lèi)似下面的編程代碼來(lái)實(shí)現(xiàn)同樣的功能。示例代碼如清單 1 所示。需要提供的參數(shù)為測(cè)試用例對(duì)象 TestCase tc,上傳文件的本地文件路徑 file,上傳附件的標(biāo)題 title,上傳附件的描述信息 desc,附件的文件名字 fileName 和上傳附件的文件 MIME 類(lèi)型。對(duì)于 XML 文件,文件的類(lèi)型為 text/xml。調(diào)用清單 3 中的方法即可完成附件的上傳,代碼實(shí)現(xiàn)也非常簡(jiǎn)單。首先,讀取本地腳本文件轉(zhuǎn)換為字節(jié)數(shù)組 byteArray,然后對(duì)該字節(jié)數(shù)組進(jìn)行 Base64 編碼并轉(zhuǎn)換為字符串類(lèi)型的 fileContent。后,調(diào)用 TestLinkAPI 的 uploadTestCaseAttachment() 方法完成附件的上傳。代碼中使用到了 Commons IO 開(kāi)源類(lèi)庫(kù)文件中的 FileUitls 類(lèi)。
  清單 3. 上傳測(cè)試用例附件
private static TestLinkAPI api = APIObject.getAPI();
public static void testUpload(TestCase tc, String file, String title,
String desc, String fileName, String fileType) {
File attFile = new File(file);
String fileContent = "";
try {
byte[] byteArray = FileUtils.readFileToByteArray(attFile);
fileContent = new String(Base64.encodeBase64(byteArray));
} catch (IOException e) {
logger.error(e.getMessage(), e);
}
Attachment attachment = api.uploadTestCaseAttachment(
tc.getId(), // 測(cè)試用例編號(hào)
title, // 上傳附件的標(biāo)題
desc, // 附件的描述信息
fileName, // 附件的文件名稱(chēng)
fileType, // 上傳附件的 MIME 文件類(lèi)型
fileContent); // 附件的文件內(nèi)容
logger.debug(" 附件上傳完成," + attachment.toString());
}
  清單 3 的代碼是上傳附件到測(cè)試用例附件區(qū)的核心代碼,為了批量完成為多個(gè)用例分別上傳附件,需要在測(cè)試用例和需要上傳的本地附件文件做一個(gè)映射,循環(huán)調(diào)用清單 3 中的方法依次完成全部的附件上傳。具體的代碼實(shí)現(xiàn)留給讀者完成。
  需要注意的是,TestLink 的版本管理特性可以對(duì)測(cè)試用例進(jìn)行版本控制,但不支持對(duì)附件也做版本控制,即一個(gè)用例的所有版本都共享同樣的附件文件。如果讀者需要為用例的不同版本做自動(dòng)化測(cè)試,可以在上傳腳本文件時(shí)為文件名稱(chēng)附加上版本信息。下載用例腳本文件時(shí),根據(jù)版本信息對(duì)腳本文件進(jìn)行過(guò)濾。本文假設(shè)所有的版本可以共享同一份腳本文件,隨時(shí)保持附件文件的更新即可。
  測(cè)試腳本文件下載
  通過(guò)完成上述操作,自動(dòng)化測(cè)試用例腳本文件已經(jīng)維護(hù)在 TestLink 測(cè)試用例附件區(qū)。在使用自動(dòng)化測(cè)試工具執(zhí)行計(jì)劃的測(cè)試用例之前,需要下載測(cè)試用例腳本文件到本地文件系統(tǒng),以方便自動(dòng)化測(cè)試工具對(duì)其進(jìn)行解析運(yùn)行。使用 TestLink 管理自動(dòng)化測(cè)試用例腳本的優(yōu)勢(shì)之一是,通過(guò)編寫(xiě)簡(jiǎn)單的代碼很容易完成腳本文件的下載。下載用例腳本文件的代碼見(jiàn)清單 4,為下載方法指定 TestCase tc 參數(shù),即可完成該測(cè)試用例的附件下載任務(wù)。代碼很簡(jiǎn)單,首先根據(jù)測(cè)試用例實(shí)例 tc 獲取附件數(shù)組 atts,對(duì)數(shù)組進(jìn)行循環(huán),依次獲取附件 att 的文件名稱(chēng)和文件內(nèi)容,并保存到本地工作目錄下的 UseCases 文件夾下。
  清單 4. 下載測(cè)試用例附件
private static TestLinkAPI api = APIObject.getAPI();
public static void getAttachments(TestCase tc) {
String dir = System.getProperty("user.dir") + File.separator
+ "UseCases";
File file = new File(dir);
if (!file.exists()) {
file.mkdirs();
}
Attachment[] atts = api.getTestCaseAttachments(tc.getId(), null);
for (Attachment att : atts) {
byte[] decoded = Base64.decodeBase64(att.getContent().getBytes());
FileOutputStream fos;
try {
fos = new FileOutputStream(new File(dir + File.separator
+ att.getFileName()));
logger.debug(" 測(cè)試用例附件保存為 =" + dir + File.separator
+ att.getFileName());
fos.write(decoded);
fos.close();
} catch (FileNotFoundException e) {
logger.error(e.getMessage(), e);
} catch (IOException e) {
logger.error(e.getMessage(), e);
}
}
}
  測(cè)試腳本執(zhí)行
  下載完畢測(cè)試用例腳本文件,下一環(huán)節(jié)是使用自動(dòng)化測(cè)試工具執(zhí)行這些用例文件。關(guān)于如何運(yùn)行基于 XML 格式的自動(dòng)化測(cè)試用例,推薦讀者閱讀 IBM developerWorks 文章《使用 XML 維護(hù) Selenium 自動(dòng)化測(cè)試腳本》。測(cè)試用例執(zhí)行完畢,自動(dòng)化測(cè)試工具生成執(zhí)行日志信息、測(cè)試結(jié)果信息等。相應(yīng)測(cè)試用例的執(zhí)行結(jié)果狀態(tài),如 passed、failed、blocked 等,需要傳給下一環(huán)節(jié),用于自動(dòng)修改 TestLink 上測(cè)試用例的執(zhí)行結(jié)果狀態(tài),完成標(biāo)示結(jié)果的工作。
  回傳測(cè)試結(jié)果
  上述步驟中,通過(guò)使用第三方自動(dòng)化測(cè)試工具執(zhí)行完畢自動(dòng)化測(cè)試用例,收集到測(cè)試結(jié)果。下面需要進(jìn)行的是,通過(guò)編寫(xiě)代碼自動(dòng)化地修改維護(hù)在 TestLink 上的自動(dòng)化測(cè)試用例的執(zhí)行結(jié)果狀態(tài)。代碼如清單 5 所示,運(yùn)行下面的代碼會(huì)自動(dòng)把 TestLink 中測(cè)試計(jì)劃下的測(cè)試用例在構(gòu)建"my build"上運(yùn)行的測(cè)試執(zhí)行結(jié)果標(biāo)記為"通過(guò)"。演示程序中,測(cè)試計(jì)劃編號(hào)等數(shù)據(jù)為硬編碼,讀者需要根據(jù)自己的情況去完善回傳測(cè)試結(jié)果的程序。如果運(yùn)行失敗,測(cè)試結(jié)果則標(biāo)為"失敗"狀態(tài),并和集成的缺陷管理系統(tǒng)進(jìn)行自動(dòng)化進(jìn)行缺陷數(shù)據(jù)同步。
  清單 5. 自動(dòng)上傳測(cè)試結(jié)果的代碼清單
private static TestLinkAPI api = APIObject.getAPI();
public static void testReport() {
// 測(cè)試計(jì)劃
Integer planID = 7;
// 測(cè)試測(cè)試的構(gòu)建
String buildName="my build";
// 測(cè)試計(jì)劃
Integer tcID = 3;
ReportTCResultResponse response = api.reportTCResult(tcID, null,
planID, ExecutionStatus.PASSED, null, buildName,
" 自動(dòng)化上傳結(jié)果的備注 ", null, null, null, null, null, null);
logger.debug("response=" + response);
}
  結(jié)束語(yǔ)
  通過(guò)上面對(duì) TestLink 的介紹,我們了解到了如何基于 TestLink 管理自動(dòng)化測(cè)試過(guò)程。本文詳細(xì)介紹了基于 TestLink 的自動(dòng)化測(cè)試解決方案的核心實(shí)現(xiàn),分析了架構(gòu)流程圖并對(duì)主要的部分給出了代碼示例。關(guān)于如何使用 TestLink 管理功能測(cè)試過(guò)程,請(qǐng)參考本系列文章的第一部分。

上一頁(yè)12下一頁(yè)
軟件測(cè)試工具 | 聯(lián)系我們 | 投訴建議 | 誠(chéng)聘英才 | 申請(qǐng)使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd