帮助使用 Sensetalk(茄子的脚本语言)

软件测试 自动化测试 茄子 感觉谈话
2022-02-07 20:28:02

Sensetalk - Eggplant 的脚本语言,还有很多不足之处。我个人不明白为什么人们总是觉得有必要发明新语言。语法过于简单,因此可以将任何不简单的东西变成类似 lisp 的括号混乱,以确定它会做什么。缺少一些基本的语言功能(例如默认参数),需要将其设计到您的脚本中。未初始化变量的行为完全被破坏 - Sensetalk 将默默地做它认为最好的事情 -UninitialisedVar被读取为"UninitialisedVar",但是A phrase that has not been escaped in quotes可能会或可能不会抛出语法错误,具体取决于该短语中的哪些内容已被初始化以及它已被初始化为什么类型。

有关有效使用 Sensetalk 的任何提示和技巧?

2个回答

为避免奇怪的未定义变量行为,请将strictVariablesstrictParameters全局变量设置为true. 在大多数情况下,这将通过抛出异常来停止许多未定义的变量;使与他们打交道变得容易得多。

从我使用 sensetalk 的短时间内(大约一个月)开始,我想出了以下几点:

  1. 这应该是第 8 点,但我认为它足以被提升到列表的顶部:布尔值是从右到左 (<-) 懒惰地评估,而不是像大多数常见语言那样从左到右 (->)。这意味着如果你这样做,if func1() and func0() then return True else return False那么在不会评估func0返回的情况下 - 这与大多数首先评估的语言相反,你可以短路. 同样,只有在返回时才会评估for False func1func1func0if func1() or func0() return True else return false func1func0False

  2. 如果您想使用字符串,请确保在它们周围使用引号 - 将未初始化的变量视为字符串的行为是完全不合时宜的 - 避免它。

  3. 编写通用帮助脚本 - 虽然 Sensetalk/Eggplant 可以轻松完成一些相当复杂的事情,但语言中缺少一些相当基本的事情。编写它们并将它们保存在帮助程序套件中,您会发现自己到处都在使用它们。

  4. Sensetalk 没有您自己编写的默认参数(AFAIK)。我有以下辅助功能:

    to DefaultTo VariableNameIfYouUseDataLikeThisYouDeserveToGetBitten, Default
      if VariableNameIfYouUseDataLikeThisYouDeserveToGetBitten is empty or \
         VariableNameIfYouUseDataLikeThisYouDeserveToGetBitten = \
                    "VariableNameIfYouUseDataLikeThisYouDeserveToGetBitten"\
         then return Default
      return VariableNameIfYouUseDataLikeThisYouDeserveToGetBitten
    end DefaultTo  
    

    我在任何地方都以以下形式使用它:

    to Blah Var1, Var2, Var3
         set Var1 to DefaultTo(Var1, SensibleDefaultVar1)
         set Var2 to DefaultTo(Var2, SensibleDefaultVar2)
         set Var3 to DefaultTo(Var3, SensibleDefaultVar3)
    end Blah
    
  5. 编写执行操作的自动化步骤非常容易,但是使用这些步骤来测试某些东西留给您作为练习 - 不一定是坏事,但要确保构建项目的人知道他们的东西

  6. Sensetalk 和 Eggplant 对您进行自动化测试的方式几乎没有限制,除了它们工作方式不可或缺的那些(通过 VNC 进行图像捕获和识别),但是请确保构建项目的人知道他们的东西,否则太容易结束了搞得一团糟。

  7. Eggplant 的性能可能无法预测——有些事情非常慢,有些事情却出奇的快——你应该尝试一些你想做的实现,而不是对性能做出任何假设。