当前位置: 首页 > 知识库问答 >
问题:

空手道单机版作为模拟服务器,具有多个功能文件

梁丘扬
2023-03-14

我尝试用空手道设置一个集成/应用编程接口测试套件,并考虑使用空手道网络来模拟所需的服务。对于测试设置,测试A(Spring Boot应用程序)下的系统完全启动。空手道测试然后由针对该实例的Maven测试运行执行。

服务A依赖于多个其他服务,这些服务需要在测试中被模拟掉。为此,我的想法是将正在运行的KarateNetty独立实例配置为HTTP代理(由服务a的JVM参数完成)。

现在我的想法是创建一个测试功能文件:xyz-test.feature
这个文件所需的模拟在一个相关的模拟功能文件中定义:xyz-mock.feature
(测试场景是相当复杂,外部服务的响应可能会有所不同)

这意味着对于完整的测试运行,我需要加载两个模拟特性文件。因此:

>

有没有办法确保关联的测试文件使用了正确的模拟文件
(显然,我可以重新配置正在运行的独立实例,并建议它下一步使用xyz-mock.feature。
但这会阻止我在API测试中使用并行执行,对吗?)

我已经考虑过重用相关Id,我可以为每个测试发送该Id,然后在模拟文件中与之匹配(它也被发送到所有被调用的服务)。但是:

共有1个答案

松高歌
2023-03-14

听起来你只需要一个模拟文件。如果你愿意,你可以在不同的端口上启动2,但是没有办法把它们“合并”到一个端口上——如果这就是你想要的。

根据我的经验,您将能够使用一个模拟来处理所有边缘案例。这是因为空手道的方法是非传统的:您几乎可以编写一个有状态的服务器。但通过在内存中保留变量和一些巧妙的JSON路径,您可以用很少的代码行模拟CRUD:https://github.com/intuit/karate/tree/master/karate-netty#background

>

鉴于上述限制,这里有一个有趣的想法:添加一个额外的路径匹配('/\uu test/reset')场景,该场景将清理您的状态,并将背景变量设置为*def cats=[]等。现在,在每个特性中,只需在开始时调用特殊的“重置”URL。好在空手道是安全的。正如您所说的另一个想法是,您可以维护两个或三个不同的变量,并使用一些逻辑根据标题“路由”,这在IMO中同样非常简单。使用地图地图,例如:

  • def data={cats1:{}, cats2:{}, cats3: {} }

您可以获取标题,例如,如果它是mode:cats1

* def mode = karate.get('requestHeaders.mode[0]')
* def cats = data[mode]

你的问题有点让人困惑,所以如果我没听懂,你可能不得不编辑并重新措辞。

编辑:从1.1.0开始,应该可以使用多个模拟文件:https://github.com/intuit/karate/issues/1566

 类似资料:
  • 如何在gatling模拟中运行多个空手道功能文件? 以下是我gatling模拟的代码片段: 我每次只能运行一个功能文件,如下所示:

  • 当我用空手道开始模拟发球时,有没有办法将端口设置为我想要的端口。启动,而不是像这样获取端口,这将在某个端口启动服务器并返回它: 有类似的可能性:

  • 我们已经知道场景是并行运行的。但是我们需要从功能文件(将从另一个功能文件调用)返回变量。 我们在功能文件中有如下多个场景: 我们正在重用上面的特征文件,以获取用于另一个特征文件的变量。然而,其他特征文件似乎间歇性失败,抱怨从其他特征文件获得的变量为空。 我的假设是返回的变量没有正确返回,因为功能文件上有多个场景。我们试图删除@负面场景,但只有1个场景。突然间,断断续续的故障消失了。 在保持并行运行

  • 我的API测试项目的工作,并已纳入空手道这样做。现在,我的要求是创建一个响应endpoint的服务器。所有这些都已完成,但我的要求是访问服务器功能中的空手道配置文件中定义的变量。我不能这样做。 例如:功能:示例服务器 场景:路径匹配('\variablevalue)**methodIs('get')) def响应=默认环境 注意:默认_env是空手道配置中的一个变量。js文件,并保存一些默认值。

  • 我有两个空手道特征文件 一个用于创建用户(CreateUser.feature) 一个用于获取创建的用户数(GetUserCount.feature) 我还有一个Gatling Scala文件 这将调用CreateUser。rampUser(100)超过(5秒)的功能 这工作完美。我想知道的是,在加特林完成模拟后,我如何调用GetUserCount.feature?只能调用一次以获取最终创建的用户

  • 我正在测试一个点对点应用程序,我可以向它发送网址,然后它应该向该网址发出请求。我可以用空手道模拟服务器模拟响应,但我也想验证请求是否已经发出。 我的一个想法是将每个到mock服务器的请求记录到一个文件中,然后在我的主要场景中(启动mock并将URL发送到应用程序)将其读回以进行验证。 还有更好的方法吗?我可以从创建模拟服务器的场景中访问模拟服务器的状态而不使用文件吗?我可以告诉模拟服务器验证它自己