WebDriver 是一個(gè)龐大的工程。如果我們?cè)囍阉械臇|西都放在一個(gè)單獨(dú)的構(gòu)建文件里,它最終會(huì)變得難于管理。我們知道會(huì)這樣。因?yàn)槲覀円呀?jīng)嘗試過了。所以我們把單獨(dú)的 Rakefile 分成一系列 build.desc 文件。它們描述構(gòu)建的一部分。
讓我們看一個(gè) build.desc 文件。這是測(cè)試主要的 build.desc 部分:
java_test(name = "single",
srcs = [
"SingleTestSuite.java",
],
deps = [
":tests",
"http://java/server/src/org/openqa/selenium/server",
"http://java/client/test/org/openqa/selenium/v1:selenium-backed-webdriver-test",
"http://java/client/test/org/openqa/selenium/firefox:test",
] ])
它突出了大部分關(guān)鍵思想。首先,它聲明了 target, 在這種情況下有一個(gè)單獨(dú)的 java_test target. 每一個(gè) target 有一個(gè) name 屬性。
Target Names
Build.desc 文件的位置和名字相結(jié)合用來產(chǎn)生 rake 任務(wù)。所有的任務(wù)名字是以“ // ”為前輟,后面跟前所包含的 build.desc 文件相對(duì)于 Rakefile 的目錄路徑,然后是一個(gè)“:”,最后是 build.desc 里面 target 的名字??匆粋€(gè)例子就很容易理解:)
由此 產(chǎn)生的 rake 任務(wù)例子 //java/client/test/org/openqa/selenium:single
簡寫 Target Names
作為一種快捷方式,如果一個(gè) target 是以包涵在 build.desc 文件的目錄命名的,你可以省略 rake 任務(wù)名字冒號(hào)后 面 的部分。這樣 //java/server/src/org/openqa/selenium/server 等同于 //java/server/src/org/openqa/selenium/server:server .
隱含的Targets
構(gòu)建規(guī)則支持隱含的 targets, 并提供正常構(gòu)建 target 一個(gè)相關(guān)的擴(kuò)展。例子包括生成源代碼的檔案,或者運(yùn)行測(cè)試。這些通過附加一個(gè)冒號(hào)和隱含的 target 的名字給構(gòu)建規(guī)則的全稱而得到聲明。這樣我們可以使用 "http://java/client/test/org/openqa/selenium:single:run" 來運(yùn)行 tests 。
下面 描述的每一個(gè)規(guī)則都有一個(gè)和他們相關(guān)的隱含 target.
Outputs
每一個(gè) target 在“ build.desc ”文件中指定只生成一個(gè)唯一的輸出。這很重要。請(qǐng)注意它。一般,所有的輸出文件以對(duì)應(yīng)的任務(wù)名被放在 build 目錄下。如: "http://java/org/openqa/selenium/server" 會(huì)以這樣輸出 "build/java/org/openqa/selenium/server.jar" 。 構(gòu) 建規(guī)則應(yīng)該輸出名字和它們生成文件的位置。
Dependencies
看一下在上面“ single ” target 里的“ deps ”部分。“ tests ”是指在當(dāng)前“ build.desc ”文件下的一個(gè) target, 在這種情況下,它是指上面的“ java_library ”。你可以看出它將涉及多個(gè)全路徑。例如 "http://java/server/src/org/openqa/selenium/server" 這涉及在一個(gè)crazy fun build.desc 文件里 面的 另一個(gè)target 。
Browsers
Py_test 和js_test 規(guī)則對(duì)多瀏覽器運(yùn)行相同的tests 有特殊的處理。相關(guān)的特殊瀏覽器meta 信息放在 rake-tasks/browsers.rb 中。一般在 target 名字后追加 _browsename (瀏覽器名字)來使用它 ; 如果沒有 _browsename 后輟,那 tests 將在所有瀏覽器中運(yùn)行。
舉個(gè)例子,如果我們有一個(gè) js_test 規(guī)則 //foo/bar, 我們將通過 target //foo/bar_ff:run 在 firefox 中運(yùn)行或者我們可以通過 target //foo/bar:run 對(duì)所有瀏覽器有效。
Build Targets
一個(gè)你能使用的有效 targets 簡單描述。
Common Attributes
所有構(gòu)建 target 都需要下面屬性
屬性名字 類型 含意
Name string 用來生成 rake target 和(常常)產(chǎn)生目錄的名字
常用屬性
屬性名字 類型 含意
Srcs array 為這一 target 而構(gòu)建原始代碼
Deps array 這一 target 的先決條件
java_library
l Output: 如果“ srcs ”屬性文件被設(shè)置, JAR 文件以“ name ”屬性被命名。
l 隱含 Targets: run ( 如果 "main" 屬性指定 ), project, project-srcs, uber, zip
l 必須的 Attributes: “ name ”并至少有一個(gè) "srcs" 或 "deps"
java_test
屬性名稱 類型 含意
Deps Array 同上
Srcs Array 同上
Resources Array