Je pense qu'il existe divers tests logiciels, mais d'après mon expérience, la méthode d'extraction des journaux du terminal (tels que série pour réseau ou intégré) et de les examiner pour faire un jugement était courante. Ainsi, les résultats des tests sont comme Excel. C'est comme un Excel sûr ...
Il semble que tout langage de script est bon pour analyser et juger les journaux. Après cela, je vais remplir le résultat, mais quand je me demande ce qui est arrivé à cela, il existe une bibliothèque appelée openpyxl en Python, et je peux l'utiliser avec cela. De plus, dans mon cas, il n'est pas nécessaire de tout générer avec openpyxl. Je pense que je vais faire le format et la conception avec l'interface graphique, et demander à un scripteur d'écrire les données nécessaires.
Cette fois, j'ai légèrement recherché comment faire une telle chose et ai fait un échantillon, donc je vais l'exposer, y compris le sens du mémorandum. J'espère que cela sera utile à ceux qui essaient d'utiliser Excel.
J'utiliserai Excel, j'ai donc utilisé Windows cette fois. J'ai confirmé l'opération dans l'environnement suivant.
Pour le fonctionnement de base, il peut être très utile de simplement regarder la formule suivante. https://openpyxl.readthedocs.io/en/default/
En outre, l'article suivant de Qiita a été très utile. Merci beaucoup. http://qiita.com/tftf/items/07e4332293c2c59799d1
En guise d'évaluation grossière, j'ai pu le faire fonctionner sans aucune gêne, du moment qu'il s'agissait de sélectionner une feuille, d'acquérir des informations sur Row et Colomn, et d'écrire une chaîne de caractères au contraire.
L'installation peut être effectuée avec le standard pip install openpyxl tant que vous faites une chaîne de caractères comme celle-ci. Si vous souhaitez également gérer les fichiers image, la méthode d'installation semble changer, je pense donc que vous devriez vous référer à l'URL officielle publiée ci-dessus.
De plus, lorsqu'il s'agit de chaînes de caractères, il peut être préférable d'utiliser correctement u "chaîne de caractères" et "char" du côté utilisateur (je pense que cela peut différer en fonction de la situation, etc., mais cette fois, nous allons procéder sur cette base J'ai).
Cette fois, j'ai essayé d'utiliser une telle feuille comme exemple.
Sur cette base, je souhaite analyser le journal, juger le résultat du test et saisir le résultat. Le point est __ "Ajoutez le résultat à l'endroit approprié dans ColumnG" __. J'exposerai l'exemple de code plus tard, mais lorsque j'exécuterai l'exemple de code,
(Bien qu'il y ait un tsukkomi que le système normal de fermeture échoue ou est caché, w)
Bien sûr, si vous spécifiez directement Row et Column, cela se terminera par deux lignes, mais le code est (seulement) un peu plus ingénieux.
Cette fois, j'ai essayé de coder l'idée de décider quel résultat inclure dans "API et contenu de test". Pour ce faire, j'ai écrit un code appelé la classe test_excel qui fournit l'API suivante. C'est moins que.
#!/usr/bin/env python
# -*- coding: shift-jis -*-
#API d'exploitation liée à Excel
import sys
import openpyxl as px
#
#Veuillez modifier ces paramètres de manière appropriée en fonction du matériau.
#
#COLONNE Combien lécher en léchant
EXCEL_END_OF_COLUMN = "Z"
#À quelle distance regardez-vous du haut lorsque vous recherchez TITLE?
EXCEL_END_OF_ROW_TITLE = 20
#À quelle distance regardez-vous du haut lorsque vous recherchez des articles?
EXCEL_END_OF_ROW_ITEM = 30
class TestExcel:
#Spécifiez le nom du fichier Excel lors de la génération de la classe.
def __init__(self, filename):
self.filename = filename
self.workbook = px.load_workbook(filename)
self.sheet = None
def err_print(self, text):
print "\r\nERROR!:", text, "\r\n"
# select_Sélectionnez la feuille de nom comme cible de traitement.
def select_sheet(self, select_name):
sheetnames = self.workbook.get_sheet_names()
for name in sheetnames:
sheet_name = name
if select_name == sheet_name:
self.sheet = self.workbook[name]
print "%s selected." % select_name
return True
self.err_print("%s not found." % select_name)
return False
#Colonne avec le nom spécifié par nom(A,B,...)Retour.
def get_column(self, name):
row_list = [int(i) for i in range(1, EXCEL_END_OF_ROW_TITLE)]
column_list = [chr(i) for i in range(ord('A'), ord(EXCEL_END_OF_COLUMN)+1)]
for row in row_list:
for column in column_list:
pos = column + str(row)
value = self.sheet[pos].value
if value == name:
return column
self.err_print( "%s not found." % name)
return None
#Plusieurs lignes(1,2,3...)Obtient la plage d'éléments créés par combinaison.
#Les valeurs de retour sont minimales et maximales+C'est 1.
def get_multi_row_data(self, row_title, row_name):
hit = False
column = self.get_column(row_title)
if column == None:
self.err_print( "%s not found." % row_name)
return None, None
row_list = [int(i) for i in range(1, EXCEL_END_OF_ROW_ITEM)]
for row in row_list:
pos = column + str(row)
value = self.sheet[pos].value
if value != None:
if hit == True:
api_max = row
return api_min, api_max
if value == row_name and hit == False:
hit = True
api_min = row
if hit == True:
api_max = row
return api_min, api_max
else:
self.err_print( "%s not found." % row_name)
return None, None
#Ligne spécifiée,Écrivez les données de valeur dans la colonne.
def write(self, colomn, row, value):
self.sheet[colomn + str(row)] = value
#Le fichier Excel d'origine sera mis à jour par Genji A.
def save(self):
self.workbook.save(self.filename)
#EOF
Le comportement de chaque API est le suivant.
API | mouvement |
---|---|
err_print | Afficher un message d'erreur. En supposant une utilisation interne |
select_sheet | Sélectionnez la feuille à traiter |
get_column | Colonne avec le nom spécifié (A,B,...) Est retourné. Ceci est conscient de l'obtention de la colonne du nom de l'élément au-dessus du tableau. |
get_multi_row_data | Si plusieurs lignes sont combinées, calculez la plage. Dans l'exemple, l'API s'applique à cela |
write | Ligne spécifiée,Écrivez une chaîne dans Column. |
save | Mettez à jour le fichier Excel (sinon les modifications ne seront pas reflétées dans Excel) |
Les paramètres ont les rôles suivants: Eh bien, je suis désolé de le faire correctement. Je pense que EXCEL_END_OF_ROW_ITEM est censé être fait plus bas.
Paramètres | rôle |
---|---|
EXCEL_END_OF_COLUMN | Colonne En d'autres termes, spécifiez la distance à suivre lors du léchage latéral |
EXCEL_END_OF_ROW_TITLE | get_À quelle distance rechercher du haut lors de la recherche dans la colonne |
EXCEL_END_OF_ROW_ITEM | get_multi_row_À quelle distance rechercher du haut lors de la recherche par données |
Même si je ne suis pas doué pour le codage, c'est un processus simple, donc si vous comparez l'URL et le code de l'article officiel ou cité, vous pouvez comprendre le processus dans une certaine mesure. Parmi eux, get_multi_row_data est assez terrible, mais le fait est que l'endroit où vous avez frappé est le plus petit, marquez-le avec, puis tournez-le jusqu'à ce qu'il ne soit pas None (ou il était None jusqu'à la fin) Cela ressemble au maximum.
Je me demande si cette zone peut être utilisée sans trop dépendre de la feuille.
Le code pour faire fonctionner l'exemple Excel à l'aide de test_excel est le suivant.
#!/usr/bin/env python
# -*- coding: shift-jis -*-
# test_excel.Application qui utilise py pour remplir les résultats de l'Excel pertinent
from datetime import datetime
from test_excel import TestExcel
#Nom de l'élément de table, nom de l'API de test, nom du test et colonne(A,B,C,..)Quand tu mets
#Ligne de l'élément correspondant (1,2,3..) Est retourné.
def get_test_row(excel, test_koumokumei, test_apiname, siken_naiyou_column, siken_naiyou_name):
api_min, api_max = excel.get_multi_row_data(test_koumokumei, test_apiname)
if api_min == None:
return None
for row in range(api_min, api_max):
pos = siken_naiyou_column + str(row)
value = excel.sheet[pos].value
if value == siken_naiyou_name:
return row
print("\r\nerror::%s found. but %s not found.\n\n" % (test_apiname, siken_naiyou_name))
return None
#
#Exemple d'opération Excel
#Lorsqu'il est accompagné d'une manipulation de cordes"ascii"、u"tester"On suppose que l'appelant l'utilisera correctement.
#
if __name__ == "__main__":
filename = "Exemple de test API.xlsx"
#excel initialisation
excel = TestExcel(filename)
#Sélection de feuilles
excel.select_sheet(u"Examen API")
#Détecte la colonne correspondant à l'élément
naiyou_column = excel.get_column(u"contenu du test")
print "Colonne de contenu de test=", naiyou_column
kekka_column = excel.get_column(u"résultat")
print "Colonne de résultat=", kekka_column
#Extraire les informations de test et décrire les résultats(1)
test_koumokumei = "API"
test_api = "sample_open(char *name)"
test_name = u"Rouvrir"
test_row = get_test_row(excel, test_koumokumei, test_api, naiyou_column, test_name)
result = u"Succès"
excel.write(kekka_column, test_row, result)
print "API:", test_api, "contenu du test:", test_name, " =", test_row, "résultat:", result
#Extraire les informations de test et décrire les résultats(2)
test_api = "sample_close(void)"
test_name = u"Système normal"
test_row = get_test_row(excel,test_koumokumei, test_api, naiyou_column, test_name)
result = u"Échec"
excel.write(kekka_column, test_row, result)
print "API:", test_api, "contenu du test:", test_name, " =", test_row, "résultat:", result
#mise à jour
excel.save()
print "complete."
#EOF
Dans ce cas, il est nécessaire de rechercher l'emplacement pertinent à partir du nom de l'API et du contenu de test. La colonne peut être importée immédiatement avec get_column de test_excel, mais Row nécessite AND du nom d'API et du nom du test. Il est traité par la fonction __get_test_row __. Le processus est le suivant.
Ensuite, l'idée est que vous devez spécifier Row et Column et écrire.
Dans l'ensemble, il est décrit de traiter la feuille "API test" de "API test sample.xlsx". On suppose que le tableau présenté dans la figure ci-dessus y est écrit. Ainsi, le traitement suivant est effectué.
Lorsque vous exécutez réellement ce python, le message suivant apparaîtra et le résultat sera reflété dans Excel.
Examen API sélectionné.
Colonne de contenu de test= D
Colonne de résultat= G
API: sample_open(char *name)contenu du test:Rouvrir=4 résultats:Succès
API: sample_close(void)contenu du test:Système normal=7 résultats:Échec
complete.
Ainsi, si vous spécifiez le nom de l'API et le contenu du test, vous pouvez trouver l'emplacement cible. Je le cherche en le léchant, donc je sens que je peux le gérer même si je change un peu la disposition d'Excel. Comme pour les autres scripts, le jugement de journal est une spécialité de Python, donc en le combinant avec la classe test_excel cette fois, il pourra se remplir sans permission (devrait).
Je l'ai utilisé ci-dessous. Merci d'avoir fourni le merveilleux logiciel.
c'est tout.
Recommended Posts