【发布时间】:2015-10-14 07:59:28
【问题描述】:
我需要测试一个 PHP Web 应用程序。应用程序是一段程序代码(在 index.php 中),由会话变量控制。由控制流决定,其他文件也包含在 php 程序块中(xy.inc)并修改会话变量。例如:
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Content-Type: text/html; charset=utf-8");
session_name("some_name");
session_start();
$_SESSION['some_key'] = 'some_value';
if($_SESSION['key1'] == 1){
//include some file that in the end sets $_SESSION['key1'] = 0
}
else if($_SESSION['key2'] == 1){
//Do something
$_SESSION['key2'] = 0;
$_SESSION['keyX'] = 'someOtherControlValue';
}
//....Lots of code
$SESSION['whatever'] = 'justAnotherValue';
//..more code, more $_SESSION checks and so on
重构不是选项(目前?),所以我只是想至少运行一些基本测试,而不干扰编码器的“编程风格”。
有没有办法在验收测试中访问(和修改)$_SESSION 属性? 我想使用Codeception 进行测试(但我愿意接受替代方案)。
我想实现类似(伪)
// setup test db etc.
get('/');
assert(title == 'the title');
// change some control values
$_SESSION['myDatabase'] = 'myTestdb';
$_SESSION['SomeKeyForFuctionIWantTest'] = 'myValue';
get('/');
assert($_SESSION['SomeKeyForFuctionIWantTest'] == 'myValue');
assert(getSomeElementCreatedByFunction() != null);
assert(somethingIsInTheDatabase);
我在 php 和会话管理方面几乎没有经验(我正在使用 OOP 进行编码),有人可以帮我吗?
旁注:不涉及框架、mvc 或其他任何东西
【问题讨论】:
-
您想在执行过程中更改会话数据还是在 session_start() 上加载不同的数据集就足够了?在第一种情况下:真的吗?为什么?在后一种情况下:也许编写和设置另一个 session handler 就可以了。
-
@VolkerK:我需要在访问页面后读取和写入会话值(因此 php 已经执行),例如 1. 读取会话并修改 var x 2. 加载页面'/',它使用 var x 并设置其他一些 vars 3. 读取会话并修改 var y 4. 加载页面'/'(...)我必须知道页面加载之间的当前状态(会话状态)你能给我关于如何在 index.php 中集成自定义 SessionHandler 的最小示例?它只是在类中调用 session_set_save_handler() 还是我必须修改 index.php 才能实际使用该类?
标签: php session testing legacy-code