我们有基于Python的Robot框架编写的大量系统测试,还有一些基于Java的Aqua框架.机器人灵活,记录良好,但非常繁琐,Aqua也没有对在这里使用它的人产生很大的热情.测试的产品主要是基于C#/ .Net,我们正在寻找一个可靠的扩展框架,使我们能够轻松初始化VM并操纵它们(使用SSH/telnet),定义步骤,等待等,并享受静态类型 - 所以我们不需要运行几个小时才能在某个测试步骤找到一些参数是不对的.
我们可以从头开始开发内部解决方案,也可以基于NUnit/Fitnesse(我们在单元测试/拟合测试方面都有很好的经验,但它们没有提供太多的日志/ Telnet/SSH功能)
有什么建议?
我即将在业余时间编写一个简单的HTML5 + JavaScript(jQuery)应用程序,以便跟上最新的Web技术(在工作中它是更先进的C#后端内容).
我希望以与过去十年左右相同的方式开发,即TDD风格.
作为HTML/JavaScript中的TDD/BDD/AcceptanceTDD世界的新手,我的问题是:是否有一个很好的框架或类似的东西,用于在浏览器中对网页进行测试(对许多浏览器的开箱即用支持是一个明确的加号)?
我想使用JavaScript的原因是双重的.1.我想学习更多的JavaScript,以及2.我想使用与开发相同的语言进行测试.
否则,我可以简单地使用我的C#技能并使用Selenium,WatiN或类似的框架.
我在MSDN上使用jQuery找到了Jasmine,QUnit和一个自行开发的解决方案,但是没有感受到流程和复杂性,因此建议和第一手经验非常受欢迎.
在specflow自己的安装目录指南,它说,只有这样,它是使用.msi安装和大多数我的主题阅读教程告诉我下载并安装该安装文件,但是当我搜索的NuGet包经理,我发现还有一个可用的specflow包.
asp.net acceptance-testing visual-studio-2010 specflow nuget
我们正在寻求一种bdd风格的方法,以Gojko Adzic的规范为例启发。实现是在Java中进行的,开发人员已经在编写junit测试。
关键要求是规范(验收测试)可由非开发人员编写,阅读和维护。该项目将以敏捷团队的身份运行-因此,如果开发人员必须遵守规范,那就很好。但是,我不希望开发人员,测试人员或领域专家必须阅读或编写类似于代码的内容。
到目前为止,我已经研究了FitNesse,Concordion和其他各种工具(例如Spock)。我拒绝使用Spock和类似工具,因为它们将开发人员作为主要受众。FitNesse似乎可以满足大多数要求。
不过,Concordion可能是当前的最爱:规格看起来更简洁。
所以我的问题(实际上是三个):
谢谢。
我在我的rspec中收到了webkit驱动程序的以下消息:
Capybara::Driver::Webkit::WebkitInvalidResponseError:
Unable to load URL: http://127.0.0.1:44923/posts
Run Code Online (Sandbox Code Playgroud)
几天前它起作用了.问题在于save_page方法.可能有什么不对?
ruby ruby-on-rails acceptance-testing capybara capybara-webkit
我目前正在为一个项目构建一个自动化的功能/验收测试套件,但是我没有很多编写这些类型测试的经验,所以我想得到一些正确构建它们的输入.具体来说,我正在使用Arquillian的Graphene扩展.
例如,假设我有3个测试,A,B和C.
TestA:测试登录应用程序中的帐户.因此,如果测试成功,浏览器应该在帐户的主页/信息页面上.
TestB:测试修改帐户的密码.这将需要登录帐户,然后测试密码更改功能.
TestC:测试修改帐户的电子邮件.这将再次需要登录帐户,然后测试电子邮件更改功能.
如果TestA由于登录代码问题而失败,显然TestB和TestC也会失败,因为它们需要登录到帐户.
问题:自动功能/验收测试是否应该复制完成测试验证所必需的过程?在这种情况下,TestB和TestC需要在执行任何其他操作之前登录该帐户.每个测试应该明确地调用如下:
/* ...initial test setup code here */
LoginPage.login(username, password);
assertTrue(onCorrectAccountPage);
AccountModification.changePassword(newPassword);
Run Code Online (Sandbox Code Playgroud)
或者我应该使用某种方式将一个帐户模拟到可以由测试B和C使用的会话中,这样即使TestA(实际的登录测试)确实如此,它们也不会失败?
由于这些是用户验收测试,我的想法是他们应该完成用户会做的事情并在必要时登录,但我不确定这是否是不必要的重复,应该以不同的方式处理(即,像功能,类似于标准单元测试)我希望得到在这方面有更多经验的人的反馈.
提前致谢.希望我的问题不是太复杂.:)
selenium structure acceptance-testing functional-testing jboss-arquillian
我想在我的网站上为某个功能添加验证码,例如reCaptcha.我怎样才能调整我的验收测试?
是暂停站点上禁用验证码的唯一解决方案吗?
澄清:
当然,我不是说蛮力破解我自己的验证码,而是例如从服务器端向我的测试所知的验证码注入状态的一些选项.
PS我的服务器端代码使用Pyramid框架,我的测试是使用Selenium编写的
背景
我正在努力帮助我的团队组织一个新的移动应用项目.我们选择遵循BDD(参见BDD定义)以捕获简单的英语要求,这些要求构成了利益相关者和开发者之间针对每个用户故事的合同.
我们使用验收测试来记录每个用户故事的要求.在sprint计划之前编写验收测试.开发人员在sprint计划期间改进并添加测试.
我们将Acceptance Criteria定义为规则列表(例如:输入验证,默认值等),将Acceptance Tests定义为Cucumber场景列表.我们计划使用Calabash进行移动测试.
我认为验收标准/测试更灵活,因此更好地解决了更正式的需求文档.
我觉得我找到了一个有效的解决方案,但我想了解其他人是如何收集要求和编写验收测试的.
问题
在Cucumber社区中,有必要与声明性测试步骤进行辩论.我倾向于强制要求,因为开发人员必须知道可交付用户故事的样子.
我不认为UI耦合又称脆性测试是一个问题.有一些方法可以将UI与测试分离(例如:页面对象).我也不认为有详细的步骤使非技术利益相关者难以理解(除非他们不知道如何使用网络浏览器或移动设备,但这是一个单独的问题).
我可能会挪用" 验收测试 "一词.在我的使用中,验收测试与单元测试的范围不同.我将验收测试视为高级集成测试.
这个例子
势在必行的测试
声明测试
这两者都可以覆盖相同的功能而后者更短,但它没有说我是否可以使用用户名,电子邮件或facebook/twitter/google/etc帐户登录.仅仅实际编写解决方案是不够的
问题
如何使用声明性步骤捕获要素?
我一直在努力学习Ruby中的Cucumber,我认为最好的方法就是创建自己的项目.但是,我想知道什么是一个好的"给定"条款.
据我所知,"给定"基本上是一个设置,"当"是被测试的功能,"然后"是预期的结果.
例如,让我们假设我正在基于踩着熔岩的实体制作一个Minecraft场景.我目前的GWT看起来像这样:
Scenario: Take damage when I stand in lava.
Given an entity is standing next to a block of lava with 10 health
When the entity steps in the block of lava
Then the entity should take 2 damage
Run Code Online (Sandbox Code Playgroud)
然而,这个"给定"步骤看起来相当'关闭'.我不得不站在一块熔岩旁边让这个场景发挥作用.同样 - 我将如何编写(并测试)一个应该经常发生的场景的GWT - 例如,我怎样才能确保只要我的实体保持在熔岩中,它将继续受到损害?我发现很难编写能够测试实体在熔岩中存放多久的代码.系统如何知道实体在熔岩中停留了多长时间?在我看来,测试那种东西需要我几乎写下世界其他地方,以便能够说"这个实体已经在熔岩中持续x秒,推进模拟,我失去了多少马力"
思考?
我的应用程序中有一个问题,其中2个验收测试似乎发生冲突.如果我运行测试,则2个测试中的一个将失败.下次我运行它时另一个会失败等等.如果一个接一个地运行它们永远不会失败
第一个测试是测试访问URL将根据模型是否在其toMany-relationship(异步)中有任何记录而重定向到正确的路径.此测试失败并显示:错误:断言失败:无法在未定义的对象上使用'currentPath'调用get.
第二个测试是检查toMany关系是否在无序列表中呈现的测试.此测试失败,因为list-item的内容为空.
这些是我的测试:
test('visiting /categories/#', function() {
visit('/categories/1');
andThen(function() {
equal(currentPath(), 'categories.category.subcategories.index');
});
});
test('renders products', function () {
visit('/categories/2/products');
andThen(function () {
var list = find('#product-list li');
equal(list.length, 2);
var first = find('#product-list li').eq(0);
equal(first.text(), 'A4');
var last = find('#product-list li').eq(1);
equal(last.text(), 'A3');
});
});
Run Code Online (Sandbox Code Playgroud)
更新:
升级到最新的ember-cli 0.0.43现在第一次测试失败已经消失了(npm install --save-dev ember-cli),但是第二次测试仍然每隔一次运行测试失败.