PHP 在测试中修改 $_SESSION 值

标签 php session testing legacy-code

我需要测试一个 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/

相关文章:

python - setuptools:测试我的额外功能

git - 如果在用户计算机上 check out ,则监视代码 repo

php - 用下划线替换 URL 中的空格

php - 使用 PHP 动态添加到 .htaccess 文件?

php - 重新索引后限制 Magento 在 URL 末尾递增数字

node.js - Express.js 和 connect-mongo session 持续时间

php - 使用 php 上传图像时以及上传图像后如何解决 iOS 图像方向问题

javascript - 像php session,js/jquery session有没有?

java - session 过期时重定向到登录页面时出现空指针异常?

php - PHP 隔离测试环境