我怎样才能从一个套件中只运行一个测试?
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 从测试套件运行特定的测试用例