如何使用Selenium进行模糊测试

7
我刚开始接触Selenium和模糊测试。我发现Selenium IDE只允许使用固定的测试用例,但是模糊测试似乎很有帮助。
那么,模糊测试背后的原理是什么?Selenium提供哪些类型的测试?这是黑盒测试还是白盒测试?
感谢您的帮助。
2个回答

16

简短回答:

  • Selenium主要用于黑盒测试,但也可以使用Selenium进行一些白盒测试。
  • Selenium RC比Selenium IDE更适合进行模糊测试。

详细解释如下:

本文将尝试解释如何使用Selenium RC随机测试您的Web应用程序。

通常来说,像Selenium这样的黑盒测试技术可以给您很好的自由度:

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

基本上,您可以

  • 使用(1)来测试您HTML表单中特定字段的内容(您选择了一个好的字段最大长度),JavaScript如何处理该字段的值(例如将“t”转换为今天的日期,将“+1”转换为明天的日期),以及后端数据库如何处理该变量(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的新属性,例如到您的HTML元素中,以简化XPath形成,加快XPath分辨率并避免翻译麻烦。在选择这些新添加的selenium-id的值时,您可以自由地通过(a)使用连续数字,(b)使用形成一致性的名称来帮助模糊迭代。
  • 创建一个随机变量来控制步骤,称为rand_step
  • 创建一个随机变量来控制字段,称为rand_field
  • 最后,创建一个随机变量来控制输入到某个字段中的值,称为rand_value。
  • 现在,在您的模糊算法内部,首先通过rand_step的值进行迭代,然后对于每次这样的迭代,通过rand_field进行迭代,最后再通过rand_value进行迭代。
Fuzz测试有助于在有限的执行时间后扫描整个应用程序的用例值空间。据说“新漏洞瘟疫影响了流行的客户端应用程序,包括Microsoft Internet Explorer、Microsoft Word和Microsoft Excel;其中很大一部分漏洞是通过模糊测试发现的”。但是,模糊测试也存在缺点之一是难以重现所有那些随机性的测试用例。不过,您可以通过以下方法轻松克服这个限制:1.事先生成测试用例,并将其存储在批处理文件中,在一定时间内使用该文件并逐渐应用;2.动态生成测试用例,并记录这些用例;3.仅记录失败的用例。

1
非常详细的回答,谢谢。您已经解释了如何将值输入HTML输入字段,那么随机点击按钮呢? - Piet Ed

4
回答一下关于Selenium是否是黑盒或白盒的问题。
关于黑盒和白盒的定义:
- 黑盒:检查一个盒子(通常是整个应用程序)是否在输入时输出正确。理论上,如果验证了所有可能的输入输出对,则您的应用程序无漏洞。 - 白盒:检查源代码的控制流程。理论上,如果所有执行路径都没有问题,则您的应用程序无漏洞。
但在现实生活中,您无法处理所有输入-输出对或所有执行路径,因为您总是有限的资源:
- 时间 - 金钱 - 人力
通过Selenium:您通过输入值或在Web应用程序上执行某个点击操作来模拟用户,并等待浏览器给您想要的行为。您不知道也不关心Web应用程序的内部功能如何工作。这就是为什么典型的Selenium测试是黑盒测试的原因。

1
非常感谢。我现在看到了Selenium测试的更黑暗的一面。那么它的更白的部分呢? - Piet Ed
Selenium测试是黑盒测试的一个例子,而不是白盒测试。 - AndyPerfect
@AndyPerfect:感谢您发现这个错别字。我在整篇文章中的意思是Selenium ===黑盒测试,但是不小心以错别字结束了它。 - CuongHuyTo
@CuongHuyTo 不用担心,只是想帮忙 :) 但你花费在这些答案上的时间真的很值得称赞。做得非常好。 - AndyPerfect

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接