PHP自动化验收测试快速入门
作者:网络转载 发布时间:[ 2016/6/3 14:14:13 ] 推荐标签:自动化测试 验收测试
欢迎来到Behat,Behat是行为驱动开发(BDD)的工具。在BDD中,你可以用对人友好的故事来描述程序的行为,也可以使用这些故事来做自动化测试。没错,这听起来是不是很酷?
例如,想象下你要开发ls这个UNIX命令;客户可能会这么跟你说:
功能: ls
为了能看到的目录结构
作为一个UNIX用户
我需要能够列出当前目录的内容
场景: 列出目录中的2个文件
假如我在"test"目录中
并且这个目录有"foo"文件
同时这个目录有"bar"文件
当我运行"ls"后
那么我能看到
"""
bar
foo
"""
在这个教程中,我们将向你演示Behat是如何把这个简单的故事作为测试来验证ls命令是像描述那样工作的。
Behat可以被用来测试任何东西,包括使用Mink类库来测试与Web有关的行为。
如果你想学习更多的测试“行为”的知识,请查看 故事包含什么?
Behat的灵感来自于Ruby的Cucumber项目。
安装
Behat可以把你的用户故事作为测试的命令行工具,在开始之前,要确保你已安装的PHP版本高于5.3.1。
使用composer安装
通过composer来安装Behat是简单的。
在项目的根目录创建composer.json文件:
{
"require": {
"symfony/yaml": "2.1.13",
"symfony/translation": "2.3.24",
"symfony/console": "2.1.13",
"symfony/config": "2.3.24",
"symfony/dependency-injection": "2.1.13",
"symfony/event-dispatcher": "2.1.13",
"symfony/class-loader": "2.1.13",
"symfony/css-selector": "2.1.13",
"symfony/dom-crawler": "2.1.13",
"symfony/browser-kit": "2.1.13",
"symfony/finder": "2.1.13",
"symfony/process": "2.1.13",
"guzzle/guzzle": "3.3.1",
"fabpot/goutte": "1.0.1",
"instaclick/php-webdriver": "1.0.12",
"behat/gherkin": "4.3.0",
"behat/behat": "3.0.14",
"behat/mink": "1.5.0",
"behat/mink-extension": "2.0.1",
"behat/mink-browserkit-driver": "1.1.0",
"behat/mink-goutte-driver": "1.0.9",
"behat/mink-selenium2-driver": "1.1.1",
"behat/mink-zombie-driver": "1.1.0"
},
"minimum-stability": "dev",
"config": {
"bin-dir": "bin/"
}
}
下载composer.phar运行:
$ curl http://getcomposer.org/installer | php
$ php composer.phar install
执行完之后,你可以用这个命令运行Behat了:
$ ./vendor/behat/behat/bin/behat
基本用法
假设我们正在开发UNIX的ls命令,我们需要创建一个新的目录并且在这个目录中初始化Behat:
$ mkdir ls_project
$ cd ls_project
$ ./vendor/behat/behat/bin/behat --init
behat —init 会在当前目录下创建含有一些基础文件的features目录。
定义你的feature
Behat总是从feature文件开始,你可以描述和实现它。在这个例子中,功能是ls命令,它可以看成是整个UNIX系统的一个功能。我们需要先创建features/ls.feature文件:
# language: zh-CN
功能: ls
为了能看到的目录结构
作为一个UNIX用户
我需要能够列出当前目录的内容
每个功能都是使用这样的格式,一行描述功能,接下来的三行分别描述目标或者收益、角色、功能本身,如:
为了<达到某些目标>
作为<某类利益人>
我想要<某个特性>
虽然这部分内是必须的,但内容对Behat或者实际的测试来说并不重要。这部分重要的是每个功能都有明确的描述,并且是很容易阅读理解的。
定义场景
接下来在features/ls.feature尾部添加场景:
场景: 列出目录中的2个文件
假如我在"test"目录中
并且这个目录有"foo"文件
同时这个目录有"bar"文件
当我运行"ls"后
那么我能看到
"""
bar
foo
"""
“””这个特殊的语法只是为了界定多行字符串而使用的特殊语法。
每个功能都有一个或者多个“场景”,用来描述功能在不同条件下有不同的行为。这将被转为测试的一部分,每个场景始终遵循这样的格式:
场景: 一些场景的描述
假如[一些上下文,设定状态]
当[一些事件,执行行为]
那么[得到结果,状态校验]
在场景的每部分——上下文、行为和结果,都可以增加“并且”、“同时”、“而且”、“但是”这些关键字:
场景: 一些场景的描述
假如[一些上下文]
并且[另外一些上下文]
当[一些事件]
同时[第二个事件发生]
那么[得到结果]
而且[另外的结果]
但是[另外的结果]
“那么”、“并且”、“但是”或者和其它开头的词语并没有实际的区别,这些词语只是让你的场景看上去更自然,有更好的可读性。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11