2015-10-14 37 views
1

我需要測試一個PHP Web應用程序。應用程序是一個程序代碼塊(在index.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和會話管理(我在面向對象的編碼)一點經驗,任何人都可以幫我嗎?

側面說明:沒有框架,MVC或其他任何參與

+0

你想改變中旬執行的會話數據或將裝上的session_start一組不同的()就足夠了?在第一種情況下:真的嗎?爲什麼?在後一種情況下:也許編寫和設置另一個[會話處理程序](http://docs.php.net/session_handler)將會起作用。 – VolkerK

+0

@VolkerK: 我需要在讀取頁面後讀取和寫入會話值(所以PHP已經執行),如 1.讀取會話並修改var x 2.載入頁面'/',它使用var x並設置一些其他的變數 3.讀會話並修改變量 4.加載頁面'/'(...) 我必須知道頁面加載(會話狀態)之間的當前狀態 您能否給我關於如何將自定義SessionHandler集成到index.php中的最簡單示例?它只是在類中調用session_set_save_handler(),還是必須修改index.php才能真正使用類? – mrong

回答

0

我發現了一個比較簡單的,非常骯髒的黑客這一點。

測試時,我沒有直接調用'/'(index.php),而是測試頁面。 測試頁面根據需要設置我的變量(可能需要「安全」的方式在這裏注入我的測試變量..)。

# 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'。

以火攻火我想..