2
votes

comment passer des arguments spécifiques dans les commandes batch pendant les builds jenkins

J'essaie d'utiliser Jenkins pour automatiser les tests de performances avec JMeter, chaque build est un seul test JMeter et je souhaite augmenter le nombre d'utilisateurs (threads) pour chaque build Jenkins si le précédent a réussi.

J'ai configuré la majeure partie de la construction, avec le plugin SSH, je peux redémarrer Tomcat, copier catalina.out, avec des performances de publication, je peux ouvrir le fichier .jtl et déterminer si la construction a réussi.

Ce que je veux, c'est exécuter une commande batch différente pour la prochaine construction (pour augmenter le nombre d'utilisateurs (threads) et les identifiants d'utilisateurs) Par exemple:

jmeter -Jthreads = 10 -n -t C: \ TestScripts \ script.jmx -l C: \ TestScripts \ Jenkins.jtl

jmeter -Jthreads = 20 -n -t C: \ TestScripts \ script.jmx -l C: \ TestScripts \ Jenkins.jtl

jmeter -Jthreads = 30 -n -t C: \ TestScripts \ script.jmx -l C: \ TestScripts \ Jenkins.jtl ...

Y a-t-il un bon plugin jmeter, un compteur que je peux utiliser pour augmenter une variable de 10 à chaque fois:

jmeter -Jthreads =% variable1% ...

J'ai essayé de définir des variables d'environnement, puis d'incrémenter cette variable de:

"SET / A thread + = 10"

mais cela ne change pas cette variable car jenkins ouvre son propre CMD, un nouveau processus:

("cmd / c appelle C: \ WINDOWS \ TEMP \ jenkins556482303577128680.bat")


0 commentaires

4 Réponses :


0
votes

Utilisez la commande SET pour augmenter la variable threads de 10:

SET /A "threads+=10"

Ou entre guillemets doubles:

SET /A threads=threads+10


1 commentaires

Je ne sais pas si cette solution fonctionnera, car pour chaque build, Jenkins appelle un fichier bat différent. pour la première version: cmd / c appelez C: \ WINDOWS \ TEMP \ jenkins4994495302704326582.bat Et pour la seconde: cmd / c appelez C: \ WINDOWS \ TEMP \ jenkins532038471028093677.bat



0
votes

Ne connaissant pas votre configuration Jenkins, et quels plugins vous avez installés et comment exécutez-vous le test est assez difficile de trouver la meilleure solution.

La seule solution de contournement "universelle" à laquelle je puisse penser est d'écrire le nombre actuel de threads dans un fichier dans Espace de travail Jenkins et lecture de la valeur des threads du fichier lors de la prochaine exécution.

  1. Ajoutez setUp Thread Group à votre plan de test
  2. Ajoutez un JSR223 Sampler à votre groupe de discussions
  3. Mettez le Groovy code dans la zone "Script" :

    import org.apache.jmeter.threads.ThreadGroup
    import org.apache.jorphan.collections.SearchByClass
    import org.apache.commons.io.FileUtils
    
    SampleResult.setIgnore()
    
    def file = new File(System.getenv('WORKSPACE') + System.getProperty('file.separator') + 'threads.number')
    
    if (file.exists()) {
    
    
        def newThreadNum = (FileUtils.readFileToString(file, 'UTF-8') as int) + 10
        FileUtils.writeStringToFile(file, newThreadNum as String)
    
        def engine = ctx.getEngine()
        def test = org.apache.commons.lang.reflect.FieldUtils.getField(engine.getClass(), 'test', true)
        def testPlanTree = test.get(engine)
    
        SearchByClass<ThreadGroup> threadGroupSearch = new SearchByClass<>(ThreadGroup.class)
        testPlanTree.traverse(threadGroupSearch)
        def threadGroups = threadGroupSearch.getSearchResults()
        threadGroups.each {
            it.setNumThreads(newThreadNum)
        }
    } else {
        FileUtils.writeStringToFile(file, props.get('threads'))
    }
    

    Le code notera le nombre actuel de threads dans tous les Groupes de threads a > dans un fichier appelé threads.number dans Jenkins Workspace et lors des exécutions suivantes, il en lit la valeur, en ajoute 10 et la réécrit.


0 commentaires

0
votes

Pour l'instant, je crée 20 fichiers .jmx (1.jmx, 2.jmx, 3.jmx ...) chacun avec un nombre d'utilisateurs différent. et les appeler avec cette commande:

jmeter -n -t C: \ TestScripts \% BUILD_NUMBER% .jmx -l C: \ TestScripts \% BUILD_NUMBER% .jtl

le premier billd appellera 1.jmx le second 2.jmx ... ce n'est pas la meilleure méthode mais cela fonctionne pour le moment. J'essaierai vos conseils pendant le week-end quand j'aurai plus de temps.


0 commentaires

0
votes

J'ai trouvé la solution qui fonctionne pour moi, c'est plutôt joli. J'ai créé un script python qui modifie un fichier .CVS à partir duquel JMeter lit le nombre de threads et l'ID utilisateur de départ. Ce script python incrémente l'ID utilisateur de départ du nombre de threads dans le bild précédent et le nombre de threads de 10

C:\Users\mp\AppData\Local\Programs\Python\Python37-32\python.exe C:\Users\mp\AppData\Local\Programs\Python\Python37-32\rename_write_file.py

J'ai python sur mon pc et j'appelle le script dans Jenkins comme une commande Windows Bach

file = open('C:\\Users\\mp\\AppData\\Local\\Programs\\Python\\Python37-32\\eggs.csv', 'r') 
a,b=file.readlines()[0].split(",")
print(a,b)
b=int(b)
a=int(a)
b=a+b
a=a+10
print(a,b)
f = open("C:\\Users\\mp\\AppData\\Local\\Programs\\Python\\Python37-32\\eggs2.csv", "a")
f.write(str(a)+","+str(b))
f.close()

Je suis bien meilleur en python qu'en Java, donc j'ai implémenté cela en Python. Ainsi, pour chaque nouveau test, le fichier CSV à partir duquel jmeter lit les valeurs est modifié.


0 commentaires