Ich denke, es gibt verschiedene Softwaretests, aber meiner Erfahrung nach war die Methode, Protokolle aus dem Terminal zu extrahieren (z. B. seriell für das Netzwerk oder integriert) und sie zu betrachten, um ein Urteil zu fällen, üblich. Die Testergebnisse sind also wie in Excel. Es ist wie ein sicheres Excel ...
Es scheint, dass jede Skriptsprache gut darin ist, Protokolle zu analysieren und zu beurteilen. Danach werde ich das Ergebnis eintragen, aber wenn ich mich frage, was damit passiert ist, gibt es in Python eine Bibliothek namens openpyxl, mit der Sie sie bedienen können. In meinem Fall ist es auch nicht notwendig, alles mit openpyxl zu generieren. Ich denke, ich werde das Format und Design mit der GUI machen und eine Skriptperson die erforderlichen Daten schreiben lassen.
Dieses Mal habe ich leicht recherchiert, wie man so etwas macht, und eine Probe gemacht, also werde ich sie einschließlich der Bedeutung des Memorandums enthüllen. Ich hoffe, es wird für diejenigen hilfreich sein, die versuchen, Excel zu betreiben.
Ich werde Excel verwenden, also habe ich diesmal Windows verwendet. Ich habe den Vorgang in der folgenden Umgebung bestätigt.
Für die Grundoperation kann es hilfreich sein, nur die folgende Formel zu betrachten. https://openpyxl.readthedocs.io/en/default/
Auch der folgende Artikel von Qiita war sehr hilfreich. Vielen Dank. http://qiita.com/tftf/items/07e4332293c2c59799d1
Als grobe Bewertung konnte ich es ohne Beschwerden bedienen, solange es darum ging, ein Blatt auszuwählen, Informationen über Row und Colomn zu erhalten und im Gegenteil eine Zeichenkette zu schreiben.
Die Installation kann mit der Standard-Pip-Installation openpyxl erfolgen, solange Sie eine Zeichenfolge wie diese ausführen. Wenn Sie auch Bilddateien verarbeiten möchten, scheint sich die Installationsmethode zu ändern. Ich denke, Sie sollten sich auf die oben angegebene offizielle URL beziehen.
Wenn Sie sich mit Zeichenketten befassen, ist es möglicherweise besser, u "Zeichenkette" und "Zeichen" auf der Benutzerseite richtig zu verwenden (ich denke, dass dies je nach Situation usw. unterschiedlich sein kann, aber dieses Mal werden wir basierend darauf fortfahren Ich habe).
Diesmal habe ich versucht, ein solches Blatt als Beispiel zu verwenden.
Auf dieser Grundlage möchte ich das Protokoll analysieren, das Testergebnis beurteilen und das Ergebnis eingeben. Der Punkt ist __ "Fügen Sie das Ergebnis an der entsprechenden Stelle in Spalte G hinzu" __. Ich werde den Beispielcode später verfügbar machen, aber wenn ich den Beispielcode ausführe,
(Obwohl es einen Tsukkomi gibt, bei dem das normale Schließsystem versagt oder verborgen ist, w)
Wenn Sie Zeile und Spalte direkt angeben, endet dies natürlich in zwei Zeilen, aber der Code ist (nur) etwas genialer.
Dieses Mal habe ich versucht, die Idee zu codieren, zu entscheiden, welches Ergebnis in "API- und Testinhalte" aufgenommen werden soll. Zu diesem Zweck habe ich Code namens test_excel geschrieben, der die folgende API bereitstellt. Es ist weniger als.
#!/usr/bin/env python
# -*- coding: shift-jis -*-
#Excel-bezogene Operations-API
import sys
import openpyxl as px
#
#Bitte ändern Sie diese Parameter entsprechend dem Material.
#
#SPALTE Wie viel zu lecken beim Lecken
EXCEL_END_OF_COLUMN = "Z"
#Wie weit schaust du von oben, wenn du nach TITEL suchst?
EXCEL_END_OF_ROW_TITLE = 20
#Wie weit schauen Sie bei der Suche nach Artikeln von oben?
EXCEL_END_OF_ROW_ITEM = 30
class TestExcel:
#Geben Sie beim Generieren der Klasse den Namen der Excel-Datei an.
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_Wählen Sie das Namensblatt als Verarbeitungsziel aus.
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
#Spalte mit dem durch name angegebenen Namen(A,B,...)Kehrt zurück.
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
#Mehrere Zeilen(1,2,3...)Ruft den Bereich der Elemente ab, die durch Kombinieren erstellt wurden.
#Rückgabewerte sind Minimum und Maximum+Es ist 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
#Angegebene Zeile,Schreiben Sie Wertdaten in die Spalte.
def write(self, colomn, row, value):
self.sheet[colomn + str(row)] = value
#Die ursprüngliche Excel-Datei wird von Genji A aktualisiert.
def save(self):
self.workbook.save(self.filename)
#EOF
Das Verhalten jeder API ist wie folgt.
API | Bewegung |
---|---|
err_print | Fehlermeldung anzeigen. Annahme des internen Gebrauchs |
select_sheet | Wählen Sie das zu verarbeitende Blatt aus |
get_column | Spalte mit dem angegebenen Namen (A.,B,...) Ist zurück gekommen. Dies ist sich bewusst, dass die Spalte des Elementnamens über der Tabelle angezeigt wird. |
get_multi_row_data | Wenn mehrere Zeilen kombiniert werden, berechnen Sie den Bereich. Im Beispiel gilt die API dafür |
write | Angegebene Zeile,Schreiben Sie eine Zeichenfolge in die Spalte. |
save | Aktualisieren Sie die Excel-Datei (andernfalls werden die Änderungen nicht in Excel übernommen) |
Die Parameter haben folgende Rollen: Nun, es tut mir leid, dass ich es richtig mache. Ich denke, dass EXCEL_END_OF_ROW_ITEM weiter unten gemacht werden soll.
Parameter | Rolle |
---|---|
EXCEL_END_OF_COLUMN | Spalte Mit anderen Worten, geben Sie an, wie weit beim seitlichen Lecken verfolgt werden soll |
EXCEL_END_OF_ROW_TITLE | get_Wie weit von oben zu suchen, wenn in einer Spalte gesucht wird |
EXCEL_END_OF_ROW_ITEM | get_multi_row_Wie weit von der Suche nach Daten von oben |
Auch wenn ich nicht gut im Codieren bin, ist es ein einfacher Prozess. Wenn Sie also die URL und den Code des offiziellen oder zitierten Artikels vergleichen, können Sie den Prozess bis zu einem gewissen Grad verstehen. In diesem Fall ist get_multi_row_data ziemlich schrecklich, aber der Punkt ist, dass der Ort, an dem Sie treffen, der kleinste ist. Markieren Sie ihn mit und drehen Sie ihn dann, bis er nicht None ist, und den Ort, an dem er nicht None ist (oder bis zum Ende None war). Es fühlt sich wie das Maximum an.
Ich frage mich, ob dieser Bereich ohne große Abhängigkeit vom Blatt verwendet werden kann.
Der Code zum Betreiben des Beispiel-Excel mit test_excel lautet wie folgt.
#!/usr/bin/env python
# -*- coding: shift-jis -*-
# test_excel.App, die py verwendet, um die Ergebnisse des relevanten Excel auszufüllen
from datetime import datetime
from test_excel import TestExcel
#Name des Tabellenelements, Name der Test-API, Name des Tests und Spalte(A,B,C,..)Wenn Sie setzen
#Zeile des entsprechenden Elements (1,2,3..) Ist zurück gekommen.
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
#
#Beispiel für eine Excel-Operation
#In Begleitung einer Saitenmanipulation"ascii"、u"Prüfung"Es wird davon ausgegangen, dass der Anrufer es ordnungsgemäß verwendet.
#
if __name__ == "__main__":
filename = "API-Testbeispiel.xlsx"
#Excel-Initialisierung
excel = TestExcel(filename)
#Blattauswahl
excel.select_sheet(u"API-Prüfung")
#Erkennt Spalten, die dem Element entsprechen
naiyou_column = excel.get_column(u"Inhalt des Tests")
print "Testinhaltsspalte=", naiyou_column
kekka_column = excel.get_column(u"Ergebnis")
print "Ergebnisspalte=", kekka_column
#Extrahieren Sie die Testinformationen und beschreiben Sie die Ergebnisse(1)
test_koumokumei = "API"
test_api = "sample_open(char *name)"
test_name = u"Wieder öffnen"
test_row = get_test_row(excel, test_koumokumei, test_api, naiyou_column, test_name)
result = u"Erfolg"
excel.write(kekka_column, test_row, result)
print "API:", test_api, "Inhalt des Tests:", test_name, " =", test_row, "Ergebnis:", result
#Extrahieren Sie die Testinformationen und beschreiben Sie die Ergebnisse(2)
test_api = "sample_close(void)"
test_name = u"Normales System"
test_row = get_test_row(excel,test_koumokumei, test_api, naiyou_column, test_name)
result = u"Fehler"
excel.write(kekka_column, test_row, result)
print "API:", test_api, "Inhalt des Tests:", test_name, " =", test_row, "Ergebnis:", result
#aktualisieren
excel.save()
print "complete."
#EOF
In diesem Fall muss anhand des API-Namens und des Testinhalts nach dem relevanten Speicherort gesucht werden. Column kann sofort mit get_column von test_excel eingefügt werden, Row erfordert jedoch AND von API-Namen und Testnamen. Es wird von der Funktion __get_test_row __ verarbeitet. Der Prozess ist wie folgt.
Die Idee ist dann, dass Sie Zeile und Spalte angeben und schreiben sollten.
In der Hauptsache wird beschrieben, wie das Blatt "API-Test" von "API-Test sample.xlsx" verarbeitet wird. Es wird davon ausgegangen, dass die in der obigen Abbildung gezeigte Tabelle dort geschrieben ist. Die folgende Verarbeitung wird also durchgeführt.
Wenn Sie diese Python tatsächlich ausführen, wird die folgende Meldung angezeigt und das Ergebnis in Excel angezeigt.
API-Prüfung ausgewählt.
Testinhaltsspalte= D
Ergebnisspalte= G
API: sample_open(char *name)Inhalt des Tests:Wieder öffnen=4 Ergebnisse:Erfolg
API: sample_close(void)Inhalt des Tests:Normales System=7 Ergebnisse:Fehler
complete.
Wenn Sie also den API-Namen und den Testinhalt angeben, können Sie den Zielspeicherort finden. Ich suche es, indem ich es lecke, also habe ich das Gefühl, dass ich damit umgehen kann, selbst wenn ich die Anordnung von Excel ein wenig ändere. Wie bei anderen Skripten ist die Protokollbeurteilung eine Spezialität von Python. Wenn Sie es diesmal mit der Klasse test_excel kombinieren, kann es ohne Erlaubnis ausgefüllt werden (sollte).
Ich habe es unten benutzt. Vielen Dank für die Bereitstellung der wunderbaren Software.
das ist alles.