Vorwort
Ich verwende die Go-Sprache seit fast einem Jahr für die Entwicklung, hauptsächlich zum Schreiben von Back-End- Webdiensten . Ich habe mich von Anfang an über die Struktur beschwert, beispielsweise über die Erstellung komplexer Daten im JSON-Format, was ziemlich mühsam war. Es gibt auch die große Schwierigkeit, Fehler zu schreiben.
Natürlich hat Go auch seine coolen Funktionen. Das Erstellen einer Thread-Coroutine ist einfach zu einfach.
Später akzeptierte ich es nach und nach und hatte das Gefühl, dass die Effizienz nicht schlecht war. Da es sich um eine statisch stark typisierte Sprache handelt, war ich nach der Änderung des Projektcodes sehr zuversichtlich (wenn ein Typfehler auf niedriger Ebene auftritt, tritt ein direkter Kompilierungsfehler auf). ). Im Vergleich zu Python muss es wiederholt überprüft werden. Beide Seiten haben immer ein schlechtes Gewissen wegen des geänderten Codes.
Nichts, was mit Go-Sprachtests zu tun hat, ist gut. Beispielsweise ist das integrierte Test-Framework im Vergleich zu Pytest recht grob. Dieses Jahr habe ich angefangen, Unit-Tests für das Backend zu schreiben (eigentlich sollte es Schnittstellentests heißen), und ich habe festgestellt, dass die apitest-Bibliothek glänzt. Es wird der Kettenaufruf verwendet, der dem Kettenaufruf von HttpRunner 3.x etwas ähnelt.
HttpRunner 3.x
# httprunner 3.x
from httprunner import HttpRunner, Config, Step, RunRequest, RunTestCase
class TestCaseTestCase(HttpRunner):
config = Config("basic test config").base_url("http://127.0.0.1:8000/api")
teststeps = [
Step(
RunRequest(" test_add_event_all_null")
.post("/add_event/")
.with_data({"eid": "", "limit": "", "address": "", "start_time": ""})
.validate()
.assert_equal("body.status", 10021)
.assert_equal("body.message", "parameter error")
)
]
if __name__ == "__main__":
TestCaseTestCase().test_start()
apitest-Testbibliothek
Eine einfache und erweiterbare Bibliothek für Verhaltenstests.
Testbibliothek: https://github.com/steinfletcher/apitest jsonpath-Bibliothek: github.com/steinfletcher/apitest-jsonpath
•Einfache Get-Schnittstelle
package api
import (
"net/http"
"testing"
"time"
"github.com/steinfletcher/apitest"
)
func Client() http.Client {
cli := &http.Client{
Timeout: time.Second * 10,
}
return *cli
}
func TestGetSample(t *testing.T) {
cli := Client()
apitest.New().
EnableNetworking(&cli).
Get("http://httpbin.org/get").
Expect(t).
Status(http.StatusOK).
End()
}
New(): Erstellen Sie einen neuen API-Test.
EnableNetworking(): EnableNetworking aktiviert die Vernetzung für den bereitgestellten Client und erfordert ein http.Clinet.
Get() sendet eine Get-Anfrage und erfordert eine URL.
Expect(): Expect markiert die Anforderungsspezifikation als abgeschlossen.
Status(): HTTP-Status bestätigen. http.StatusOK = 200
End(): End führt den Test aus und gibt die Ergebnisse an den Aufrufer zurück.
• Schnittstelle mit Parametern abrufen
import (
...
jsonpath "github.com/steinfletcher/apitest-jsonpath"
)
...
func TestGetParams(t *testing.T) {
cli := Client()
apitest.New().
EnableNetworking(&cli).
Intercept(func(req *http.Request) {
req.URL.RawQuery = "id=1&name=jack"
}).
Get("http://httpbin.org/get").
Expect(t).
Assert(
jsonpath.Contains(`$.args.id`, "1")).
Assert(
jsonpath.Equal(`$.args.name`, "jack")).
End()
}
req.URL.RawQuery
: Wird zum Definieren von Get-Anforderungsparametern verwendet.
Assert()
,-Methode wird für Behauptungen verwendet.
jsonpath
Stellt Behauptungsmethoden bereit, „Contains“ bestimmt die Einbeziehung und „Equal“ bestimmt die Gleichheit.
•Post-Schnittstelle Formulardatenparameter
...
func TestPostFormData(t *testing.T) {
cli := Client()
apitest.New().
EnableNetworking(&cli).
Post("http://httpbin.org/post").
FormData("key1", "value1").
FormData("key2", "value2").
Expect(t).
Assert(
jsonpath.Chain().
Equal(`$.form.key1`, "value1").
Equal(`$.form.key2`, "value2").
End()).
End()
}
FormData()
Parameter, die zum Festlegen des Formulardatenformats verwendet werden.
jsonpath
Die bereitgestellten Behauptungen unterstützen auch verkettete Aufrufe.
•JSON-Parameter der Post-Schnittstelle
...
func TestPostJson(t *testing.T) {
cli := Client()
apitest.New().
EnableNetworking(&cli).
Post("http://httpbin.org/post").
JSON(`{"message": "hi"}`).
Expect(t).
Assert(
jsonpath.Chain().
Contains(`$.data`, "message").
Contains(`$.data`, "hi").
End()).
End()
}
JSON()
Wird zum Festlegen der JSON()-Anforderungsmethode verwendet.
peinlichste Rezension
Offizielle Website: https://apitest.dev/
apitest ist sehr praktisch bei der Durchführung von HTTP-Schnittstellentests. Wenn Sie eine Zeit lang von der http-Bibliothek der Go-Sprache verwüstet wurden, werden Sie sich tiefer fühlen. Was soll ich sagen, zum Beispiel werden Sie oft von Ihrem Chef PUAed, und Plötzlich lobt Sie der Chef eines Tages tatsächlich persönlich. Das ist wahrscheinlich das Gefühl.
apitest bietet auch Schein- und Berichtsberichte, die später aktualisiert werden!
[Das Folgende ist das umfassendste Systemdiagramm zum Lernen von Softwaretestingenieuren, das Wissen über Architektur im Jahr 2023 erlernt, das ich zusammengestellt habe]
1. Einführung in die Python-Programmierung zur Beherrschung
2. Praktische Umsetzung von Schnittstellenautomatisierungsprojekten
3. Tatsächlicher Kampf des Web-Automatisierungsprojekts
![](https://img-blog.csdnimg.cn/af6acde5fef948688e853163e68085a3.png)
4. Praktische Umsetzung des App-Automatisierungsprojekts
5. Lebensläufe erstklassiger Hersteller
![](https://img-blog.csdnimg.cn/da130899855e439f8d9f538e9d396b42.png)
6. Testen und entwickeln Sie das DevOps-System
7. Häufig verwendete automatisierte Testtools
![](https://img-blog.csdnimg.cn/262b329562404406bcab732e5f680348.png)
8. JMeter-Leistungstest
9. Zusammenfassung (kleine Überraschung am Ende)
Die Lebensdauer ist lang, also fügen Sie Öl hinzu. Jede Anstrengung wird nicht enttäuscht sein, solange Sie durchhalten, werden Sie irgendwann belohnt. Schätzen Sie Ihre Zeit und verfolgen Sie Ihre Träume. Vergessen Sie nicht Ihre ursprüngliche Absicht und machen Sie weiter. Ihre Zukunft liegt in Ihrer Hand!
Das Leben ist kurz und die Zeit kostbar. Wir können nicht vorhersagen, was in der Zukunft passieren wird, aber wir können die Gegenwart kontrollieren. Schätzen Sie jeden Tag, arbeiten Sie hart und machen Sie sich stärker und besser. Mit festem Glauben und beharrlichem Streben wird der Erfolg letztendlich Ihnen gehören!
Nur wenn Sie sich ständig selbst herausfordern, können Sie sich ständig selbst übertreffen. Verfolgen Sie weiterhin Ihre Träume und gehen Sie mutig voran, und Sie werden feststellen, dass der Prozess des Kampfes so schön und lohnenswert ist. Glaub an dich, du schaffst es!
Abschließend möchte ich mich bei allen bedanken, die meinen Artikel sorgfältig gelesen haben. Gegenseitigkeit ist immer notwendig. Obwohl es keine sehr wertvolle Sache ist, können Sie es direkt verwenden, wenn Sie es verwenden können:
Diese Informationen sollten das umfassendste und vollständigste Vorbereitungslager für Freunde von [Softwaretests] sein. Dieses Lager hat auch Zehntausende von Testingenieuren auf der schwierigsten Reise begleitet. Ich hoffe, es kann Ihnen auch helfen!