3

PHP Web サイトをテストするために、Test'em と Mocha (node.js で実行される) を使用してテストベンチを作成しています。

私が望むのは、いくつかの URL (例: http://www.my-website/test.php ) を要求し、http ステータス コードと返されるコンテンツを取得することです。

私は node.js Requestモジュールでそれをやっています。

問題は:

このページにアクセスするには認証が必要です。認証されていない場合、ログイン ページにリダイレクトされます。

では、Node.js を介してアプリケーションにログインし、セッションを開いたままにして、必要なページでテストをチェーンできるようにする方法はありますか?

可能であれば、ログイン要求で PHPSESSID を取得することを考えていました。良い方向だと思いますか?

どんな助けでも大歓迎です。

ありがとう、よい一日を :)

マイケル

4

3 に答える 3

3

mscdex ご回答ありがとうございます。しかし、残念ながら私にはうまくいきませんでした:/

hyubsもありがとう。

最後に、Mocha + Request を使い続けました。

基本的に私がしたことは次のとおりです。

  1. POST 要求を介してログイン ページに接続し、応答ヘッダーで返される PHPSESSID Cookie を取得します。

  2. ログを記録する必要がある URL を対象とする次のリクエストのヘッダーで Cookie を渡します。

これが私のコードです:

var params = {
    email: 'your_username',
    password: 'your_password'
};
var paramsString = JSON.stringify(params);

// Login to the application
request.post('http://localhost/biings/front-end/rest/auth',
{ 
    headers: {
        "Content-Type" : "application/json",
        'Content-Length' : paramsString.length
    },
    body: paramsString,
},function (error, response, body) {
    // get the PHPSESSID (the last one) that is returned in the header. Sometimes more than one is returned
    var sessionCookie = response.headers['set-cookie'][response.headers['set-cookie'].length - 1];
    sessionCookie = sessionCookie.split(';');
    sessionCookie = sessionCookie[0];
    // Write it in a file (this is a quick trick to access it globally)
    // e.g.: PHPSESSID=ao9a1j0timv9nmuj2ntt363d92 (write it simply as a string)
    fs.writeFile('sessionCookie.txt', sessionCookie, function (err) 
    {
        if(err)
        {
            return console.log(err);
        } 
    });
});

// don't care about this it() function (it's for Mocha)
it("test 1", function(done)
{
    // Get the cookie
    fs.readFile('sessionCookie.txt','utf8', function (err, data) 
    {
        if(err)
        {
             throw err; 
        }
        else
        {
         // Launch a request that includes the cookie in the header
         request.get('http://localhost/biings/front-end/rest/group', 
         {
              headers: {"Cookie" : data},
         }, function (error, response, body) {
             // Check your request reaches the right page
                 expect(response.statusCode).equals(200);
             console.log(body);
                 done();
         });
        }
    }); 
});

それは私にとって魅力のように機能します。

何か問題があるか、最適化できるか教えてください:)

マイケル

于 2014-05-27T15:32:44.407 に答える