2015年11月30日 星期一

在 JMeter 中驗證 JSON

在使用 JMeter 做自動化測試時,想要用比較簡單的方式處理網站回覆的 JSON
簡單查了點資料後,看起來預設的方法應該是用 JSR223 Post Processor 或者 BSF Post Processor
不過從 [1] 的描述看來,這個作法因為要把回應轉成 JavaScript 語法,實際跑起來效率頗低
如果遇到要執行的 concurrent thread 很多時,可能會把 CPU 吃滿。

2015年11月3日 星期二

java.lang.NoClassDefFoundError: org/apache/http/ssl/TrustStrategy

在使用 Apache HttpClient 時,遇到一個找不到 TrustStrategy 的問題
根據 [1] 的解答,問題是發生在我用 Maven 引入了新版的 httpclient 4.5.1,但是沒有指定 httpcore 的版本
所以 Maven 自動用了比較舊版的 httpcore 4.3.x,導致了找不到需要的類別的問題。

2015年10月30日 星期五

在 Apache HttpClient 4.5 版忽略 HTTPS 認證

一般 HTTPS 連線會驗證包括證書本身以及像是 host name 等資訊
不過在測試階段時,有時會因為證書是用自我驗證來產生的,導致程式碼無法正常運作
HttpClient 有設定方法可以忽略這些認證資訊~
不過在 HttpClient 4.3 版以後,陸續有些類別和方法都被廢棄了
以下是在 HttpClient 4.5 版的設定方法。

2015年10月29日 星期四

使用 logback 時,在 Jetty 上忽略 Jetty 產生的 log

在部署專案時,嘗試了使用 slf4j + logback
不過部署到 Jetty 上就發現 Jetty 瘋狂地印出 Jetty 自己運行時的 debug log
變成要在 log 海中找到自己的 application log 非常花時間。

2015年10月20日 星期二

HTTP 基本驗證

HTTP 協定中有定義了基本的驗證方法,可以讓瀏覽器直接用明文方式傳輸驗證資訊。

從伺服器端的角度來說,伺服器在接收到 request 時,是去檢查是否有帶驗證資訊(Authorization 這個標頭)進來
沒有的話,伺服器會回應 HTTP Status Code 401
並且在標頭中加上 WWW-Authenticate: Basic realm="Secure Area" 的資訊
其中 "Secure Area" 是表示伺服器名稱,讓瀏覽器可以顯示在介面上提示使用者的。

如果 request 中已經有 Authorization 這個標頭,伺服器可以用 Base64 編碼去解開內容
裡面的資訊會以 : 的格式存放。

參考資料:
  1. HTTP基本認證

2015年10月19日 星期一

Jetty 的 ClassLoader 與模組設定

這篇記錄的標題有點難定...目的是想用來記錄這幾天遇到的 ClassNotFound 問題。

我的環境原先是在 {$JETTY_HOME}/lib 裡面建立一個資料夾 {$JETTY_HOME}/lib/{PROJECT_NAME},放我的專案要用的函式庫(都是開源的函式庫)
運作時看起來都蠻好的,但後來遇到需要引用另一個我們自己寫的 jar
這時問題就出現了,我把 jar 一樣丟進 {$JETTY_HOME}/lib 資料夾裡,卻一直跑出 ClassNotFoundException 的錯誤。

2015年10月14日 星期三

使用 Jersey client 送出 HTTP 要求

一般來說,要用 Java 送出 HTTP 要求時,大多直覺會想到的都是 Apache HttpClient 吧
不過在我們的環境中,遇到了一點奇妙的需求,Apache 的套件有點不合用
剛好又發現有網友提到,Jersey 本身就有提供 Jersey client 可以作為送出 HTTP 的方法
而且我們本來就用 Jersey 來提供 RESTful 介面,不需要另外引用函式庫,所以就拿來試試看了。