差異處
這裏顯示兩個版本的差異處。
Both sides previous revision 前次修改 下次修改 | 前次修改 | ||
rf:rf:wget [2018/01/20 23:12] tony [wget] |
rf:rf:wget [2023/06/25 09:48] (目前版本) |
||
---|---|---|---|
行 1: | 行 1: | ||
{{tag>RobotFramework}} | {{tag>RobotFramework}} | ||
- | ====== RobotFramework Keyword: wget ====== | + | ====== RobotFramework Keyword: wget - 下載網頁上的資料 ====== |
===== Problem ===== | ===== Problem ===== | ||
網站大都有提供下載功能,驗證下載功能與內容是否正常是必要的測試項目之一。然而,SeleniumLibrary並沒有提供類似的keyword。本篇文章分享我們解決這個問題的歷程。 | 網站大都有提供下載功能,驗證下載功能與內容是否正常是必要的測試項目之一。然而,SeleniumLibrary並沒有提供類似的keyword。本篇文章分享我們解決這個問題的歷程。 | ||
行 6: | 行 6: | ||
===== How to? ===== | ===== How to? ===== | ||
==== 方法1: 透過外部程式wget ==== | ==== 方法1: 透過外部程式wget ==== | ||
- | 起初我們透過外部程式去達到我們的測試需求。要達成此目的,有幾個步驟: | + | 起初我們透過外部程式去達到測試需求。要達成此目的,有幾個步驟: |
- 測試環境可以執行wget。 | - 測試環境可以執行wget。 | ||
- 取得下載位置的連結。 | - 取得下載位置的連結。 | ||
行 14: | 行 14: | ||
\\ | \\ | ||
=== 步驟1: 測試環境可以執行wget === | === 步驟1: 測試環境可以執行wget === | ||
- | 大部分linux安裝起來就內建wget,沒有就自行安裝;windows可以從[[https://eternallybored.org/misc/wget/|這裡]]下載執行檔,將它放到你的測試環境中。\\ | + | 大部分linux安裝起來就有wget,如果沒有就自行安裝;而windows可以從[[https://eternallybored.org/misc/wget/|這裡]]下載執行檔,將它放到你的測試環境中。\\ |
\\ | \\ | ||
=== 步驟2: 取得下載位置的連結 === | === 步驟2: 取得下載位置的連結 === | ||
行 23: | 行 23: | ||
\\ | \\ | ||
=== 步驟3: 設定Cookie === | === 步驟3: 設定Cookie === | ||
- | 假如你的網站是需要登入才能夠操作,這部分就是必要的。首先可以透過SeleniumLibrary提供的[[http://robotframework.org/SeleniumLibrary/SeleniumLibrary.html#Get%20Cookies|Get Cookies]]來取得當前session的cookie內容;它所拿到的內容是使用name1=value1; name2=value2;形式組成,只要挑你需要的屬性出來即可。對我們而言,JSESSIONID記載我們的登入資訊。\\ | + | 假如你的網站是需要登入才能夠操作,這部分就是必要的。首先可以透過SeleniumLibrary提供的[[http://robotframework.org/SeleniumLibrary/SeleniumLibrary.html#Get%20Cookies|Get Cookies]]來取得當前session內容;它所拿到的內容是使用name1=value1; name2=value2;形式組成,只要挑你需要的屬性出來即可。對我們而言,JSESSIONID記載我們的登入資訊。\\ |
\\ | \\ | ||
接著是要組成wget所需要的cookie file格式,詳細格式可以參考此[[https://unix.stackexchange.com/questions/36531/format-of-cookies-when-using-wget|連結]],大致上如下: | 接著是要組成wget所需要的cookie file格式,詳細格式可以參考此[[https://unix.stackexchange.com/questions/36531/format-of-cookies-when-using-wget|連結]],大致上如下: | ||
行 29: | 行 29: | ||
${domain_ip} FALSE ${path} FALSE 9999999999 JSESSIONID ${jsession_id} | ${domain_ip} FALSE ${path} FALSE 9999999999 JSESSIONID ${jsession_id} | ||
</code> | </code> | ||
- | 假如你是使用localhost連線,${domain_ip}就是localhost,否則就是要連線的機器IP。Keyword大概如下,參數為連結位置${fileUrl}與下載檔案路徑${fileName},而為了略過Certificate驗證,搭配了--no-check-certificate參數: | + | 假如你是使用localhost連線,${domain_ip}就是localhost,否則就是要連線的機器IP。\\ |
+ | \\ | ||
+ | === 步驟4: 執行下載 === | ||
+ | 假如參數連結位置為${fileUrl}而下載檔案路徑${fileName},wget的執行指令如下: | ||
+ | <code> | ||
+ | ${wget} --cookies=on --load-cookies ${cookie_file} --output-document ${fileName} ${fileUrl} | ||
+ | </code> | ||
+ | 如果下載的位置為https,為了略過Certificate驗證,會搭配--no-check-certificate參數: | ||
+ | <code> | ||
+ | ${wget} --cookies=on --no-check-certificate --load-cookies ${cookie_file} --output-document ${fileName} ${fileUrl} | ||
+ | </code> | ||
+ | \\ | ||
+ | === 步驟5: 驗證內容 === | ||
+ | 這部分就是看各位的業務需求去做assertion。我的Keyword提供給大家參考: | ||
<code> | <code> | ||
Download File Wit Wget | Download File Wit Wget | ||
行 37: | 行 50: | ||
@{jessonid} Split String ${cookies} JSESSIONID= | @{jessonid} Split String ${cookies} JSESSIONID= | ||
${location} Get Location IP | ${location} Get Location IP | ||
- | ${cookies} Set Variable ${location}\tFALSE\t//\tFALSE\t9999999999\tssm_locale_language\ten\r\n ${location}\tFALSE\t//\tFALSE\t9999999999\tssm_locale_country\t\r\n ${location}\tFALSE\t//\tFALSE\t0\tJSESSIONID\t@{jessonid}[1]\r\n localhost\tFALSE\t//\tFALSE\t9999999999\tssm_locale_language\ten\r\n localhost\tFALSE\t//\tFALSE\t9999999999\tssm_locale_country\t\r\n localhost\tFALSE\t//\tFALSE\t0\tJSESSIONID\t@{jessonid}[1] | + | ${cookies} Set Variable ${location}\tFALSE\t//\tFALSE\t0\tJSESSIONID\t@{jessonid}[1]\r\n localhost\tFALSE\t//\tFALSE\t0\tJSESSIONID\t@{jessonid}[1] |
Log ${cookies} | Log ${cookies} | ||
Create File ./cookies ${cookies} | Create File ./cookies ${cookies} | ||
行 46: | 行 59: | ||
Should Be Equal As Integers @{output}[0] 0 @{output}[1] | Should Be Equal As Integers @{output}[0] 0 @{output}[1] | ||
</code> | </code> | ||
- | |||
==== 方法2: 透過HttpClient Library ==== | ==== 方法2: 透過HttpClient Library ==== | ||
- | httpclient-4.3.5 | + | 由於我們將預設連線修改為https,並且只允許TLS1.2,這導致在舊版本的Linux如RHEL6.0上無法透過預設的wget進行測試。因此改為自己實作TestLibrary去提供wget的功能。我所使用的HttpClient版本為httpclient-4.3.5,我直接將程式分享給各位,這可能會根據你的需求或library版本需要做些微調:\\ |
+ | \\ | ||
+ | Robot Keyword: | ||
<code> | <code> | ||
Download File | Download File | ||
行 59: | 行 73: | ||
log ${ret} | log ${ret} | ||
</code> | </code> | ||
+ | Test Library WgetLibrary: | ||
<code java> | <code java> | ||
import java.io.File; | import java.io.File; | ||
行 75: | 行 90: | ||
import org.apache.http.impl.client.HttpClientBuilder; | import org.apache.http.impl.client.HttpClientBuilder; | ||
import org.apache.http.impl.cookie.BasicClientCookie; | import org.apache.http.impl.cookie.BasicClientCookie; | ||
- | |||
- | import com.supermicro.ssm.common.Cleaner; | ||
- | |||
public class WgetLibrary { | public class WgetLibrary { | ||
行 116: | 行 128: | ||
BasicCookieStore cookieStore = createCookieStore(cookies, domain, path); | BasicCookieStore cookieStore = createCookieStore(cookies, domain, path); | ||
if( cookieStore != null ) { | if( cookieStore != null ) { | ||
- | System.out.println("set cookie: " + cookies); | ||
builder.setDefaultCookieStore(cookieStore); | builder.setDefaultCookieStore(cookieStore); | ||
} | } | ||
行 122: | 行 133: | ||
httpClient = builder.build(); | httpClient = builder.build(); | ||
response = httpClient.execute(new HttpGet(url)); | response = httpClient.execute(new HttpGet(url)); | ||
- | System.out.println("destfile: " + new File(destFile).getAbsolutePath()); | ||
fos = new FileOutputStream(new File(destFile)); | fos = new FileOutputStream(new File(destFile)); | ||
IOUtils.copy(response.getEntity().getContent(), fos); | IOUtils.copy(response.getEntity().getContent(), fos); | ||
行 142: | 行 152: | ||
* [[https://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/conn/ssl/TrustSelfSignedStrategy.html|javadoc - TrustSelfSignedStrategy]] | * [[https://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/conn/ssl/TrustSelfSignedStrategy.html|javadoc - TrustSelfSignedStrategy]] | ||
* [[http://robotframework.org/SeleniumLibrary/SeleniumLibrary.html|RobotFramework - SeleniumLibrary]] | * [[http://robotframework.org/SeleniumLibrary/SeleniumLibrary.html|RobotFramework - SeleniumLibrary]] | ||
+ | * [[http://www.baeldung.com/httpclient-4-cookies|HttpClient 4 – Send Custom Cookie]] | ||
===== ===== | ===== ===== | ||
---- | ---- |