Dart 中的模糊测试

什么是模糊测试。

  • 模糊测试是一种检测函数意外输入的方法。

  • 创建一个用于模糊测试的文件夹。

  • 并将您的文件放在此文件夹下。

import ‘package:fuzz_dart/fuzz_dart.dart’ as fuzz_dart;

void main(List<String> arguments) {

}

示例。

  • 这是问候函数。
  • 我们这里有一个控制。
  • 但是我们没有对子字符串的长度进行任何限制。如果 name 变量的长度小于 10,此函数将抛出错误。
  • 因此,模糊测试会发现像这样的错误。并生成 html 文件。
  • 运行此文件 dart run {FILENAME}

 void main(List<String> arguments) {
  greeter(String name, String lastname) {
    if (name.length > 13) {
      throw Exception('name is so long');
    }
    name.substring(10)
    return "hello $name $lastname";
  }

  fuzz_dart.Fuzzer greeterFunctionFuzzer = fuzz_dart.Fuzzer(
      type: [fuzz_dart.AcceptedTypes.string],
      iterateCount: 12,
      fileName: 'greeter-fuzzer');
  greeterFunctionFuzzer.iterate(greeter, 'greeting!',
      description: 'Returns name and lastname');
}

  • 输出

    Exception: name is so long - Arguments: [ovfpdf|qelzyavu`, m}oqc~wgo]
RangeError (start): Invalid value: Not in inclusive range 0..2: 20 - Arguments: [g, du~klr]
Exception: name is so long - Arguments: [w{kpa}tdy}r~slrnvstp, s|_qr|rtsjzrz~vid}|dlvyvyi_~d~tbooj_|lvmq]
Exception: name is so long - Arguments: [ik|ca|k_gdilltbyyl|osooyzdirjza{{y, zuoo~u}woxsx|kqznyucvadwnpnmp_kp]
RangeError (start): Invalid value: Only valid value is 0: 20 - Arguments: [, fypr|cjnk|irec|vepfpypgs~rdjeltr_y{}io|{ucre`~d]
Exception: name is so long - Arguments: [vhedjuscuoervjauram`y}i{q{mxigw, sxypbkwjrqszjlszoy}siiswclhqdrpylwiprk]
Exception: name is so long - Arguments: [~ol{`butmq~how, jkfykl{i`spvoqz~qjkqcm`]
Exception: name is so long - Arguments: [~nmgrmmoujpqyssvgz{hjtm~_w, zqx{|tkhdpg]
Exception: name is so long - Arguments: [ylne}rmrwrear_fv~g`z{{dz_ecsefk|rot_bvfqa, ejwu]

示例 2

  • 确保您的参数顺序在 type 属性中是正确的。

 import 'package:fuzz_dart/fuzz_dart.dart' as fuzz_dart;

 String calculate(int num1, int num2) {
    if (num1 > 2000) {
      throw Exception('num1 should lower than 2000');
    }
    return "result of two number is ${num1 + num2}";
  }
  String calculate2(int num1, int num2, int num3) {
    return "result of three number is ${num1 + num2 + num3}";
  }

  fuzz_dart.Fuzzer greeterFunctionFuzzer = fuzz_dart.Fuzzer(
      type: [fuzz_dart.AcceptedTypes.string],
      iterateCount: 12,
      fileName: 'greeter-fuzzer');

  fuzz_dart.Fuzzer intFuzzer = fuzz_dart.Fuzzer(
      type: [fuzz_dart.AcceptedTypes.integer],
      iterateCount: 3,
      fileName: 'fuzzer 1');

  fuzz_dart.Fuzzer intFuzzer2 = fuzz_dart.Fuzzer(
      type: [fuzz_dart.AcceptedTypes.integer],
      iterateCount: 2,
      fileName: 'fuzzer-2');

 intFuzzer2.iterate(calculate, 'calculator 1');
  intFuzzer.iterate(calculate2, 'calculator 2');
  greeterFunctionFuzzer.iterate(greeter, 'greeting!',
      description: 'Returns name and lastname');
  listFuzzer.iterate(arrs, 'list fuzzer fun');
  cityFuzzer.iterate(city, 'city', description: 'Returns current index');

HTML 输出

img1 img2 img3 img4

GitHub

查看 Github