使用Behat的最佳做法

问题描述 投票:1回答:3

我想测试添加事件的路线。 但是问题是:这个方法在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 ........
|..............

对于许多争论,本示例将使该功能难以理解。 用许多参数测试此路线的最佳实践是什么。 请帮助我,在此先感谢!

php behat mink gherkin
3个回答
2
投票

具有大量步骤的功能测试是反模式。 在每个步骤中,以代码编写,然后执行更多操作,然后根据需要重新使用这些步骤。 我有一些功能上下文,它们可以引入一些特质,这些特质可以一起工作以完成我需要的工作。

有时,代码可以是网络步骤的列表(我有一个注册函数,它是visit('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>"

0
投票

Behat是用于验收测试的,您正在尝试的称为集成测试。

如果要发布这些帖子变量,只需访问(URL),可以选择填写表格,然后提交。 这正是用户必须填写表格的方式。 如果对您来说太多了,也许对您的用户来说太多了。

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

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

当它只是一个API端点时,我将使用集成测试来对控制器进行测试。


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 ........
|..............

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

© www.soinside.com 2019 - 2024. All rights reserved.