2017-09-15 3 views
1

Ma question est que lorsque je lancewrk l'exécution du script Lua

wrk -d10s -t20 -c20 -s /mnt/c/xxxx/post.lua http://localhost:xxxx/post 

le script Lua qui est exécutée une seule fois? Il mettra seulement un élément dans la base de données à l'URL.

-- example HTTP POST script which demonstrates setting the 
-- HTTP method, body, and adding a header 
math.randomseed(os.time()) 
number = math.random() 
wrk.method = "POST" 
wrk.headers["Content-Type"] = "application/json"   
wrk.body = '{"name": "' .. tostring(number) .. '", "title":"test","enabled":true,"defaultValue":false}' 

est-il un moyen de faire créer la variable « nombre » de manière dynamique et continuer à ajouter de nouveaux éléments dans la base de données jusqu'à ce que la commande « wrk » a terminé son test? Ou qu'il continuera à exécuter le script pendant la durée du test créant et insérant de nouvelles variables 'nombre' dans 'wrk.body'? Excuses Je n'ai littéralement regardé que Lua pendant quelques heures.

Merci

+0

Numéro Remplacez '= math.random' avec' = nombre math.random() '' sinon tous les number's seront la même valeur (et ne sera pas un nombre à tous) –

+0

Yep merci maintenant avoir le numéro = math.random (math.randomseed (os.time())) – dawson

+0

'math.randomseed (os.time())' ne doit être exécuté qu'une seule fois! –

Répondre

0

Lorsque vous faites

number = math.random 

vous n'êtes pas à la mise en number un nombre aléatoire, vous définissez il égale à la fonction math.random. Pour définir la variable à la valeur retournée par la fonction, cette ligne devrait lire

number = math.random() 

Vous devrez peut-être mettre une graine aléatoire (avec la fonction math.randomseed() et votre choix d'un argument approprié variable - le temps du système est commun) pour éviter que math.random() donne le même résultat chaque fois que le script est exécuté. Cela devrait être fait avant le premier appel à math.random. Comme le script est court, le temps système n'est probablement pas un bon choix de graine ici (le script va beaucoup plus vite que la valeur de os.time() changements, donc l'exécuter plusieurs fois immédiatement après l'autre donne les mêmes résultats à chaque fois). La lecture de quelques octets à partir de/dev/urandom devrait donner de meilleurs résultats.

Vous pouvez aussi simplement utiliser/dev/urandom pour générer un nombre directement, plutôt que de l'alimenter en math.random en tant que germe. Comme dans le code ci-dessous, tiré de this answer. Ce n'est pas un générateur de nombres aléatoires sécurisé, mais pour vos besoins ce serait bien.

urand = assert (io.open ('/dev/urandom', 'rb')) 
rand = assert (io.open ('/dev/random', 'rb')) 

function RNG (b, m, r) 
    b = b or 4 
    m = m or 256 
    r = r or urand 
    local n, s = 0, r:read (b) 

    for i = 1, s:len() do 
    n = m * n + s:byte (i) 
    end 

    return n 
end 
+0

Salut, oui je me suis rendu compte que quand j'imprimais la valeur, l'ai changé maintenant dans la question. Ma question est plus à propos est-il possible que pendant la durée de la commande 'wrk' en cours d'exécution, il continuera à ré-exécuter le script générant et insérant des valeurs différentes à chaque fois? – dawson

+0

Les valeurs dépendent de la graine. Comme il s'agit d'un script court, l'heure système peut ne pas être assez granulaire pour basculer entre les exécutions, ce qui vous permet d'obtenir la même graine (et donc les mêmes nombres aléatoires) chaque fois que le script s'exécute. Vous avez juste besoin de trouver une source différente de graines aléatoires. Essayez de lire quelque chose à partir de/dev/urandom. –

+0

ok merci de le faire. – dawson