差異處

這裏顯示兩個版本的差異處。

連向這個比對檢視

Both sides previous revision 前次修改
下次修改
前次修改
rf:rf:wget [2018/01/20 23:21]
tony
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: 取得下載位置的連結 ===
行 42: 行 42:
 \\ \\
 === 步驟5: 驗證內容 === === 步驟5: 驗證內容 ===
-這部分就是看各位的業務需求去做assertion。我的Keyword提供給大家參考:​+這部分就是看各位的業務需求去做assertion。我的Keyword提供給大家參考:​
 <​code>​ <​code>​
 Download File Wit Wget Download File Wit Wget
行 59: 行 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
行 72: 行 73:
     log    ${ret}     log    ${ret}
 </​code>​ </​code>​
 +Test Library WgetLibrary:​
 <code java> <code java>
 import java.io.File;​ import java.io.File;​
行 88: 行 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 {
行 129: 行 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);​
  }  }
行 135: 行 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);
行 155: 行 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]]
 =====    ===== =====    =====
 ---- ----