是的,這是可能做到這一點。 通常情況下,你會嘲笑這一點,但它可能做活API測試。 您正在使用PHP,所以選擇的工具是phpUnit。
如果您使用phpUnit,我會建議擴展PHPUnit_Framework_TestCase或PHPUnit_Extensions_Database_TestCase,並使用beginLongTransaction()和rollbackLongTransaction()和api()方法構建自定義類。
讓我們假設類似request($ type,$ url,$ data),所以你不必經常輸入「new Curl」。 $this->request('GET, '/somewhere', $data);
還有setUp()和tearDown()用於在TestCase之前和之後執行某些操作。
注意超時&相應地設置PHP執行時間,因爲一些測試可能會遇到連接超時,這是由於依賴於外部API。 您也可以將您的測試分組並分開運行,以避免超時。
class MyApiTest1 extends MyCustomAPI_PHPUnit_Framework_TestCase
{
// connection per test
public function testSomething()
{
$this->useConnection($connectionName);
$result = $this->request('GET', '/user/' . $this->getDb()->getUsername());
$this->assertEquals(200, $result->getResponse()->getStatusCode());
$this->closeConnection($connectionName);
}
}
class MyApiTest2 extends MyCustomAPI_PHPUnit_Framework_TestCase
{
public function setUp()
{
$this->useConnection($connectionName);
}
// connection per class
public function testSomething()
{
$result = $this->request('GET', '/test');
$this->assertEquals(200, $result->getResponse()->getStatusCode());
}
public function tearDown()
{
$this->closeConnection($connectionName);
}
}
基類與多個數據庫連接和一個請求的方法工作:
class MyCustomAPI_PHPUnit_Framework_TestCase extends PHPUnit_Framework_TestCase
{
static public $dbConnections = array();
function setupConnections()
{
// foreach array(databaseName => credentials)
{
// create connection object
// store connection object into array
self::$dbConnections[$databaseName] = $connection;
}
}
function getConnection($connectionName)
{
return self::$dbConnections[$connectionName];
}
function rollback($connectionName)
{
$con = $this->getConnection($connectionName);
// rollback hard
$con->deleteDatabase();
$con->insertDatabaseSchema();
$con->insertDatabaseData();
// = database @fresh start
}
function beginTransaction($connectionName)
{
$con = $this->getConnection($connectionName);
// do stuff on begin
return $con;
}
function request($type, $url, $data)
{
// do curl request
return $cURLdata;
}
}
那麼,關於啓用持續連接然後串行化在第一請求(在所述第一連接中的報頭或東西指定api調用)並覆蓋銷燬,以便連接不會在腳本結束時關閉,並且每個中間腳本都會重新使用連接,直到最後一個將會回滾連接爲止。僅供參考:在測試過程中沒有其他人會使用該網站 – matthewdaniel