Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Testing
Code

使用Yii2编程:使用Codeception进行自动测试

by
Difficulty:IntermediateLength:LongLanguages:
This post is part of a series called How to Program With Yii2.
Programming With Yii2: Security
How to Program With Yii2: ActiveRecord

Chinese (Simplified) (中文(简体)) translation by Soleil (you can also view the original English article)

Final product image
What You'll Be Creating

如果你问,“什么是Yii?” 查看我之前的教程,Yii框架简介该教程回顾了Yii的优点,并概述了2014年10月发布的Yii 2.0中的新功能。

在这个使用Yii2编程系列中,我指导读者使用Yii2 Framework for PHP。 在本教程中,我将使用与Yii2开发框架集成的Codeception探索自动化测试。

不可否认,我用代码编写测试的经验很少。 我经常参与资源有限的个人或小型项目。 在微软工作期间,我们有不同的测试团队来完成这项工作。 但坦率地说,这也很典型,对吧? 程序员喜欢编码,他们不写测试 - 至少老学校程序员没有。

Codeception是一个创新的库,其目的是使编写测试变得有趣和轻松。 而且,我会说他们已经取得了合理的成功。 当我把脚趾浸入“Lake Codeception”的水中时,它大多简单有趣。 但是,当我开始深入研究时,我遇到了Yii的配置问题以及本系列中使用的特定模块。 肯定存在挑战。 总的来说,我印象深刻,看到了更多学习的好处。

简而言之,Codeception及其与Yii的集成使我想要编写更多测试,这对我来说是第一次。 我怀疑你会有类似的经历。

在我们开始之前提醒一下,我确实参与了下面的评论主题。 如果您有其他想法或想为未来的教程建议主题,我会特别感兴趣。 如果您有问题或主题建议,请在下面发布。 您也可以直接通过Twitter @reifman与我联系。

入门

安装Codeception

为了指导我,我使用了Yii的测试环境设置文档。 我从全局安装代码开始,所以我可以在任何项目中使用它。

您还需要要求codeception/specify

codeception/verify

接下来,使用全局编写器目录为codecept设置别名很有帮助:

这设置了别名:

Yii还要求你安装Faker,它会为你的应用程序生成虚假的测试数据:

使用您的应用程序设置代码

Codecept bootstrap初始化Yii应用程序的代码,创建各种配置文件,用于构建和运行针对您的应用程序的测试。 我们在本教程中使用本系列的Hello应用程序。 请参阅此页面上的GitHub链接以获取代码。

出于某种原因,我最终在hello / tests中找到了重复的测试目录; 只需删除hello/tests/functional,hello/tests/acceptance,hello/tests/unit就可以了。 所有测试都在hello/tests/codeception/ *中。

不同种类的测试

Codeception主要关注三种测试:

  1. 单元测试验证特定单元是否正常工作,例如对所有模型方法的详尽测试。
  2. 功能测试验证常见的应用程序方案,就好像用户正在执行它们,但使用Web浏览器模拟。
  3. 验收测试与功能测试相同,但实际上是通过Web浏览器运行测试。

它为您的测试代码支持三种不同的测试格式

  1. Cept:这是最简单的单一场景测试文件
  2. Cest:一种面向对象的格式,用于在单个文件中运行多个测试
  3. 测试:在PHP测试框架PHPUnit上编写的测试

让我们从使用cept格式验收测试示例开始:

验收测试

我们首先使用Codeception的Welcome测试示例。

这会生成tests/acceptance/WelcomeCept.php,我们将在下面编辑。

由于验收测试需要浏览器,我们必须在项目中编辑/tests/acceptance.suite.yml以提供我们的开发URL,http:// localhost:8888/hello:

现在,我们已准备好在tests/acceptance/WelcomeCept.php中修改初始测试。 我正在编写一个加载首页的测试,以确保它按预期工作。

代码测试具有actor的概念,在本例中,$I=new AcceptanceTester()

以下是它如何描述Codeception文档中的actor

我们有一个UnitTester,它执行函数并测试代码。 我们还有一个FunctionalTester,一个合格的测试人员,他对整个应用程序进行测试,并了解其内部知识。 还有一个AcceptanceTester,一个通过我们提供的界面与我们的应用程序一起工作的用户。

您可以使用代码评论您的测试,例如 $I->wantTo('perform a certain test')  或 'ensure that the frontpage works'.

在我的测试中,我想看到$I->see 'Congratulations!'的文字。 和'Yii-powered'

这是当前的Hello主页:

Programming with Yii - The Hello Home Page

接下来,让我们运行测试,只需codecept run

如您所见,我们的测试通过了,验证此功能的代码非常易读且简单。

关于Yii默认测试的注释

为了更进一步,我开始使用Yii的默认测试。 此时,我遇到了许多配置问题 - 主要是由于我在本系列中使用了自定义yii2-user模块。 其他人则是由于Yii的小错误,其团队在GitHub上报告后迅速做出反应并修复; 在某些情况下,问题已在yii2-basic树的后续版本中得到修复

另外,因为我更新了本系列的yii2-basic树,所以我不得不对一些默认测试做一些小改动。

以下是我做了一些小调整后运行默认验收测试的输出示例:

功能测试

为了使功能测试起作用,我需要运行Yii内置服务器的实例。 在Yii的Alex Markov在我们的GitHub交换中提到它之前,我还不知道这个组件。

我对/tests/codeception /functional中的功能测试做了一些小改动,主要是为了查找我特定的更新文本字符串,即“无效的登录名或密码”代替Yii的默认值。 这是LoginCept.php的一个看看:

基本上,代码访问LoginForm模型并使用Yii serve测试其各种方法。

这是它正在利用的/tests/codeception_pages/LoginPage.php测试代码(我还必须对我们对该系列所做的更改进行修改):

您可以看到我们正在编写actor以fillFields 并click 按钮以获取更新的表单字段。

在解决我与Yii的Codeception集成问题时,我发现以详细模式运行这些测试很有帮助:

以下是登录功能测试的详细输出 - 在MacOS终端中,PASSEDFAILED的颜色编码为红色或粉红色,并且为了可见性而反转:

总的来说,有一点需要学习如何开始使用Codeception并正确编写测试代码。 但结果令人印象深刻,乐于助人。

单元测试

基本上,单元测试是对我们的基础设施和模型的程序化测试。 理想情况下,我们会为模型的每种方法和使用变化编写测试。

不幸的是,我无法让单元测试在我们的树中工作,因为要发布的小Yii错误或者Codeception和yii2-user之间的配置问题我们已经集成在如何使用Yii2编程:集成用户注册

我将在我们的Startup系列中再次讨论单元测试,该系列不使用yii2-user,而是使用Yii Advanced树的内置用户集成。

让我们看一下Yii2-app-basic树中的几个例子。

测试联系表格电子邮件

hello/tests/codeception/unit/models/ContactFormTest.php测试通过程序化使用模型发送电子邮件:

由于Yii中尚未更新的小错误(或者至少我找不到更新的代码),我无法成功通过此测试。 我删除了Yii代码库,命名带有日期戳的出站邮件,上面的代码正在查找固定文件名。 因此,它总是失败。 尽管如此,看看程序化测试如何使用模型生成文件然后查找该文件并验证其内容以验证代码是否正常工作仍然很有用。

测试登录

我们来看看hello/tests/codeception/unit/models/LoginFormTest.php。 同样,在编写本教程时,我对yii2-user的使用使其过于难以集成; 但是,我们可以看一下单元测试用户模型函数的概念方法。

这是testLoginCorrect(),它查看登录是否使用正确的密码成功:

它使用LoginForm模型以编程方式登录用户,然后以编程方式查看Yii的当前用户现在是否不再是来宾。

下一步是什么?

我希望你很喜欢学习Codeception及其与Yii的集成,尽管遇到了一些障碍。 今天yii2-basic的默认安装应该会更好。

如果您想了解更多关于决定测试时间和测试内容以及原因的信息,我建议您阅读Yii的测试概述。 当然还有更多关于Codeception和编写更完整测试的知识。

观看我们在Yii2系列编程中即将推出的教程,我们将继续深入研究框架的不同方面。 如果您想知道下一个Yii2教程何时到达,请在Twitter上关注我@reifman查看我的教师页面

您可能还想查看我们使用PHP系列构建您的初创公司,该系列在构建实际应用程序时使用Yii2的高级模板。 实际上,您今天可以试用启动应用程序Meeting Planner

相关链接

关注我们的公众号
Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.