2016-12-02 124 views
0

我們如何在測試中使用字符串替換和變量?我懷疑這是常見的,我根本不知道在哪裏看。實施例試驗:在代碼測試中使用變量

$I = new ApiTester($scenario); 
$I->wantTo('Get Stuff'); 
$I->amHttpAuthenticated('myuser', 'mypass'); 
$I->haveHttpHeader('Content-Type', 'application/json'); 
$I->haveHttpHeader('Custom-Header', 'friendlycorp'); 
$I->sendGet('/a/path/that/contains/variables'); 
$I->seeResponseCodeIs(\Codeception\Util\HttpCode::OK); 

每個REST API位置被測試使用不同的值,並且還取決於服務的URL變化被測試。所以,也許是這樣的:

$I->amHttpAuthenticated('{USERNAME}', '{PASSWORD}'); 
$I->sendGet('/a/path/{SERVICE_ID}/and/{SOMETHING_ELSE}/and/such'); 
$I->haveHttpHeader('Custom-Header', '{SERVICE_ID}'); 

我希望這個配置文件可以再定義{} SERVICE_ID並取決於REST API服務的位置,我的測試,其他變量{}功能的喜歡。例如:

FriendlyCorp: 
    SERVICE_ID: friendlycorp 
    SOMETHING_ELSE: foo 
    USERNAME: myuser 
    PASSWORD: mypass 
OpenExample: 
    SERVICE_ID: openexample 
    SOMETHING_ELSE: bar 
    USERNAME: myuser2 
    PASSWORD: mypass2 

然後執行codeception時,我會選擇在其上運行FriendlyCorp或OpenExample測試,並說值將測試中使用。

回答

5

使用Cest格式Examples

/** 
    * @example { "service_id": "friendlycorp", "something_else": "foo", "username": "myuser", "password": "mypass" } 
    * @example { "service_id": "openexample", "something_else": "bar", "username": "myuser2", "password": "mypass2" } 
    */ 
    public function services(ApiTester $I, \Codeception\Example $example) 
    { 
    $I->amHttpAuthenticated($example['username'], $example['username']); 
    $I->haveHttpHeader('Content-Type', 'application/json'); 
    $I->haveHttpHeader('Custom-Header', $example['service_id']); 
    $I->sendGet("https://stackoverflow.com/a/path/{$example['service_id']}/and/{$example['something_else']}/and/such"); 
    $I->seeResponseCodeIs(\Codeception\Util\HttpCode::OK); 
    }