我正在用Test'em和Mocha(在node.js上运行)做一个测试台,以测试一个PHP网站。
我想要的是请求一些URL(例如http://www.my-website/test.php),并获得http状态码以及返回的内容。
我用node.js Request模块来做。
问题是:
我需要通过身份验证才能访问此页面,否则我将重定向到登录页面。
那么,是否存在一种方法可以通过Node.js登录我的应用程序,并保持会话打开,以便能够在我想要的任何页面上进行链测试?
如果可能的话,我想在登录请求上获得PHPSESSID。你认为这是一个好方向吗?
任何帮助都将非常感激。
谢谢你,祝你有美好的一天。
迈克尔如果您在选项中设置jar: true
或使用您自己的自定义cookie罐,那么request
将记住服务器设置的cookie,以便您可以在请求之间保持会话
mscdex感谢您的回答!但不幸的是,它没有为我工作:/
hyubs thanks to you too.
最后我继续使用Mocha + Request。
基本上我所做的是:
-
通过POST请求连接到登录页面,并获得在响应头中返回的PHPSESSID 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();
});
}
});
});
这对我来说很有魅力。
告诉我,如果你看到什么错误或可以优化:)
迈克尔不要使用请求模块,而是使用像PhantomJS和zombie.js这样的无头浏览器。您甚至可以用这些来模拟用户交互。