Testing 在空手道API中,模拟没有像我预期的那样工作

Testing 在空手道API中,模拟没有像我预期的那样工作,testing,karate,Testing,Karate,我正在探索用于集成测试的空手道API double(模拟)。对于下面的场景,我没有得到预期的嘲笑响应。谢谢你的帮助 我的设置: 1.空手道模拟服务器,端口上有pathMatches规则8001:(工作,根据“/cat”和一些测试调用进行验证) 2.我自己的应用程序由docker在端口上启动8080。Docker也暴露了8001端口 模拟案例: 1.我的应用程序REST调用向所有用户公开。这个公开的API调用了其他REST调用,实际上给出了JSON响应。因此,我想模拟底层API调用并相应地验证我的

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

我的设置: 1.空手道模拟服务器,端口上有pathMatches规则8001:(工作,根据“/cat”和一些测试调用进行验证) 2.我自己的应用程序由docker在端口上启动8080。Docker也暴露了8001端口

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

尝试的步骤: 1.现在,在我的应用程序配置中,我将替换对KarateMock server()的实际底层API调用。然后构建了我的应用程序docker

  • 在空手道中,我定义了测试,例如“testingrtn.feature”,它调用我的应用程序API“和空手道模拟服务器,并使用pathmatch”/userservice/v1/findUser进行设置
  • 执行“testingrtn.feature”后,空手道不模拟底层调用()
  • 现在,在“testingrtn.feature”文件中,我将我的应用程序URL更改为底层RESTURL,即()然后模拟将像魅力一样工作

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


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

    空手道无法自动拦截呼叫

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

    在Spring Boot中很容易超越应用程序属性。例如,您可以通过命令行:

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

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

    见表中最后第二行(5a):