我正在探索 Karate API double(模拟)以进行集成测试。对于以下场景,我没有得到预期的嘲笑响应。我们将不胜感激您的帮助。
我的设置:1.空手道模拟服务器在端口上使用路径匹配规则8001: http://本地主机:8001(工作,针对“/cat”和一些测试调用进行验证)
2.我自己的应用程序是从端口上的docker启动的8080。 Docker 也暴露了 8001 端口。
模拟案例:
1. My 应用程序 REST 调用暴露给所有用户http://localhost:8080/service/v1/findUser。这个暴露的API,潜在的呼叫其他人休息通话 http://dev-STG/userservice/v1/findUser它实际上给出了 JSON 响应。因此,我想模拟底层 API 调用并相应地验证我的 API 行为。
尝试的步骤:1. 现在,在我的应用程序配置中,m 替换对空手道模拟服务器的实际底层 API 调用(http://localhost:8001/userservice/v1/findUser)。然后构建并构建了我的应用程序 docker。
- 在空手道中,我定义了测试,例如“testIntgrtn.feature”,它调用我的应用程序 API "http://localhost:8080/service/v1/findUser”和空手道模拟服务器并使用路径匹配“/userservice/v1/findUser”进行设置。
- 执行“testIntgrtn.feature”空手道后,不会嘲笑底层调用(http://localhost:8001/userservice/v1/findUser).
-
现在,在“testIntgrtn.feature”文件中,我将应用程序 URL 更改为基础 REST URL,即(http://localhost:8001/userservice/v1/findUser)然后嘲笑就会像魅力一样起作用。
我不明白为什么底层API调用在这里不会被嘲笑吗?我在这里错过了什么吗?
此外,在空手道中,我们可以监控所有 REST 调用(例如 cypress 模拟)。
感谢这个精彩的框架。这对于编写自动化案例来说很直观。
空手道无法自动拦截呼叫。
推荐的方法是当您启动运行在以下位置的应用程序时localhost:8080
您更改配置,以便不用调用http://dev-stg/userservice/v1/findUser
它称之为类似的东西http://localhost:8001/v1/findUser
。这是大多数团队所做的,而且很简单,因为无论如何您都应该将外部 URL 定义为application.properties
(或同等)作为最佳实践。
例如,在 Spring Boot 中覆盖应用程序属性非常容易,您可以通过命令行执行此操作:https://stackoverflow.com/a/37053004/143475
如果需要,您可以动态地为模拟提供端口。因此,您的单元测试可以首先启动模拟,获取端口,然后启动服务器。您可以在空手道文档中找到详细信息。
综上所述,如果您能够在应用程序之前更改(系统)HTTP 代理,localhost:8080
启动后,您也许可以在不修改配置的情况下执行此操作。 (但这很棘手,所以我推荐上面解释的方法。)因此在这种情况下,Karate 实际上可以“拦截”应用程序在localhost:8080
makes.
请参阅此处表中的倒数第二行 (5a):https://github.com/intuit/karate/tree/master/karate-netty#consumer-provider-example
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)