使用Behat的最佳实践

时间:2015-02-13 09:57:08

标签: php behat mink gherkin

我想测试添加事件的路线。但问题是:这个方法在POST中发送了很多关于:50的参数。我试过了:

Scenario Outline: Check Api Simple Test
Given  I use http method "POST"
And    I have param "sEventType" with value "<sEventType>"
And    I have param "aFilters[]" with value "<aFilters[]>"
And    I have param "nCompany" with value "<nCompany>"
..................................................
And    I call url "<path>"
And    I should to have "code" with value "<code>"
And    I should to have "error" with value "<error>"
Examples : 
|path ........
|..............

对于很多参数,这个例子会使这个特征难以辨认。使用多个参数测试此路由的最佳做法是什么。请帮助我,并提前致谢!

3 个答案:

答案 0 :(得分:2)

具有很长步骤列表的功能测试是一种反模式。在每个步骤中执行更多操作,使用代码编写,然后根据需要重新使用这些步骤。我有一些功能上下文,只需引入一些可以协同工作以完成我需要的特征。

有时,代码可以是web-steps的列表(我有一个注册函数是访问('url')fillFields(),pressButton()),有时它们会读或写到数据库。

Scenario Outline: Check Api Simple Test
Given  I prepare an API with appropriate parameters
When   I call url "<path>"
Then   I should to have "code" with value "<code>"
 And   I should to have "error" with value "<error>"

答案 1 :(得分:0)

对于验收测试而言,您正在尝试的内容称为集成测试。

如果您希望发布这些帖子,请访问(网址),可选择填写表格然后提交。这正是您的用户填写表单的方式。如果对你来说太过分了,也许这对你的用户来说太过分了。

When I fill in "form_element_name" with "value"
And I press "submit"
Then I should see "resultz"

如果这确实是您所需要的,请创建一个“发布大量变量”的步骤定义,并在上下文文件中实现详细信息。

当它只是一个api-endpoint时,我会使用集成测试对控制器进行测试。

答案 2 :(得分:0)

或者,你可以使用TableNodes(我知道我在聚会上有点迟了),但实际上,如果你使用类似这样的代码:

    /**
     * @Then /^I have the following param(?:|eter)s with values:$/
     */
    public
    function iHaveTheFollowingParamsWithValues(TableNode $table)
    {
        foreach ($table->getRowsHash() as $param => $value) {
            $this->iHaveParamWithValue($param, $value);
        }
    }

    /**
     * @Then /^I should have the following codes with values:$/
     */
    public
    function iShouldHaveTheFollowingCodesWithValues(TableNode $table)
    {
        foreach ($table->getRowsHash() as $code => $value) {
            $this->iShouldHaveCodeWithValue($code, $value);
        }
    }

它将调用您声明的函数,并允许您在表格中写入数据,就像场景大纲的示例表一样。

如:

Scenario Outline: Check Api Simple Test
Given  I use http method "POST"

And    I have the following params with values:
       |sEventType|<sEventType>|
       |aFilters[]|<aFilters[]>|
       |nCompany  |<nCompany>  |
..................................................
And    I call url "<path>"

And    I should have the following codes with values:
       |code |<code> |
       |error|<error>|

Examples : 
|path ........
|..............

这应该有助于提高可读性,并加快测试编写和测试执行的速度。