在空手道api模拟不工作,为我预期的

x3naxklr  于 2021-07-16  发布在  Java
关注(0)|答案(1)|浏览(299)

我正在探索空手道api双重(模拟)的集成测试。对于下面的场景,我没有得到预期的嘲笑响应。谢谢你的帮助。
我的设置:1。端口8001上具有pathmatches规则的空手道模拟服务器:http://localhost:8001(正在工作,根据“/cat”和一些测试调用进行验证)2。我自己的应用程序是从8080端口的docker上传来的。从docker也暴露了8001端口。
模拟案例:1。myapplication rest调用对所有用户公开http://localhost:8080/service/v1/finduser。这个公开的api,底层调用其他restcallhttp://dev-stg/userservice/v1/finduser 它实际上给出了json响应。所以,我想模拟底层api调用并相应地验证api行为。
尝试步骤:1。现在,在我的应用程序配置中,我将替换对karate mock服务器的实际底层api调用(http://localhost:8001/userservice/v1/finduser)。然后构建了我的应用程序docker。
在karate中,我定义了test,例如“testingrtn.feature”,它调用我的应用程序apihttp://localhost:8080/service/v1/finduser“和空手道模拟服务器,并用pathmatch“/userservice/v1/finduser”设置。
在执行“testingrtn.feature”空手道之后,不要嘲笑底层调用(http://localhost:8001/userservice/v1/finduser)。
现在,在“testingrtn.feature”文件中,我将我的应用程序url更改为底层rest url,即(http://localhost:8001/userservice/v1/finduser)那么嘲弄将像魅力一样有效。
我不明白为什么底层api调用在这里没有被嘲笑?我错过什么了吗?此外,在空手道中,我们可以监视所有的rest调用(如cypress mocking)。
谢谢你的框架。这对于编写自动化案例是很直观的。

pjngdqdw

pjngdqdw1#

空手道不能自动拦截呼叫。
建议的方法是在启动运行在 localhost:8080 您可以更改配置,以便 http://dev-stg/userservice/v1/findUser 它叫做 http://localhost:8001/v1/findUser . 这是大多数团队所做的,而且很容易,因为您无论如何都应该将外部url-s定义为 application.properties (或同等)作为最佳实践。
在spring boot中很容易超越应用程序属性例如,您可以通过命令行:https://stackoverflow.com/a/37053004/143475
如果需要,可以动态地为mock配置端口。因此,您的单元测试可以首先启动一个mock,获取端口,然后启动服务器。你可以在空手道文档中找到细节。
所有这一切都说明,如果您能够在应用程序运行之前更改(系统)http代理 localhost:8080 启动时,您可以在不修改配置的情况下执行此操作(但是这很棘手,所以我推荐上面解释的方法。)所以在这种情况下,karate实际上可以“截获”应用程序所处的传出http调用 localhost:8080 制造。
见表中最后第二行(5a):https://github.com/intuit/karate/tree/master/karate-netty#consumer-提供程序示例

相关问题