我正在使用Behat测试来测试第三方网络服务以获取结算礼品卡。每个测试都会向Web服务发送一个带有金额的计费请求,然后返回剩余的余额。在我的功能中是否有一种方法可以将预期的响应变为变量?例如:
我一直在使用"例子"创建一个值表以传入测试和预期结果的方法,但每次执行测试时我都要更新整个响应值表。我更愿意只需更新表中的第一个值并计算其余值。这是可能的,如果是的话,怎么样?
以下是我希望完成的一个例子:
| amount | result |
| 5 | 100 |
| 10 | previous result - current amount |
答案 0 :(得分:0)
从问题中你想要什么不是很清楚。如果这是你想要在你的功能中断言的固定值,那么这样做的唯一方法是从你的应用程序设置初始余额。通过' @ beforeScenario' hook可能是最简单的解决方案(因为你不能每次都在场景大纲中这样做)。
或者,如果您无法修改套件中的余额,唯一可行的选择是按以下方式执行。这可能看起来不像对实际价值断言那样具体,但从技术上讲,这是同样的事情。 Gherkin语言(如果你可以称之为语言)并不允许任何操作和场景轮廓可能是它最有活力的部分。
<强>上下文强>
protected $balance;
/**
* @Give /^I know the balance$/
*/
public function updateBalance() {
// API call to get the balance…
$this->balance = API::getBalance();
}
/**
* @When /^I bill the card for (\d+) dollars$/
*/
public function billCard($amount) {
// API call to bill the card…
API::billCard($amount);
}
/**
* @Then /^the balance should reduce by (\d+) dollars$/
*/
public function assertBalance($amount) {
// API call to verify the balance was reduced correctly, don't forget to cast if necessary.
if ($this->balance - $amount === ($currentBalance = (int) API::getBalance())) {
$this->balance = $currentBalance;
} else {
throw new Exception();
}
}
<强>功能强>
Scenario Outline: …
Given I know the balance
When I bill the card for <amount> dollars
Then the balance should reduce by <amount> dollars
Examples:
| amount |
| 5 |
| 10 |