我怎样才能从一个套件中只运行一个测试?

Posted

技术标签:

【中文标题】我怎样才能从一个套件中只运行一个测试?【英文标题】:How can I run only one test from a suite? 【发布时间】:2014-09-24 07:17:27 【问题描述】:

我在下面有这个测试类,我只想从中运行一个测试,例如“aboutPage”。有什么想法吗?

这就是我只运行这个文件的方式:

codecept run tests/acceptance/VisitorCest.php

但现在我只想从文件中运行一项测试。

<?php
use \AcceptanceTester;

class VisitorCest

    public function _before()
    public function _after()

    public function aboutPage(AcceptanceTester $I)
    
        $I->wantTo('check about page');
    

    public function contactPage(AcceptanceTester $I)
     
        $I->wantTo('check contact page');
    

【问题讨论】:

【参考方案1】:

您只需附加一个冒号和函数名称,如下所示:

codecept run tests/acceptance/VisitorCest.php:myTestName

或更短的版本:

codecept run acceptance VisitorCest:myTestName

(注意套件名和文件名之间的空格。)

【讨论】:

只是一个注释。如果它是 unit 测试(从 PHPUnit_Framework_TestCase 扩展),则无法运行单个测试,因为 codeception 没有 filter选项(不同于 phpunit codecept run unit/TestThatExtendsPHPUnit.php:testMethod 对我来说很好。 你可以省略.php文件扩展名,像这样:codecept run -- -c frontend unit models/ContactFormTest:testSendEmail myTestName 也不必是完整的测试名称。它将运行任何部分匹配的测试 我如何也可以使用依赖项运行?【参考方案2】:

这是有效的:

codecept 运行 suite-name file-name.php:function-name

注意套件名和文件名之间的空格

【讨论】:

从技术上讲,您有更通用的解决方案。但事实证明,大多数人更喜欢看例子。 不需要.php 部分。 @tivnet 这仅适用于 Codeception 2.x【参考方案3】:

这就是我所做的。 php codecept.phar run unit UnitNameTest.php

【讨论】:

与提出的问题无关【参考方案4】:

除了@Tzook Bar Noy 提供的答案,您还可以在有多个以相同名称开头的测试时添加尾随$。考虑以下示例:

<?php

use \AcceptanceTester;

class VisitorCest

    public function aboutPage(AcceptanceTester $I)
    
    

    public function aboutPageOption(AcceptanceTester $I)
     
    

以下命令将执行这两个测试:

codecept run tests/acceptance/VisitorCest.php:aboutPage

这将只执行第一个:

codecept run tests/acceptance/VisitorCest.php:aboutPage$

【讨论】:

【参考方案5】:

除了前面的答案之外,您还可以通过按给定名称分组来运行一种或多种方法:

/**
 * @group test-aboutPage
 */
public function aboutPage(AcceptanceTester $I)

    $I->wantTo('check about page');

使用选项-g 和组名:

$ codecept run acceptance VisitorCest -g test-aboutPage

【讨论】:

我更喜欢稍微不同的方式,因为您可以在这种情况下使用 tab 并轻松导航到所需的 Cest,`codecept run tests/acceptance/VisitorCest -group test-aboutPage`【参考方案6】:

如果您使用的是PHP Yii2 Framework,那么您只能使用此命令运行一个测试。

确保您在测试目录中。

cd /codeception/frontend

codecept run -vv acceptance HomeCept

【讨论】:

这与 Yii2 无关,而是因为 Cept 仅包含一个测试,但 Cest 可以包含多个测试 - 请参阅最初的问题【参考方案7】:

试试看 phpunit --filter TestMethodName FilePath

【讨论】:

【参考方案8】:

执行此操作的更合适的方法是将组注释分配给相关测试用例。由于以下原因,这是优选的; 如果您有两个测试用例,例如在同一类 VisitorCest;

public function aboutPage
public function aboutPage2

执行

codecept run tests/acceptance/VisitorCest.php:aboutPage

将同时运行 VisitorCest:aboutPage 和 VisitorCest:aboutPage2 测试用例。

将组分配给这样的测试用例

/**
 * @group aaa
 */
public function aboutPage(AcceptanceTester $I)


并像这样执行这个特定的测试用例

codecept run -g aaa

【讨论】:

以上是关于我怎样才能从一个套件中只运行一个测试?的主要内容,如果未能解决你的问题,请参考以下文章

开玩笑:测试套件无法运行(Expo SDK 需要 Expo 才能运行)

如何使用 Robot Framework 从测试套件运行特定的测试用例

每个 Spek 套件运行一次数据库

如何在反应中只运行一次功能

Selenium GRID:并行运行多个 Robot Framework 测试套件

如何从包含的模块配置中运行特定套件的测试?