Publier vos résultats en studio de test dans Slack
Mettons-nous à la tâche et commençons à construire notre extension Test Studio.
Notre prochaine étape devrait être l’ajout de dépendances au projet. Il y a deux dépendances auxquelles nous devons nous référer.
Le premier est Newtonsoft.Json. Vous pouvez l'ajouter en tant que bibliothèque de nugets à partir du gestionnaire Visual Studio NuGet. Assurez-vous simplement d'installer la version 10.0.3.
La deuxième dépendance est ArtOfTest.WebAii.Design.DLL. Pour l'ajouter, faites un clic droit sur les références du projet et sélectionnez "Ajouter une référence …". Sélectionnez "Parcourir" et naviguez jusqu'à votre dossier bin de Test Studio (il se trouve par défaut dans% ProgramFiles% Progress Test Studio Bin)
Après avoir ajouté les dépendances nécessaires, nous sommes prêts à coder notre extension. Commençons par l'implémentation de l'interface d'extension de temps d'exécution de Test Studio. Pour ce faire, ajoutez un nouveau fichier de classe au projet et nommez-le SlackBot.cs. Cette classe doit implémenter l'interface IExecutionExtension
.
Méthode OnBeforeTestListStarted
est appelée à chaque fois avant le début de l'exécution de la liste de tests, ce qui nous permet de lire notre clé de registre, que nous avons créé plus tôt dans ce post.
Dans OnAfterTestListCompleted
nous recevons le résultat de l'exécution de la liste de tests à la fin de l'exécution. Ici, nous créons et envoyons le message Slack.
Nous devons maintenant créer des classes de données, nécessaires à la sérialisation / désérialisation. Créez un dossier dans le projet et nommez-le "Données". Ajoutez-y un nouveau fichier nommé "Message.cs":
avec Newtonsoft.Json;
avec System; espace de noms SlackBot.Data
{
de classe publique Message
{
[JsonProperty("channel")]
chaîne publique Channel {get; ensemble; }
[JsonProperty("username")]
chaîne publique Nom d'utilisateur {get; ensemble; }
[JsonProperty("text")]
chaîne publique Text {get; ensemble; }
[JsonProperty("attachments")]
Pièce jointe publique [] Pièces jointes {get; ensemble; }
}
pièce jointe de classe publique
{
[JsonProperty("fallback")]
chaîne publique Fallback {get; ensemble; }
[JsonProperty("color")]
chaîne publique Color {get; ensemble; }
[JsonProperty("pretext")]
chaîne publique Pretext {get; ensemble; }
[JsonProperty("author_name")]
chaîne publique AuthorName {get; ensemble; }
[JsonProperty("author_link")]
public Uri AuthorLink {get; ensemble; }
[JsonProperty("author_icon")]
public Uri AuthorIcon {get; ensemble; }
[JsonProperty("title")]
chaîne publique Title {get; ensemble; }
[JsonProperty("title_link")]
public Uri TitleLink {get; ensemble; }
[JsonProperty("text")]
chaîne publique Text {get; ensemble; }
[JsonProperty("fields")]
field public [] Fields {get; ensemble; }
[JsonProperty("image_url")]
public Uri ImageUrl {get; ensemble; }
[JsonProperty("thumb_url")]
public Uri ThumbUrl {get; ensemble; }
[JsonProperty("footer")]
chaîne publique Footer {get; ensemble; }
[JsonProperty("footer_icon")]
public Uri FooterIcon {get; ensemble; }
[JsonProperty("ts")]
public long Ts {get; ensemble; }
[JsonProperty("mrkdwn_in")]
chaîne publique [] Mrkdwn_in {get; ensemble; }
}
Classe publique Field
{
[JsonProperty("title")]
chaîne publique Title {get; ensemble; }
[JsonProperty("value")]
chaîne publique Value {get; ensemble; }
[JsonProperty("short")]
public bool Short {get; ensemble; }
}
}
Chaque message Slack peut avoir zéro pièce jointe ou plus et chacune de ces pièces jointes peut contenir zéro ou plusieurs champs.
Créez un fichier de classe supplémentaire dans le dossier "Données" et nommez-le. MessageCreator.cs
. Nous allons l'utiliser pour créer différents messages, en fonction du résultat. Slack permet une grande personnalisation du message. Vous pouvez en apprendre plus sur le format de message Slack ici .
Nos messages auront une pièce jointe avec deux champs: le premier champ contiendra le nom de la liste de test et le second, le résultat de l'exécution: [19659009] en utilisant ArtOfTest.WebAii.Design.Execution;
en utilisant System;
L'espace-noms SlackBot.Data
{
Classe statique MessageCreator
{
private const string GREEN = "# 7CD197" ;
private const string RED = "# F35A00";
interne statique Message GetMessage (résultat RunResult)
{
si (résultat.PassedResult)
{
retour à CreateSuccessMessage (résultat) ;
}
renvoyer CreateFailMessage (résultat);
}
statique privé Message CreateSuccessMessage (résultat RunResult)
{
var msg = nouveau Message ();
msg.Attachements = nouvelle pièce jointe [1];
Champ [] messageFields = nouveau Champ [2];
messageFields [0] = CreateHeader (résultat. Nom);
messageFields [1] = nouveau champ
{
Title = $ "Résultat",
Valeur = $ "Tous les tests sont réussis.",
Short = true
} ;
msg.Attachments [0] = new Attachment
{
Title = $ "Exécution de la liste de test effectuée.",
Couleur = VERT,
Ts = UnixTimeNow (),
Champs = messageFields
};
renvoyer msg;
}
Message statique privé CreateFailMessage (résultat RunResult)
{
var msg = nouveau message ();
msg.Attachments = nouvelle pièce jointe [1];
champ [] messageFields = nouveau champ [2] ;
messageFields [0] = CreateHeader (result.Name);
messageFields [1] = nouveau champ
{=
Title = $ "Result",
Value = $ "{result. PassedCount} / {result.AllCount} tests réussis. ",
Short = true
};
msg.Attachments [0] = nouvelle pièce jointe
{
Title = $" Exécution de la liste de tests done. ",
Couleur = ROUGE,
Ts = UnixTimeNow (),
Champs = message eFields
};
return msg;
}
Champ statique privé CreateHeader (nom de chaîne)
{
retour new Field
{
Title = $ "Liste de test ",
Value = $" {name} ",
Short = true
};
privé statique long UnixTimeNow ()
{
var timeSpan = (DateTime .UtcNow – nouveau DateTime (1970, 1, 1, 0, 0, 0));
return (long) timeSpan.TotalSeconds;
}
}
Comme dernière étape nous devons créer la classe SlackClient. Dans son constructeur, nous allons définir l'URL du point Web. Nous ajouterons une méthode supplémentaire à la classe – PostMessage
qui, comme son nom l'indique, publiera des messages pour Slack:
en utilisant Newtonsoft.Json;
en utilisant SlackBot.Data;
en utilisant
utilisant System.Collections.Specialized;
utilisant System.Net; L'espace-noms SlackBot
{
La classe publique SlackClient
{
privé luonly Uri _uri;
public SlackClient (chaîne urlWithAccessToken)
{
this._uri = new Uri (urlWithAccessToken);
}
// Poster un message à l'aide d'un objet Message
public void public void PostMessage (message message)
{
var messageJson = JsonConvert.SerializeObject (message);
en utilisant (var client = nouveau WebClient ())
{
var data = nouveau NameValueCo llection ();
data ["payload"] = messageJson;
var response = client.UploadValues (this._uri, "POST", données);
}
}
}
}
La structure finale de notre projet devrait ressembler à ceci:
Utilisation de l’extension
Nous pouvons maintenant construire notre projet. Dans Visual Studio, cliquez avec le bouton droit de la souris sur le projet et sélectionnez“ Build ”. Une fois la construction terminée, copiez SlackBot.dll et collez-le dans le dossier du plug-in Test Studio (par défaut, il se trouve dans% ProgramFiles% Progress Test Studio Bin Plugins):
Nous sommes maintenant prêts à tester notre extension. Lancez Test Studio et lancez l'une de vos listes de tests.
Et voici! Vos résultats de test sont en slack!
Intégration de vos résultats de test dans Slack
Vous avez maintenant vu à quel point il était facile d'étendre Testez Studio et intégrez-le à d'autres produits.
Si vous voulez essayer de construire cette extension ou de créer la vôtre, vous pouvez commencer une période d'essai gratuite et pleinement fonctionnelle de 30 jours:
Source link