[RUBY] Utilisez Allure pour générer des rapports de test élégants, indépendants du langage et du framework!

Aperçu

Présentation d'Allure sur la base de la traduction du document officiel.

À propos d'Allure

En parlant de frameworks de test, il existe de nombreux outils géniaux disponibles dans différentes langues, tels que JUnit`` RSpec`` jest`` pytest`.

Cependant, de nombreux outils n'ont pas la capacité de générer des rapports de test visuellement étonnants.

Allure le complète avec OSS pour générer des rapports d'exécution de test faciles à comprendre pour tous les membres de l'équipe, indépendamment du langage ou du cadre. est.

démo

Voir c'est croire. Ouvrons le rapport de démonstration (https://demo.qameta.io/allure/).

スクリーンショット 2020-05-16 2.46.02.png

Vous pouvez voir que le rapport d'exécution de test peut être visualisé graphiquement et interactivement sous de nombreux angles.

Encore une fois, le langage et le cadre ne sont pas pertinents pour ces générations. Vous pouvez utiliser le code de test actuellement en fonctionnement tel qu'il provient de JUnit, RSpec, jest ou pytest.

Comment faire un rapport

Allure est basé sur la sortie de la «xUnit» générale (terme collectif pour les cadres de tests unitaires) plus des données supplémentaires.

Le rapport de test est généré au cours des deux étapes suivantes.

** 1. Exécution du test **

Lorsque divers frameworks de test exécutent des tests, une bibliothèque légère appelée ʻadapter` génère des informations sur les tests exécutés au format XML ou JSON.

L'adaptateur est officiellement fourni pour «Java», «PHP», «Ruby», «Python», «Scala» et «C #», et chacun prend en charge les principaux frameworks de test.

** 2. Génération de rapports **

Une fois le test terminé, un rapport au format HTML sera généré sur la base des données générées.

La génération de rapport peut être effectuée à partir de l'outil CLI.

Exemples d'utilisation par divers frameworks

Exemple d'exécution avec RSpec (Ruby)

Pour plus de commodité, cet article utilise RSpec comme exemple, mais de nombreux langages et frameworks peuvent être suivis dans les mêmes étapes.

Installation de la CLI

Installez ʻallure` lui-même, un outil CLI pour générer des rapports. Puisque nous utilisons un Mac cette fois, installez-le avec brew.

$ brew install allure

C'est OK si vous pouvez confirmer la version.

$ allure --version
2.13.0

$ allure --version
No Java runtime present, requesting install.

Si vous obtenez quelque chose comme ça, vous devez inclure le runtime Java.

Préparation du code de test

Cette fois, nous allons préparer un test unitaire qui vérifie le comportement de la classe Calculator comme suit.

La classe Calculator est une classe qui peut ajouter et soustraire en fonction de la valeur initiale. Un seul est intentionnellement défini pour que le test échoue.

describe Calculator do
  subject { described_class.new(initial_value) }

  describe '#ajouter un ajout' do
    context 'Lorsque la valeur initiale est 0' do
      let(:initial_value) { 0 }

      it 'Ajoutez 10 pour obtenir 10 en retour' do
        expect(subject.add(10)).to eq 10
      end
    end

    context 'Lorsque la valeur initiale est 5' do
      let(:initial_value) { 5 }

      it 'Ajoutez 10 pour obtenir 15 en retour' do
        expect(subject.add(10)).to eq 15
      end
    end
  end

  describe '#sous soustraction' do
    context 'Lorsque la valeur initiale est 0' do
      let(:initial_value) { 0 }

      #Test d'automne
      it 'Soustrayez 10 pour renvoyer 0' do
        expect(subject.sub(10)).to eq 0
      end
    end

    context 'Lorsque la valeur initiale est 30' do
      let(:initial_value) { 30 }

      it 'Soustrayez 10 pour renvoyer 20' do
        expect(subject.sub(10)).to eq 20
      end
    end
  end
end

Lorsque rpsec est exécuté normalement, c'est comme suit

$ bundle exec rspec spec/sample_spec.rb -f d
Calculator
  #ajouter un ajout
Lorsque la valeur initiale est 0
Ajoutez 10 pour obtenir 10 en retour
Lorsque la valeur initiale est 5
Ajoutez 10 pour obtenir 15 en retour
  #sous soustraction
Lorsque la valeur initiale est 0
Soustrayez 10 pour renvoyer 0(FAILED - 1)
Lorsque la valeur initiale est 30
Soustrayez 10 pour renvoyer 20

Failures:

  1) Calculator#sous soustraction Lorsque la valeur initiale est 0, la soustraction de 10 renvoie 0.
     Failure/Error: expect(subject.sub(10)).to eq 0
     
       expected: 0
            got: -10
     
       (compared using ==)
     # ./sample_spec.rb:42:in `block (4 levels) in <top (required)>'

Finished in 0.11199 seconds (files took 2.06 seconds to load)
4 examples, 1 failure

Failed examples:

rspec ./sample_spec.rb:41 # Calculator#sous soustraction Lorsque la valeur initiale est 0, la soustraction de 10 renvoie 0.

Générer des données de rapport à l'aide d'un adaptateur

Lors de l'exécution de Rspec, utilisez l'adaptateur Allure pour Ruby pour générer des données pour la création de rapports.

L'adaptateur pour RSpec utilise allure-rspec.

Cette fois, ajoutez ce qui suit au Gemfile et installez-le.

gem "allure-rspec"

Chargez l'adaptateur avec spec_helper

require "allure-rspec"

Spécifiez l'adaptateur comme formateur au moment de l'exécution. Cette fois, rien n'est émis vers la sortie standard.

$ bundle exec rspec spec/sample_spec.rb -f AllureRspecFormatter

Par défaut, le répertoire reports est créé et les données de rapport sont générées avec la structure suivante.

$ tree reports/
reports/
└── allure-results
    ├── 4ee53de0-790a-0138-ab5e-3d13be3ed9ba-container.json
    ├── 4ee54750-790a-0138-ab5e-3d13be3ed9ba-container.json
    ├── 4ee54a80-790a-0138-ab5e-3d13be3ed9ba-container.json
    ├── 4ee64530-790a-0138-ab5e-3d13be3ed9ba-result.json
    ├── 4ee7fad0-790a-0138-ab5e-3d13be3ed9ba-container.json
    ├── 4ee80710-790a-0138-ab5e-3d13be3ed9ba-result.json
    ├── 4ee83ae0-790a-0138-ab5e-3d13be3ed9ba-container.json
    ├── 4ee83e90-790a-0138-ab5e-3d13be3ed9ba-container.json
    ├── 4ee84860-790a-0138-ab5e-3d13be3ed9ba-result.json
    ├── 4eefe9b0-790a-0138-ab5e-3d13be3ed9ba-container.json
    └── 4eeff800-790a-0138-ab5e-3d13be3ed9ba-result.json

1 directory, 11 files

Générer un rapport

Utilisez la sortie de données de rapport dans la section précédente pour générer un rapport avec la commande ʻallure`.

La sous-commande serve vous permet de générer un rapport localement et d'y accéder dans votre navigateur.

$ allure serve -h 0.0.0.0 ./reports/allure-results/
Generating report to temp directory...
Report successfully generated to /var/folders/3_/r5h56zzn1130yr7vkpjftqpw0000gp/T/15980098365829452874/allure-report
Starting web server...
2020-05-16 04:02:58.509:INFO::main: Logging initialized @3541ms to org.eclipse.jetty.util.log.StdErrLog
Server started at <http://0.0.0.0:57717/>. Press <Ctrl+C> to exit

Dans l'exemple ci-dessus, lorsque j'ai accédé à "0.0.0.0: 57717", j'ai pu confirmer que le rapport a été généré avec succès.

スクリーンショット 2020-05-16 4.05.59.png スクリーンショット 2020-05-16 4.05.40.png

Impressions

Comme le titre de cet article, il est très polyvalent et polyvalent car il ne dépend pas du langage et du framework, j'ai donc eu l'impression que ce serait trop pour un usage individuel.

Cela peut être une bonne idée de concevoir un test en supposant Allure dès le début, mais il semble difficile de mettre du code de test existant à moins qu'il ne soit bien structuré.

Recommended Posts

Utilisez Allure pour générer des rapports de test élégants, indépendants du langage et du framework!
Comment utiliser StringBurrer et Arrays.toString.
Comment utiliser EventBus3 et ThreadMode
Comment utiliser l'égalité et l'égalité (comment utiliser l'égalité)
J'ai testé comment utiliser le test / l'unité de Ruby et le code de Janken.
Comment utiliser OrientJS et OrientDB ensemble
Bibliothèque de tests unitaires Java Artery-Easy to use
Comment configurer et utiliser kapt
Comment utiliser les méthodes substring et substr
Comment utiliser @Builder et @NoArgsConstructor ensemble
[Java] Comment utiliser la classe FileReader et la classe BufferedReader
[Ruby] Comment utiliser la méthode gsub et la sous-méthode
Comment utiliser le contrôle segmenté et les points à noter
Comment utiliser la portée et le traitement des passes (servist)
[Java] Comment utiliser la classe Calendar et la classe Date