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

在空手道API中嘲笑对我来说不起作用

高功
2023-03-14

我正在探索用于集成测试的空手道API double(模拟)。对于下面的场景,我没有得到预期的嘲笑响应。谢谢你的帮助。

我的设置: 1.空手道模拟服务器与路径匹配规则端口8001:http://localhost:8001(工作,针对/cat和一些测试调用进行验证)2。我自己的应用程序是从docker端口8080。从Docker暴露8001端口以及。

模拟案例:1。我的应用程序REST调用向所有用户公开http://localhost:8080/service/v1/findUser.这个公开的API,底层调用其他REST调用http://dev-STG/userservice/v1/findUser这实际上给出了JSON响应。因此,我想模拟底层API调用并相应地验证我的API行为。

尝试的步骤:1.现在,在我的应用程序配置中,m替换了对空手道模拟服务器(http://localhost:8001/userservice/v1/findUser)的实际底层API调用。然后确实建造了

现在,在testIntgrtn.feature文件中,我将我的应用程序URL更改为基础REST URL i. e(http://localhost:8001/userservice/v1/findUser),然后嘲笑将像魅力一样工作。

我不明白为什么底层API调用在这里没有被嘲笑?我错过什么了吗?此外,在空手道中,我们可以监控所有的REST呼叫(如cypress mocking)。

感谢这个美妙的框架。这对于编写自动化案例是直观的。

共有1个答案

臧曜瑞
2023-03-14

空手道不能自动拦截呼叫。

建议的方法是,当您在localhost:8080上启动运行的应用程序时,您可以更改配置,以代替调用http://dev-stg/userservice/v1/findUser它调用类似http://localhost:8001/v1/findUser。这是大多数团队所做的,而且很容易,因为您无论如何都应该将外部URL-s定义为应用程序。属性(或同等)作为最佳实践。

在Spring Boot中很容易超越应用程序属性。例如,您可以通过命令行:https://stackoverflow.com/a/37053004/143475

如果需要,可以动态地为模拟配置端口。因此,您的单元测试可以首先启动模拟,获取端口,然后启动服务器。您可以在空手道文档中找到详细信息。

综上所述,如果您能够在localhost:8080上的应用程序启动之前更改(系统)HTTP代理,则无需修改配置即可完成此操作。(但这很棘手,因此我建议采用上述方法。)因此,在这种情况下,空手道实际上可以“拦截”应用程序在localhost:8080上发出的HTTP呼叫。

见表中最后第二行(5a):https://github.com/intuit/karate/tree/master/karate-netty#consumer-提供者示例

 类似资料:
  • 在groovy中,我试图使用以下方法来模拟请求的返回,但每当代码调用时,我总是得到一个空指针异常: 测试中: 我使用的是Mockito3.12,我的测试只是以空指针异常而失败,我的restTemplate交换(在调试时)返回一个空值。我做错什么了吗? 如果它有助于Rest寺庙交换有以下定义: 对给定的URI模板执行HTTP方法,将给定的请求实体写入请求,并以ResponseEntity的形式返回响

  • 我有一个问题,这也在这里讨论:onBackPress永远不会被调用 我试图取消CountDownTimer时,按从Android手机本机返回按钮。所以我想重写onBackPmed方法,取消计时器并返回到另一个活动,但只有一次。(返回到主活动,如主页按钮)。 这是代码的一部分:

  • 我也是Mockito和PowerMockito的新手。我发现我无法使用纯Mockito测试静态方法,因此我需要使用PowerMockito(对吗?)。 我有一个非常简单的类,名为Validate,使用这个非常简单的方法 因此,我需要验证: 1) 当我在null message参数上调用该静态方法时,将调用IllegalArgumentException。2)当我在null object参数上调用该

  • 由于各种原因,我的单元测试环境无法访问启动ignite所需的环境。我不需要ignite来启动测试,我希望代码忽略对ignite的调用。开始()。我该怎么做? 我尝试过模拟点火,但当我尝试模拟start()方法时,它会抛出一个错误。 这会导致以下错误: 组织。莫基托。例外情况。误用。MissingMethodInvocationException:when()需要的参数必须是“模拟的方法调用”。例如

  • 我提到了这个答案,我该如何模拟java。时间本地日期。now()关于如何模拟我的LocalDateTime。now()调用。我基本上遵循了所有步骤,但只使用了LocalDateTime而不是LocalDate。 我的代码的功能是这样的,它应该只在一小时的第15或45分钟运行。因此,我将LOCAL\u DATE\u TIME静态变量设置为: 然后在我的@Before测试方法中,我有以下内容: 这是2

  • 我目前正在做一个小项目,作为Java测试课程的实习,我们试图看看mocking是如何工作的。 我们的目标是看到我们可以忽略我们所嘲笑的类中的错误。 正如您在Collaborateur中看到的,缺少一个“;”在System.Out之后,exercice的目标是表明嘲笑这个类可以让我们忽略这个错误。我的一些同事使用Eclipse时,使用“以JUnit形式运行”功能没有问题。 在Intellij中,我没