【问题标题】:Random object generator in JavaScriptJavaScript 中的随机对象生成器
【发布时间】:2010-03-14 21:46:24
【问题描述】:

我需要一个 JavaScript 中的随机对象生成器,它可以生成具有不同字段和值的各种对象。有什么想法可以在哪里找到这样的工具?

我需要生成具有各种复杂性的随机对象。我的目标是使用 JSON 来序列化这些对象并模糊测试我的应用程序 http api。

【问题讨论】:

  • 嗯...写吗?或者澄清您的需求,因为它们听起来对我来说非常具体。
  • 我需要生成具有各种复杂性的随机对象。我的目标是使用 JSON 序列化这些对象并模糊测试我的应用程序 http api。
  • 看我的回答,它确实如你所说。

标签: javascript object random fuzzing


【解决方案1】:

你可以使用hasard

javascript 中的随机变量和随机嵌套对象操作

const h = require('hasard');

const randomInteger = h.integer({type: 'poisson', lambda: 4});

const randomString = h.string({
    size: h.add(randomInteger, 5),
    value: h.value('abcdefghijklmnopkrstuvw'.split(''))
});

const randomNumber = h.number([0, 100]);

const randomKeys = h.array({
    size: randomInteger,
    value: randomString
});

// we first define it, to use it as reference into randomObject
const randomValue = h.value();

const randomObject = h.object(
    randomKeys,
    randomValue
);

// And we set recursivity by setting his values afterward
randomValue.set([
    randomString,
    randomObject,
    randomNumber,
    randomInteger
]);

结果看起来像

[
  {
    "vbmujvv": "rfigcpcvpj",
    "sjmcgvvk": 3,
    "efdarehl": {
      "odinthsuca": "rwjhmbfus",
      "noihjtjen": 27.73332043042913,
      "brspkaagb": "lnuiabcfd"
    },
    "febtungjhfokf": 49.28625818957401,
    "eoemrkgi": {
      "jkcuwrpsh": "ekjoltm",
      "cincs": {
        "fcovbwk": {
          "whsgmjh": 48.00843935524626,
          "agsjflef": 46.700796253998014
        },
        "ovkdfudgfm": 84.83383163217746,
        "fpfetl": "djuvfjbjptf",
        "kobmkstj": {
          "wskgkkerk": 9,
          "kvnptptek": 37.63655947554132,
          "dsloun": 4
        }
      },
      "krirwk": {
        "sjgftomu": 51.663884142674775,
        "hpjgibnli": 4
      },
      "pkhkgruls": "isuodwjrg"
    },
    "ortomnue": 71.71303423929236
  }
]

免责声明我是hasard library 的作者

【讨论】:

    【解决方案2】:
    function createRandomObj(fieldCount, allowNested)
    {
        var generatedObj = {};
    
        for(var i = 0; i < fieldCount; i++) {
            var generatedObjField;
    
            switch(randomInt(allowNested ? 6 : 5)) {
    
                case 0:
                generatedObjField = randomInt(1000);
                break;
    
                case 1:
                generatedObjField = Math.random();
                break;
    
                case 2:
                generatedObjField = Math.random() < 0.5 ? true : false;
                break;
    
                case 3:
                generatedObjField = randomString(randomInt(4) + 4);
                break;
    
                case 4:
                generatedObjField = null;
                break;
    
                case 5:
                generatedObjField = createRandomObj(fieldCount, allowNested);
                break;
            }
            generatedObj[randomString(8)] = generatedObjField;
        }
        return generatedObj;
    }
    
    // helper functions
    
    function randomInt(rightBound)
    {
        return Math.floor(Math.random() * rightBound);
    }
    
    function randomString(size)
    {
        var alphaChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
        var generatedString = '';
        for(var i = 0; i < size; i++) {
            generatedString += alphaChars[randomInt(alphaChars.length)];
        }
    
        return generatedString;
    }
    

    它将创建一个带有 X 参数的 obj,所有参数都具有整数、浮点数、字符串、布尔值或空值。
    我刚刚做到了:B

    【讨论】:

    • 如果我将一个字段的值设置为一个对象,它会起作用吗:o[getRandomString(8)]=createRandomObj(5) 我想生成更复杂的对象..类似于:{ "a":3,"b":{"c":4,"d":5}}
    • 哦,当然,我马上实现它:)
    • 查看第二个参数:),如果是真的,它将使用相同的功能和参数生成子对象:)
    • 对此要小心——据我所知,如果 fieldCount > 5 并且 allowNested = true,这可能会永远运行它可能会尝试生成具有无限深度的对象。
    猜你喜欢
    • 2014-05-13
    • 1970-01-01
    • 1970-01-01
    • 2020-09-22
    • 2019-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多