我需要测试一个 PHP Web 应用程序。应用程序是一个过程代码块(在 index.php 中),由 session 变量控制。由控制流决定,其他文件也包含在 php 程序 block 中(xy.inc)并修改 session 变量。例如:
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 和 session 管理方面经验不足(而且我正在使用 OOP 进行编码),有人可以帮我吗?
旁注:不涉及框架、mvc 或任何其他内容
最佳答案
我为此找到了一个相对简单但非常肮脏的 hack。
测试时我不是直接调用'/'(index.php),而是一个测试页面。 测试页面根据需要设置我的变量(可能需要一种“安全”的方式在这里注入(inject)我的测试变量......)。
# defined in /test.php - otherwise change path in include index
<?php
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("my_session_name");
session_start();
$_SESSION['TESTME'] = 'bla';
session_write_close();
session_destroy();
include 'index.php';
?>
在 index.php 中我可以看到 $_SESSION['TESTME'] == 'bla'。
我想以牙还牙......
关于PHP 在测试中修改 $_SESSION 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33119781/