如何用Selenium进行模糊测试

Pie*_* Ed 5 testing selenium fuzzing

我是Selenium的新手,也是模糊测试.我看到Selenium IDE只允许修复测试用例.但是,模糊测试似乎很有帮助.

那么模糊测试的背后是什么,Selenium提供什么样的测试,这是一个黑盒子或白盒测试.

任何帮助,将不胜感激.

Cuo*_*yTo 14

简短的回答:

  • Selenium主要是关于黑盒测试,但你也可以用Selenium做一些更白的测试.
  • 与Selenium IDE相比,Selenium RC让您可以更自由地进行模糊测试.

如需长篇答案,请参阅以下内容:

在这篇文章中,我将尝试解释使用Selenium RC随机测试Web应用程序的概念.

通常来说,像Selenium这样的黑盒测试技术为您提供了良好的自由度

  • (1)为某个字段输入任何值
  • (2)选择要在某个HTML表单中测试的任何字段
  • (3)选择任何执行顺序/步骤来测试某组字段.

基本上你

  • 使用(1)测试HTML表单中的特定字段(您是否为字段选择了一个良好的最大长度),您对该字段值的JavaScript处理(例如,将"t"变为今天的日期,将"+1"变为明天的date),以及你的后端数据库对该变量的处理(VARCHAR长度,将数字字符串转换为数值,......).
  • 使用(2)测试所有可能的字段
  • 使用(3)测试字段之间的相互作用:如果在密码字段之前没有输入用户名字段,是否有弹出的JavaScript警告,当某些情况下是否有数据库(例如Oracle)触发器"弹出"不满足.

请注意,即使在理论上也不可能测试一切(程序的所有状态,由所有变量的可能组合构建)(例如:考虑测试用于解析字符串的小函数,然后字符串有多少可能的值?) .因此,实际上,考虑到有限的资源(时间,金钱,人员),您只想测试Web应用程序的"最关键"执行路径.如果路径具有更多属性,则该路径被称为更"关键":(a)经常执行,(b)偏离规范会导致严重损失.

遗憾的是,很难知道哪些执行情况至关重要,除非您已记录应用程序的所有用例并选择最常用的用例,这是一个非常耗时的过程.此外,即使是最少执行的用例中的一些错误也可能导致很多麻烦,如果它是一个安全漏洞(例如,某人窃取了所有客户的密码,因为某个PHP页面的URL处理中存在一个小错误).

这就是为什么你需要随机扫描测试空间(即那些用例中使用的值的空间),希望能够运行 - 扫描 - 扫描所有内容.这称为模糊测试.

使用Selenium RC,您可以轻松完成所有阶段(1),(2)和(3):在任何执行步骤中通过使用受支持的语言(如Java,PHP,CSharp,Ruby,Perl)进行一些编程来测试任何字段中的任何值,Python.

以下是完成所有这些阶段(1),(2)和(3)的步骤:

  • 创建HTML字段列表,以便您可以轻松地遍历它们.如果你的HTML字段没有足够的结构化(遗留原因),可以考虑添加一个包含特定id的新属性,例如selenium-id到你的HTML元素,以(1)简化XPath的形成,(2)加快XPath的分辨率和(3)避免翻译麻烦.在为这些新添加的selenium-id选择值时,您可以自由地帮助迭代,同时通过(a)使用连续数字进行模糊测试,(b)使用形成一致性的名称.
  • 创建一个随机变量来控制步骤,比如rand_step
  • 创建一个随机变量来控制字段,比如rand_field
  • 最后,创建一个随机变量来控制输入某个字段的值,比如rand_value.
  • 现在,在您的模糊算法中,首先迭代rand_step的值,然后对每个这样的迭代,迭代rand_field,然后最后遍历rand_value.

也就是说,模糊测试有助于在有限的执行时间后扫描整个应用程序的用例值空间.据说"出现了一个新的漏洞瘟疫,影响了流行的客户端应用程序,包括Microsoft Internet Explorer,Microsoft Word和Microsoft Excel;这些漏洞的很大一部分是通过模糊测试发现的 "

但模糊测试并非没有缺点.考虑到所有这些随机性,一个是否能够重现测试用例.但您可以通过执行以下操作之一轻松克服此限制:

  • 在批处理文件中生成测试用例以在特定时间段内使用,并逐渐应用此文件
  • 动态生成测试用例,同时记录这些案例
  • 仅记录失败的案例.