在使用karate编写单元测试时,想要同一个变量在不同的Scenario中复用,是否可行呢?其实是不可以的。严格来讲,这种情况不应该出现,如果你真的遇到了,应该考虑将其组合到同一个Scenario中才是合理的。

如果你真的那么做了,将会遇到下面这样的一个报错:

ReferenceError: “id” is not defined in eval at line number 1

先给出一段报错,这段报错是因为我在两个场景中使用了id这个字段,由第一个场景赋值,想在第二个场景中使用场景一的值,然后抛出了上面那段错误。

在查找资料过程中找到这样一段话,翻译成中文就是:如果你想在一个场景中修改一个变量,并在另一个场景使用上一个场景修改后的值,那么你一定是误解了场景这个概念。

If you are trying to modify a variable in one scenario and expect it to be now having that modified value when the next Scenario starts, you have misunderstood the concept of a Scenario.

那么有这种情况该怎么办呢?

考虑到这是一个串行流,将你的测试步骤组合到一个场景中是最好的。

Just combine your steps into one Scenario, because think about it: that is the “flow” you are trying to test.

为什么karate不支持这种变量处理方式呢?文中提到原因主要有两点。

  • 1、每个场景应当是独立的,因为在以后可以随机或并行的执行;
  • 2、如果你注释掉一个场景,另外一个场景也能正常工作。

Each Scenario should be able to run stand-alone. In the future the execution order of Scenario-s could even be random or run in parallel. Another way to explain this is - if you comment out one Scenario other ones should continue to work.