Verwenden von Python zur Implementierung leistungsstarker Testtools (2)

little bottle
Freigeben: 2019-04-10 11:29:19
nach vorne
4266 Leute haben es durchsucht

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
Nach dem Login kopieren
Führen Sie diese Datei aus : kernprof.py -l -v D:projectmpsrcprotocolslibdiametermt.py, erhalten Sie die folgenden Ergebnisse. Auf diesem Bild können Sie intuitiv erkennen, dass die setAVPS-Methode 96,6 % der Zeit in Anspruch nimmt. Suchen Sie dann diese Funktion und fügen Sie den @proflie-Modifikator erneut hinzu (Sie können außerdem das Verhältnis von setAVPS sehen). Zeit, die jede Codezeile in der Funktion benötigt.

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.

Zusätzlich zur Codeoptimierung wurde auch die Anzahl der Codierungs-AVP-Threads erhöht. In den folgenden Kapiteln wird auf die Auswirkungen von Multithreading und Multiprozessen eingegangen. fortgesetzt werden. . . .

[Empfohlener Kurs:

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!

Verwandte Etiketten:
Quelle:csdn.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!