我发现一个超级有用的模式是将场景保留在业务相关的特定功能文件中。然后,在步骤定义中执行所有技术性工作,例如特定的REST调用和断言。
当我第一次看到空手道时,我就想了-这正是我想要的。测试人员使用黄瓜的一种方法,但无需编写Java代码即可编写步骤定义。然后,当我看到“要维护的单层代码”作为功能部件被市场化销售时,我感到非常难过。企业不关心的技术API事物被推到功能部件定义中。
我的问题是... 有没有办法(或在路线图上考虑)定义标准黄瓜方案(通过典型的正则表达式范例)映射到使用空手道编写的步骤定义?
下面是我试图实现的目标的一个示例……它甚至可能不是一个特别出色的示例,但我需要一些东西来画一幅画,并使人们以相似的方式思考。
Scenario: Search for skills
Given "Bob" has "Karate" as a skill
And "BDD" is an available skill
And "Bob" does not have "BDD" as a skill
When Jane searches "Bob"'s skills
Then she will see "Karate"
And not "BDD"
然后我想从BDD场景中获得步骤定义。
^ Given(。)具有(。)作为技能$
Given url 'http://myhost.com/candidates'
And request '{ name: "${1}". skills: ["${2}"] }'
When method post
Then status 201
And response == { id: '#notnull', name: '${1}', skills: ["${2}"] }
^而且(。*)是可用技能
Given url 'http://myhost.com/skills'
And request '{ skills: ["${1}"] }'
When method post
Then status 201
And response == { skills: ["${1}"] }
^并且(。)没有(。)作为技能
Given url 'http://myhost.com/candidates/${1}'
And request '{ name: "${1}", skills: ["${2}"] }'
When method get
Then status 200
And response == (TODO: assert ${2} is not in skills list... sorry didn't have time to find the valid karate syntax)
^当。*搜索(。*)的技能时
Given url 'http://myhost.com/candidates/${1}'
When method get
^然后。*将显示(。*)$
Then response == { id: '#notnull', name: '#notnull', skills: ["${1}"] }
^而不是(。*)$
Then response == (TODO: check that it doesn't have ${1} as skill)
我意识到我的示例有些复杂。例如,前3个步骤定义已完全包含G / W / T。最后三步定义位于G / W / T上,分为三步定义。
我不一定需要与我的示例完全相同的东西,而是使用它来尝试弄清是否可以将场景与映射到空手道DSL的Cucumber JVM正则表达式结合使用的任何模式。
预先感谢
答案 0 :(得分:0)
然后,当我看到“要维护的单层代码”作为功能部件被市场化销售时,我感到很伤心,而企业不关心的技术API事物被推到功能部件定义中。 / p>
是的,这是有意的,希望我可以说服您为什么通过另一个堆栈溢出答案https://stackoverflow.com/a/47799207/143475
完成此操作现在,我确实会考虑您提出的“如果您能同时兼顾两全其美”。我们正处于引擎重写的过程中,您可以在此处找到与您的问题相关的动机和生动的辩论,您可以随时参与:https://github.com/intuit/karate/issues/398
但是第一个链接应该解释为什么我认为这不是优先事项。我坚信空手道不应该 解决“非技术用户的可读性”。
也许,最适合您的情况是在重写引擎之后,您可以以最低的侵入性方式将空手道混入“传统Cucumber BDD”测试中。随时参与并塑造它的外观。