2018年10月2日 星期二

Java Develop Coder 開始 PHP Test Coder 的生活_2018/10/2 Day23

完成了一次的遊戲操作,但是需求是一整天一直玩,接下來處理這部分。

👉PHP 語法
為了重複做一件事情(玩遊戲),使用 while 迴圈實作。

...
while ($counts > 0) {
// 用 selenium 的 action 操控 canvas
$I->executeInSelenium(function (\Facebook\WebDriver\Remote\RemoteWebDriver $webDriver) {
$element = $webDriver->findElement(\Facebook\WebDriver\WebDriverBy::xpath('//div[@id=\'game\']/canvas'));
$action = $webDriver->action();
$action->moveByOffset(Parameters::$decreaseBets['x_offset'],    Parameters::$decreaseBets['y_offset']);
$action->moveToElement($element, Parameters::$gameStart['x_offset'], Parameters::$gameStart['y_offset'])->doubleClick()->perform();
});
// 等候遊戲玩完
$I->wait(Parameters::$waitSeconds);
$counts--;
}
...

等到 counts 減完以後,就會跳出迴圈。

👉Selenium 語法
上面的程式在執行時,第2次(設定跑3次)要點擊時,都會產生沒有反應的狀況,所以在點擊前用moveByOffset先把滑鼠移到其他地方,再回到遊戲開始的按鈕,如此就能正常運作。

👉Codeception 語法
前篇把跟測試無關的輔助方法放在 XxxCest 的類別裡,會讓 Codeception 把它也當成是要執行的測試程式,而造成錯誤,所以就把輔助的動作移到 StepObject 裡,需要使用再呼叫就不會發生誤判的狀況。

用命令列建立 StepObject
php vendor/bin/codecept generate:stepobject acceptance Xxx

然後就會有互動步驟建立 function
php vendor/bin/codecept generate:stepobject acceptance Xxx
Add action to StepObject class (ENTER to exit): stepsOfXxx
Add action to StepObject class (ENTER to exit):
StepObject was created in /tests/acceptance/_support/Step/Acceptance/Xxx.php

接下來到剛剛生成的類別裡寫完方法後,就可以在測試程式裡叫用。
public function playGame(\Step\Acceptance\Xxx $I)
{
$I->waitForElement('canvas', 15);
$I->wait(Parameters::$waitSeconds);
$I->decreaseBets(Parameters::$pressDecreaseButtonTimes);
$I->playGameByGivenTimes(Parameters::$executeTimes);
}

👉Docker
想要同時執行多個相同的測試案例,Codeception 文件提到了 Parallel Execution ,裡面用 Docker 和 Robo 來實現。
先安裝好 Docker Docker-Compose,再依照 Codeception 文件說的把 image 拉回來。
今天還沒辦法從 Docker 執行測試案例。

沒有留言:

張貼留言