L'organisation la plus puissante, le mécanisme de crochet de cadre d'automatisation de l'interface HttpRunner en pratique, un article sur le haut débit...


Préface

Pour les tests automatisés utilisant Python combinés avec le framework Unittest, sachez que dans Unittest, il existe deux méthodes : setUp() et tearDown(), qui sont des pré- et post-opérations.

Habituellement, setUp() est principalement utilisé pour la préparation des tests, tandis que TearDown() est principalement utilisé pour le nettoyage des données après les tests.

Dans HttpRunner, nous pouvons implémenter setUp() et TearDown() via le mécanisme de hook.

scénarios de test

Nous utiliserons une interface de connexion pour illustrer. L'exemple complet de format YAML est le suivant :

- config:
    name: login test
    request:
      base_url: http://api.nnzhp.cn

- test:
    name: login case 1
    request:
      url: /api/user/login
      method: POST
      headers:
        Content-Type: application/x-www-form-urlencoded
        User-Agent: Fiddler
      data:
        username: test1010
        passwd: aA123456
    validate:
      - eq: [status_code, 200]
      - eq: [content.error_code, 0]

- test:
    name: login case 2
    request:
      url: /api/user/login
      method: POST
      headers:
        Content-Type: application/x-www-form-urlencoded
        User-Agent: Fiddler
      data:
        username: test1010
        passwd: aA123456
    validate:
      - eq: [status_code, 200]
      - eq: [content.error_code, 0]

Pour la définition de la fonction hook,nous l'écrivons généralement dans debugtalk.py, puis appelons directement la fonction hook dans le scénario de test.Par exemple, je fais les préparations suivantes dans debugtalk.py :

def hook_setup():
    print("开始--------hook_setup")

def hook_teardown():
    print("结束--------hook_teardown")

Utiliser des hooks dans la configuration

Si vous utilisez le mécanisme de hook dans HttpRunner, les mots-clés setup_hooks et teardown_hooks seront utilisés et ne seront exécutés qu'une seule fois dans le cas d'utilisation actuel de YAML/JSON.

setup_hooks : déclenche la fonction hook avant que l'ensemble du cas d'utilisation ne commence à s'exécuter, principalement utilisé pour le travail de préparation.
Teardown_hooks : la fonction hook est déclenchée après l'exécution de l'intégralité du cas d'utilisation, principalement utilisée pour le nettoyage après les tests.

Introduisez hook dans la configuration et modifiez-le comme suit :

- config:
    name: login test
    request:
      base_url: http://api.nnzhp.cn
    setup_hooks:
        - ${
    
    hook_setup()}
    teardown_hooks:
        - ${
    
    hook_teardown()}

Ensuite, exécutez le cas d'utilisation et obtenez les résultats suivants :

E1

D'après l'exécution du cas d'utilisation ci-dessus, nous pouvons voir qu'un total de 2 cas d'utilisation ont été exécutés, et hook_setup() et hook_teardown() dans debugtalk.py n'ont été exécutés qu'une seule fois. En effet, dans la configuration, la portée du mécanisme de hook est l'ensemble du cas d'utilisation de YAML.

Utiliser des hooks dans les tests

En test, nous pouvons également utiliser les mots-clés setup_hooks et teardown_hooks. Ici, sa portée est pour le test en cours. Si nous avons plusieurs tests, il sera exécuté plusieurs fois.

setup_hooks : exécute la fonction hook avant d'envoyer la requête HTTP, principalement utilisée pour le travail de préparation ; elle peut également prétraiter le contenu de la requête.

Teardown_hooks : exécute la fonction hook après l'envoi de la requête HTTP, principalement utilisée pour le nettoyage après les tests ; elle peut également modifier la réponse, comme le cryptage et le déchiffrement.

Nous pouvons ajouter la fonction de transmission de paramètres à la fonction dans debugtalk.py, et simplement la modifier comme suit :

def hook_setup(request=""):
    print("开始--------hook_setup")
    print("request请求:{}".format(request))

def hook_teardown(response=""):
    print("结束--------hook_teardown")
    print("response响应:{}".format(response))

Nous pouvons imprimer et traiter la requête et la réponse ici, puis introduire des hooks respectivement dans les deux tests, comme suit :

- config:
    name: login test
    request:
      base_url: http://api.nnzhp.cn

- test:
    name: login case 1
    省略部分内容
    setup_hooks:
        - ${
    
    hook_setup($request)}
    teardown_hooks:
        - ${
    
    hook_teardown($response)}
    省略部分内容

- test:
    name: login case 2
    省略部分内容
    setup_hooks:
        - ${
    
    hook_setup($request)}
    teardown_hooks:
        - ${
    
    hook_teardown($response)}
    省略部分内容

À ce stade, nous exécutons à nouveau le cas d’utilisation et obtenons les résultats suivants :

E2

En comparant les résultats précédents, nous pouvons constater que les setup_hooks et Teardown_hooks du test sont destinés à un seul test.

Choses à noter

Lorsque nous utilisons le mécanisme de hook, nous devons prêter attention à une chose. Dans le test ci-dessus, nous avons utilisé des teardown_hooks, qui sont exécutés avant de renvoyer le résultat final. Nous ne pouvons pas transmettre les données extraites du résultat de la réponse en tant que paramètre à hook_teardown. fonction.

Nous devons simplement modifier le cas d'utilisation de YAML et apporter les modifications suivantes au deuxième test :

- test:
    name: login case 2
    省略部分内容
    extract:
      - sign: content.login_info.sign
    setup_hooks:
        - ${
    
    hook_setup($request)}
    teardown_hooks:
        - ${
    
    hook_teardown($sign)}
    省略部分内容

Nous extrayons le signe dans le résultat renvoyé via extract, le transmettons à hook_teardown(), puis exécutons le cas d'utilisation.

E3

Le résultat ci-dessus nous indique que le paramètre sign est introuvable, car teardown_hooks est traité avant le retour des données finales, tandis que l'opération d'extraction est traitée après le retour des données.

Ce qui suit est le diagramme de système d'architecture de connaissances d'apprentissage d'ingénieur de tests logiciels le plus complet en 2023 que j'ai compilé.

1. Programmation Python de l'entrée à la maîtrise

Veuillez ajouter une description de l'image

2. Mise en œuvre pratique de projets d'automatisation d'interface

Veuillez ajouter une description de l'image

3. Combat réel du projet d'automatisation Web

Veuillez ajouter une description de l'image

4. Mise en œuvre pratique du projet d'automatisation des applications

Veuillez ajouter une description de l'image

5. CV des fabricants de premier rang

Veuillez ajouter une description de l'image

6. Tester et développer le système DevOps

Veuillez ajouter une description de l'image

7. Outils de tests automatisés couramment utilisés

Veuillez ajouter une description de l'image

8. Test de performances du JMeter

Veuillez ajouter une description de l'image

9. Résumé (petite surprise à la fin)

Allumez la passion, surmontez les obstacles et luttez pour poursuivre vos rêves. N'ayez pas peur des difficultés, persévérez et utilisez vos efforts pour peindre un tableau glorieux. Croyez en votre estime de soi et mettez les voiles. Chaque lutte est le moteur de la croissance. Tant que vous avez du courage, vous créerez sûrement votre propre vie brillante.

Gardez les pieds sur terre, poursuivez vos rêves et récoltez le parfum de la vie à travers la lutte. Relevez les défis, dépassez-vous et écrivez courageusement un chapitre glorieux. Croyez en vos propres capacités, brûlez votre enthousiasme, éclairez la voie à suivre avec de la sueur et un travail acharné et réalisez un avenir glorieux.

Surmonter les obstacles, rechercher l’excellence et lutter sont le chemin de la réussite personnelle. Avancez courageusement, persévérez et utilisez votre sueur pour créer une scène glorieuse. Croyez aux possibilités infinies et ayez foi.

Je suppose que tu aimes

Origine blog.csdn.net/m0_60054525/article/details/132189600
conseillé
Classement