空手道单机版作为模拟服务器,具有多个功能文件 我尝试用空手道设置一个集成/API测试套件,并考虑使用Karate Netty来嘲弄所需的服务。对于测试设置,测试中的系统A(一个Spring Boot应用程序)完全启动。然后,空手道测试由针对该实例的Maven测试运行来执行
服务A依赖于多个其他服务,这些服务需要在测试中模拟。为此,我的想法是将正在运行的KarateNetty独立实例配置为HTTP代理(由服务a的JVM参数完成) 现在我的想法是创建一个测试特性文件:空手道单机版作为模拟服务器,具有多个功能文件 我尝试用空手道设置一个集成/API测试套件,并考虑使用Karate Netty来嘲弄所需的服务。对于测试设置,测试中的系统A(一个Spring Boot应用程序)完全启动。然后,空手道测试由针对该实例的Maven测试运行来执行,karate,Karate,服务A依赖于多个其他服务,这些服务需要在测试中模拟。为此,我的想法是将正在运行的KarateNetty独立实例配置为HTTP代理(由服务a的JVM参数完成) 现在我的想法是创建一个测试特性文件:xyz test.feature 此文件所需的模拟在相关的模拟功能文件中定义:xyz mock.feature (测试场景相当复杂,外部服务的响应可能会有所不同) 这意味着对于完整的测试运行,我需要加载两个模拟特性文件。因此: 多个模拟要素文件的匹配策略是什么?可以说,哪种情况会赢 有没有办法确保正确的模
xyz test.feature
此文件所需的模拟在相关的模拟功能文件中定义:
xyz mock.feature
(测试场景相当复杂,外部服务的响应可能会有所不同) 这意味着对于完整的测试运行,我需要加载两个模拟特性文件。因此:
(显然,我可以重新配置正在运行的独立实例,并建议它下一步使用xyz-mock.feature。
但这会阻止我在API测试中使用并行执行,对吗?)
相关Id
,我可以为每个测试发送该Id,然后在模拟文件中与之匹配(它也被发送到所有被调用的服务)。但是:
听起来您只需要一个模拟文件。如果需要,您可以在不同的端口上启动2,但是没有办法将它们“合并”到一个端口中——如果这正是您想要的 根据我的经验,您将能够使用一个模拟来处理所有边缘案例。这是因为空手道的方法是非传统的:您几乎可以编写一个有状态的服务器。但通过在内存中保留变量和一些巧妙的JSON路径,您可以用很少的代码行模拟CRUD:
路径匹配('/\uu test/reset')
场景,该场景将清理您的状态,并将背景变量设置为*def cats=[]
等。现在,在每个特性中,只需在开始时调用特殊的“重置”URL。好在空手道是安全的。正如您所说的另一个想法是,您可以维护两个或三个不同的变量,并使用一些逻辑根据标题“路由”,这在IMO中同样非常简单。使用地图地图,例如:
- def数据={cats1:{},cats2:{},cats3:{}
mode:cats1
* def mode = karate.get('requestHeaders.mode[0]')
* def cats = data[mode]
场景有“空”描述,则它是一个“包罗万象”,理论上可以委托给另一个服务器(或模拟):
编辑:在1.1.0以后的版本中,应该可以使用多个模拟文件:不,我想你是对的。因此,我看到了两种选择:使用单个文件或为每个测试更改文件。第二个,也是你有意的重置请求,意味着我不能并行运行空手道测试,对吗?@tkrieger是的,如果你重置,你不能并行,在文档中查找
@parallel=false
,但我认为如果你使用内置的“路由”方法,你可以并行运行,模拟是非常线程安全的