Im vorherigen Artikel „Verwenden von Python zur Implementierung von Hochleistungstesttools (1) “ haben wir die Leistung durch Ändern des Python-Parsers optimiert, aber sie ist immer noch weit von den tatsächlichen Anforderungen entfernt. In diesem Artikel wird optimierter Code für automatisierte Tests vorgestellt.
Schema 2: Optimieren Sie den Code
Arbeiter wollen gute Dinge, sie müssen zuerst ihre Instrumente nutzen. Um den Code zu optimieren, müssen Sie zunächst den Engpass des Codes finden. Der einfachste Weg besteht darin, ihn nach Abschluss des Debuggens zu löschen. Python bietet auch viele Profiltools: Profile, CProfile, Hotshot, Pystats, aber die von diesen Tools bereitgestellten Ergebnisse sind nicht gut lesbar. Es ist nicht intuitiv genug, auf einen Blick zu erkennen, welche Funktion oder Zeile die meiste Zeit in Anspruch nimmt. Python line_profiler bietet eine solche Funktion. Sie können intuitiv erkennen, welche Zeile die meiste Zeit in Anspruch nimmt. Sie kann als „schnell, genau und rücksichtslos“ bezeichnet werden 🎜> Nach der Installation von line_profiler befindet sich schließlich eine kernprof.py im Verzeichnis C:Python27Libsite-packages. Fügen Sie @profile zu den Funktionen hinzu, die möglicherweise Engpässe aufweisen, wie zum Beispiel das folgende Beispiel:
@profile def create_msg2(self,H,msg): li = msg.keys() msg_type=li[0] ULR_avps=[] ULR=HDRItem() ULR.cmd=self.dia.dictCOMMANDname2code(self.dia.MSG_TERM[msg_type]) if msg_type[-1]=='A': msg=msg[msg_type] self.dia.setAVPs_by_dic(msg_type,msg,ULR_avps) ULR.appId=H.appId ULR.EndToEnd=H.EndToEnd ULR.HopByHop=H.HopByHop msg=self.dia.createRes(ULR,ULR_avps) else: self.dia.setAVPs(msg_type,msg,ULR_avps) ULR.appId=self.dia.APPID self.dia.initializeHops(ULR) msg=self.dia.createReq(ULR,ULR_avps) return msg
Durch eine schrittweise Analyse können wir erkennen, dass in der Open-Source-Protokollbibliothek in der setAVPS-Methode nach dem Attribut „AVP finden“ gesucht wird Bei einer 3000er-Schleife muss jeder AVP 3000 Mal durchlaufen werden, es gibt mindestens 10 AvPs in einer Durchmessernachricht und bei jeder Codierung muss ein AVP 30.000 Mal durchlaufen werden. Unsere ursprüngliche Lösung bestand darin, viele AVPS zu löschen, die in unseren Leistungstests nicht verwendet wurden (es gibt keine Möglichkeit, die Testentwicklungsressourcen sind begrenzt und oft gibt es kein gutes Design. Erstellen Sie zunächst etwas, das den Anforderungen entspricht.), aber nur verbessert Mit etwa 150 ist es noch weit von der Nachfrage entfernt. Deshalb haben wir AVP in den Wörterbuchmodus geändert, damit wir die Attribute von AVP anhand des Namens schnell finden können.
Python-Videokurs
]Das obige ist der detaillierte Inhalt vonVerwenden von Python zur Implementierung leistungsstarker Testtools (2). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!