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

用空手道测试集装箱化微服务

巫马炫明
2023-03-14

我试图利用空手道(https://github.com/intuit/karate)作为测试容器化、基于云的微服务的整体测试策略中的一个关键组件。假设被测微服务和空手道都有自己的容器,流程如下:

  1. 获取本地部署的每个容器
  2. 构建(通过gradle)空手道容器中的组件(假设我们的模拟需要Java类)
  3. 部署(通过gradle)模拟并让它们在独立模式下运行
  4. 向微服务的YAMLs中注入有关模拟的信息
  5. 本地构建和部署微服务
  6. 通过CLI运行空手道测试(传递关于模拟和/或环境的信息)

我的第一个问题是这是一个好主意还是一个坏主意。从表面上看,这似乎是合理的,也是可以实现的,但我想知道我是否在试图以一种从未被使用过的方式使用空手道。我考虑过在测试中保留所有空手道的东西(包括模拟服务器),但是步骤3-5必须将模拟信息注入微服务,然后运行命令以在测试套件中构建和部署微服务,在我看来这是个坏主意。最好把它作为詹金斯工作中管道的一部分,对吗?

我的第二个问题是如何最好地导出模拟、文件和Java依赖项供外部使用(以支持步骤2-3),例如,下面是文件结构:

.
+-- build.gradle
+-- src
|   +-- main
|       +-- java
|           +-- JWTSigner
|           +-- PEMHelper
|       +-- resources
|           +-- private-key.pem
|           +-- public-key.pem
+-- test
|   +-- main
|       +-- java
|           +-- api
|               +-- cats
|                   +-- cats.feature
|               +-- dogs
|                   +-- dogs.feature
|               +-- AllTestsRunner.java
|           +-- mocks
|               +-- mock-auth.feature
|           +-- templates
|               +-- public-key.json
|       +-- resources
|           +-- lolcats.pdf
|           +-- loldawg.jpg

所以在这里,mock-auth.feature需要在src/mainsrc/test/tem板中的内容。我已经能够玩gradle任务,并将所需的东西复制到主目录的子目录中,使用独立的空手道JAR来启动模拟,但我想知道是否有更好的方法...

任何反馈都是感激的,但如果是否定的,请建议我尝试的替代方案。非常感谢。

共有1个答案

曾洲
2023-03-14

第二个问题的答案如下:https://stackoverflow.com/a/58339662/143475

在我看来,没有正确的方法™协调您的模拟和测试中的应用程序。你提出的方法会起作用,我要做的是在Docker中使用--Network选项,例如,如果网络被称为moks,你必须决定并可能公开一个端口号,例如8080,你设置第二个容器中的URL为超文本传输协议

您可以从空手道分布式测试指南的本页获得一些想法:https://github.com/intuit/karate/wiki/Distributed-Testing

请注意,空手道模拟被设计为只需要JRE和“fatjar”。这可以简化事情,例如,您甚至不需要“Dockerize”事情,只需在路径上使用java并指向您的*。功能文件,您就完成了。即使使用Java代码,也可以将它们添加到类路径,或者使用maven shade自己构建一个“fatjar”。

正如您所说的,具有最少移动部件的选项可能是在同一个Java项目中建立模拟。优点是:

  1. 您可以动态选择端口并将其传递给主应用程序配置

进一步阅读:https://stackoverflow.com/a/61414022/143475

 类似资料:
  • 我正在使用空手道为Spring Boot应用程序进行集成测试。应用使用另外两个服务(服务A和服务B)。我已经为服务A和服务B编写了空手道模拟。我的集成测试是作为两个不同的功能文件编写的。其中一个特性是使用服务A和服务B的Mocks测试的。另一个特性使用服务B的Mocks和服务A的Spring契约存根。 仅具有模拟的功能 具有mock和Spring契约存根的特性 现在,当我们运行测试时,第二个失败了

  • 我无法在我的功能中运行空手道测试 不知道我错过了什么。对于api自动化世界来说是非常新的。非常感谢任何帮助。

  • 我无法使用CLI执行测试。跑者工作。我正在使用版本0.9.5.rc5和maven命令:“mvn test-f pom.xml exec:java-dexec.mainclass=com.intuit.karate.cli.main-dexec.args='-d'-dexec.classpathscope=test” 以下是错误:ERROR com.intuit.karate-driver conf

  • 我正在使用空手道缺省的arche类型,正如在空手道教程中提到的,并且使用Eclipse成功地运行了cucumber报告的测试,但是当我在Jenkins中使用相同的项目时,我会得到以下错误。我正在使用Java1.8和Cucumber-reporting工具,请帮助我解决这个问题,因为我怀疑这是项目结构的问题 POM文件 `http://maven.apache.org/xsd/maven-4.0.0

  • 我有一个框设置为在一个容器框内。这个集装箱箱还会有其他内容。 我正在尝试垂直居中内框内的文本。为此,我将与一起使用。 作为最后一步,我现在希望高度总是充满集装箱箱。以便此内框内垂直居中的文本始终垂直居中于容器框内。 > 容器框的高度会根据其内容进行调整,因此我无法在CSS中设置框的特定高度。 对于内框上的也没有帮助。 我怎样才能使这个内箱始终100%垂直地充满它的集装箱箱? 这里有一个示例代码段:

  • 我95%的自动化框架是在空手道,工作得很好。我们需要检查应用程序日志中显示的中间结果的功能很少(不在Json响应中)。我写了一个外壳脚本,它在从邮递员手动发送请求后验证Linux机器上的应用程序日志。我使用eclipse的JSCH库调用这个脚本。 有没有什么方法可以让我从空手道发送请求,然后调用我的JSCH类进行验证,这样就可以避免手动发送请求的步骤? 谢谢,阿比