2017-11-28 18 views
0

私がしたいこと: RestAssuredを使用してエンドポイントをテストしたいと思います。キーは、エンドポイントがログインしているユーザーだけに利用可能であることです。ログインするには、カスタムのsuccessHandlerを使用してスプリングセキュリティのデフォルトエンドポイントを使用しています。ランダムトークンを設定してデータベースに保存し、 -トークン"。私はバックエンドでセッションを作成していません。セキュリティで保護されたエンドポイントにアクセスする場合、フロントエンドは「User-Token」ヘッダーを付けてコールします。それから私はデータベースをチェックインするためにトークンを使用しています。各トークンは異なり、ランダムです。また、私はトークンのための春のセキュリティのものを使用しません。今私はこの動作をテストしたい。RestAssured testing、get user token

技術:すべてのまず、私はトークンを取得する方法が本当にわからない:は働いていない何& Reduxの、春ブーツ、RestAssured、JUnitの、Tomcatの

を反応します。私は、それを手作業でデータベースにいくつかのテストユーザーに強制することができますが、AFAIKは悪い悪い習慣です。私はその文書を読んで、auth().formについて少しずつ調べました。しかし、その下にはhave to made to the server in order to retrieve the webpage with the login detailsという最善のアプローチではなく、ウェブページは完全にバックエンドから分離されているとは言えませんでした。それにもかかわらず私はアプローチを試みたが、うまくいかなかった。

@Before 
public void LogInUser(){ 
    String loginUrl = "http://localhost:8080/login"; 
    userToken = 
      given().auth().form("username","password"). 
        when().get(loginUrl).getHeader("User-Token"); 
    System.out.println(userToken); 
} 

だから、私はすべてで)(多分私は認証を必要としないことを考えた - 私は、セッションを必要としないので、データをエンドポイント自体を呼び出すことは十分なはずです。私は、データがバックエンドにするために、フロントエンドから渡されたかチェックされ、これをしなかった:

Form Data: username=something&password=something

@Before 
public void LogInUser(){ 
    String loginUrl = "http://localhost:8080/login"; 
    userToken = 
      given().parameter("username=oliwka&password=jakies") 
        .when().get(loginUrl).getHeader("User-Token"); 
    System.out.println(userToken); 
} 

そして、それは渡している間、はUserTokenはnullです。それはメソッド変数ではなくクラス変数として宣言されており、それはStringです。

ユーザーのトークンを取得して、トークンが必要なエンドポイントをテストするにはどうすればよいですか。

答えて

0

以下の手順でアクセストークンを取得できます。

ステップ1: json文字列を受け入れ、データを解析してアクセストークンを返すメソッドを作成します。以下はその方法です。あなたは、好きなjsonパーサライブラリを使うことができます。

public String getAccessToken(String jsonStr) { 
     JSONParser parser = new JSONParser(); 
     Object obj = null; 
     try { 
      obj = parser.parse(jsonStr); 
     } catch (ParseException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     JSONObject jsonObject = (JSONObject) obj; 
     String accessToken = (String) jsonObject.get("access_token"); 
     System.out.println("access_token : " + accessToken); 
     return accessToken; 

    } 

ステップ2:今、あなたが希望するアクセストークンを取得することができます場合は私に知らせてくださいのような

String loginUrl = "http://localhost:8080/login"; 
    Response res = null; 
    String returnValue = ""; 
    response = given().param("username", "yourUserName") 
       .param("password", "yourpassword") 
       .param("client_id", "If Any otherwise skip it") 
       .param("grant_type", "If Any otherwise skip it") 
       .param("clear_all", "true") 
       .post(loginUrl); 
       returnValue = response.body().asString(); 

    String accessToken = getAccessToken(returnValue); 

の下にユーザー名とパスワードを使ってログインAPIを呼び出します。