我正在计划一个Apigility驱动的RESTful Zend Framework 2应用程序。对于单元测试,也可能用于数据库测试,将使用PHPUnit。现在我要为应用程序定义功能测试。
“功能测试”对我来说意味着测试真实的功能。它还获得了集成测试方面,因为应用程序然后进行“intermodularily”测试,因此它是跨单元/模块的测试。 (我对功能测试的理解是否正确?)
对于此测试,将发送实际请求并将响应与期望进行比较。随着写入请求可能会更复杂,但为了保持简单,我们首先考虑GET
情况。
(右?)
为此,使用行为测试似乎很有意义。 (实际上我根本没有看到任何其他适当的方法。) (右?)
如果我的其中一个逻辑步骤为假,请纠正我。
在RESTful PHP(ZF2)应用程序的上下文中可以使用哪些行为测试工具? PHPUnit Story Extension? behat? phpspec?其他框架?或者可以直接测试PHPUnit(定义一个单独的测试套件并在其测试类中使用API调用执行行为测试)?
或者这一切都是错误的,功能测试需要一种完全不同的方法吗?
答案 0 :(得分:3)
Behat是针对Apigility应用程序(或任何应用程序)进行行为测试的完全可接受的工具。
如果您专门谈论API(通常是Apigility),您也可以查看Dredd from apiary.io。在您记录API之后,这是一个很好的测试工具(同样有很多其他好处)
答案 1 :(得分:3)
所有工具示例(PHPUnit Story Extension,behat,phpspec)都与PHP绑定...实际上,您可以扩大搜索范围。
对Web应用程序进行黑盒测试的好处在于,您不需要使用与您使用的语言绑定的框架"在框内"。
例如,我使用Capybara来测试我的Web应用程序,而没有使用Ruby完成。选择最适合您的测试方式的那个。
我选择了Capybara以其以用户为中心的方法和可读性:
require 'spec_helper'
feature 'Register' do
scenario 'as a new user' do
visit '/register.html'
fill_in 'Username', :with => a_string()
fill_in 'Password', :with => 'secret'
fill_in 'Confirm password', :with => 'secret'
click_on 'submit'
expect(page).to have_content "Your account has been created"
end
scenario 'not as an existing user' do
visit '/register.html'
fill_in 'Username', :with => 'hatter'
fill_in 'Password', :with => 'secret'
fill_in 'Confirm password', :with => 'secret'
click_on 'submit'
expect(page).to have_content 'username already exists'
end
end
如果您的应用程序更像API,您可以找到更适合此类型的其他语言(例如Frisby.js):
test.create('Site cookie authentication')
.post('http://cassandre.local:1337/_session', {name:'alice', password:'whiterabbit'})
.expectStatus(200)
.after(function(error, resource) {
test.create('HTTP cookie authentication use')
.get('http://cassandre.local:1337/text/Wonderland/')
.addHeader('Cookie', resource.headers['set-cookie'])
.expectStatus(200)
.toss();
})
.toss();