Rumah pembangunan bahagian belakang Golang Cara menggunakan bahasa Go untuk ujian tekanan kod dan amalan ujian beban

Cara menggunakan bahasa Go untuk ujian tekanan kod dan amalan ujian beban

Aug 02, 2023 pm 12:09 PM
Pengaturcaraan serentak Ujian prestasi ujian beban Ujian tekanan: Ujian tekanan go language: golang

Cara menggunakan bahasa Go untuk ujian tekanan kod dan amalan ujian beban

Pengenalan:
Dalam proses pembangunan perisian, ujian prestasi kod ialah pautan yang sangat penting. Ia boleh membantu kami memahami prestasi kod dalam keadaan beban yang berbeza dan mengenal pasti isu prestasi yang berpotensi. Sebagai bahasa pengaturcaraan berprestasi tinggi, bahasa Go menyediakan pelbagai alatan dan perpustakaan yang boleh membantu kami melaksanakan ujian tekanan kod dan ujian beban. Artikel ini akan memperkenalkan amalan menggunakan bahasa Go untuk ujian tekanan kod dan ujian beban serta memberikan contoh kod yang sepadan.

1. Ujian tekanan kod
Ujian tekanan kod merujuk kepada ujian prestasi kod dengan mensimulasikan sejumlah besar permintaan serentak untuk menilai prestasi kod dalam senario serentak tinggi. Bahasa Go menyediakan pakej net/http/httptest terbina dalam, menjadikannya sangat mudah untuk menulis skrip ujian tekanan kod. Di bawah ini kami mengambil perkhidmatan HTTP ringkas sebagai contoh untuk memperkenalkan cara menggunakan bahasa Go untuk ujian tekanan kod. net/http/httptest包,使得编写代码压测脚本变得非常简单。下面我们以一个简单的HTTP服务为例,介绍如何使用Go语言进行代码压测。

  1. 创建一个HTTP服务
    首先,我们需要创建一个简单的HTTP服务,用于进行性能测试。以下是一个简单的HTTP服务的示例代码:
package main

import (
    "fmt"
    "net/http"
)

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintln(w, "Hello, World!")
    })

    http.ListenAndServe(":8080", nil)
}
Salin selepas log masuk
  1. 编写压测脚本
    然后,我们编写一个Go脚本,用于模拟大量并发请求,对上述HTTP服务进行性能测试。以下是一个简单的压测脚本示例:
package main

import (
    "fmt"
    "net/http"
    "sync"
    "time"
)

func main() {
    var wg sync.WaitGroup

    start := time.Now()

    for i := 0; i < 1000; i++ {
        wg.Add(1)
        go func() {
            defer wg.Done()

            res, err := http.Get("http://localhost:8080")
            if err != nil {
                fmt.Println("Error:", err)
                return
            }
            defer res.Body.Close()
        }()
    }

    wg.Wait()

    elapsed := time.Since(start)
    fmt.Println("Elapsed time:", elapsed)
}
Salin selepas log masuk

在上述脚本中,我们使用sync.WaitGroup来等待所有并发请求执行完成。压测脚本会发送1000个并发请求到http://localhost:8080,并统计总耗时。值得注意的是,这只是一个简单的示例,实际的压测脚本可能会更加复杂,需根据具体需求进行调整。

  1. 运行代码压测
    最后,我们可以使用go run命令来运行上述压测脚本:
$ go run main.go
Salin selepas log masuk
Salin selepas log masuk

运行后,你将看到输出的总耗时。

二、负载测试
负载测试是指模拟实际用户行为,对整个系统进行性能测试,以评估系统在高负载下的性能表现。Go语言提供了一些很好的库,用于编写负载测试脚本。以下是一个基于go-vegeta/vegeta库的负载测试脚本示例。

  1. 安装vegeta库
    首先,我们需要安装vegeta库。可以通过以下命令来安装:
$ go get github.com/tsenart/vegeta
Salin selepas log masuk
  1. 编写负载测试脚本
    然后,我们编写一个Go脚本,使用vegeta库来进行负载测试。以下是一个简单的负载测试脚本示例:
package main

import (
    "fmt"
    "io"
    "log"
    "os"
    "os/signal"
    "syscall"
    "time"

    vegeta "github.com/tsenart/vegeta/lib"
)

func main() {
    rate := vegeta.Rate{Freq: 100, Per: time.Second}
    duration := 10 * time.Second
    targeter := vegeta.NewStaticTargeter(vegeta.Target{
        Method: "GET",
        URL:    "http://localhost:8080",
    })

    attacker := vegeta.NewAttacker()
    var metrics vegeta.Metrics
    sigs := make(chan os.Signal, 1)

    go func() {
        for range sigs {
            attacker.Stop()
        }
    }()
    signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)

    for res := range attacker.Attack(targeter, rate, duration, "Big Bang!") {
        metrics.Add(res)
    }

    metrics.Close()

    fmt.Printf("99th percentile: %s
", metrics.Latencies.P99)
    fmt.Printf("Mean: %s
", metrics.Latencies.Mean)
    fmt.Printf("Requests/sec: %.2f
", metrics.Rate)
    fmt.Printf("Errors: %d
", metrics.Errors)
}
Salin selepas log masuk

在上述脚本中,我们定义了每秒钟发送100个请求,持续10秒的负载测试。负载测试会发送GET请求到http://localhost:8080,并收集各种统计数据,如99th percentile、平均延迟、请求/秒等等。

  1. 运行负载测试
    最后,我们可以使用go run
    1. Buat perkhidmatan HTTP
    2. Pertama, kita perlu mencipta perkhidmatan HTTP mudah untuk ujian prestasi. Berikut ialah contoh kod untuk perkhidmatan HTTP mudah:

    $ go run main.go
    Salin selepas log masuk
    Salin selepas log masuk
    1. Tulis skrip ujian tekanan Kemudian, kami menulis skrip Go untuk mensimulasikan sejumlah besar permintaan serentak dan melaksanakan di atas perkhidmatan HTTP Ujian prestasi. Berikut ialah contoh skrip ujian tekanan mudah:


      rrreee

      Dalam skrip di atas, kami menggunakan sync.WaitGroup untuk menunggu semua permintaan serentak selesai. Skrip ujian tekanan akan menghantar 1000 permintaan serentak ke http://localhost:8080 dan mengira jumlah penggunaan masa. Perlu diingat bahawa ini hanyalah contoh mudah Skrip ujian tekanan sebenar mungkin lebih kompleks dan perlu diselaraskan mengikut keperluan tertentu. 🎜
      1. Jalankan ujian tekanan kod🎜Akhir sekali, kita boleh menggunakan perintah go run untuk menjalankan skrip ujian tekanan di atas: 🎜🎜rrreee🎜Selepas berjalan, anda akan melihat Jumlah masa yang dibelanjakan untuk output. 🎜🎜2. Ujian Beban🎜Ujian beban merujuk kepada simulasi tingkah laku pengguna dan ujian prestasi sebenar keseluruhan sistem untuk menilai prestasi sistem di bawah beban tinggi. Bahasa Go menyediakan beberapa perpustakaan yang hebat untuk menulis skrip ujian beban. Berikut ialah contoh skrip ujian beban berdasarkan pustaka go-vegeta/vegeta. 🎜
        1. Pasang perpustakaan vegeta 🎜Mula-mula, kita perlu memasang perpustakaan vegeta. Ia boleh dipasang melalui arahan berikut: 🎜🎜rrreee
          1. Tulis skrip ujian beban🎜 Kemudian, kami menulis skrip Go dan menggunakan perpustakaan vegeta untuk melaksanakan ujian beban. Berikut ialah contoh skrip ujian beban mudah: 🎜🎜rrreee🎜 Dalam skrip di atas, kami mentakrifkan ujian beban yang menghantar 100 permintaan setiap saat selama 10 saat. Ujian beban akan menghantar permintaan GET ke http://localhost:8080 dan mengumpulkan pelbagai statistik, seperti persentil ke-99, kependaman purata, permintaan/saat, dsb. 🎜
            1. Jalankan ujian beban🎜Akhir sekali, kita boleh menggunakan perintah go run untuk menjalankan skrip ujian beban di atas: 🎜🎜rrreee🎜Selepas berjalan, anda akan lihat keluaran pelbagai data statistik. 🎜🎜Kesimpulan: 🎜Artikel ini memperkenalkan amalan menggunakan bahasa Go untuk ujian tekanan kod dan ujian beban, dan menyediakan contoh kod yang sepadan. Ujian tekanan kod dan ujian beban adalah aspek yang sangat penting dalam pembangunan perisian, yang boleh membantu kami menilai prestasi kod di bawah keadaan konkurensi tinggi dan beban tinggi. Saya harap artikel ini dapat membantu anda memahami dengan lebih baik dan menggunakan bahasa Go untuk ujian prestasi. 🎜

    Atas ialah kandungan terperinci Cara menggunakan bahasa Go untuk ujian tekanan kod dan amalan ujian beban. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Reka bentuk struktur data selamat konkurensi dalam pengaturcaraan serentak C++? Reka bentuk struktur data selamat konkurensi dalam pengaturcaraan serentak C++? Jun 05, 2024 am 11:00 AM

Dalam pengaturcaraan serentak C++, reka bentuk struktur data yang selamat serentak adalah penting: Bahagian kritikal: Gunakan kunci mutex untuk mencipta blok kod yang membenarkan hanya satu utas untuk dilaksanakan pada masa yang sama. Kunci baca-tulis: membenarkan beberapa utas dibaca pada masa yang sama, tetapi hanya satu utas untuk ditulis pada masa yang sama. Struktur data tanpa kunci: Gunakan operasi atom untuk mencapai keselamatan serentak tanpa kunci. Kes praktikal: Barisan selamat benang: Gunakan bahagian kritikal untuk melindungi operasi baris gilir dan mencapai keselamatan benang.

Perbezaan antara ujian prestasi dan ujian unit dalam bahasa Go Perbezaan antara ujian prestasi dan ujian unit dalam bahasa Go May 08, 2024 pm 03:09 PM

Ujian prestasi menilai prestasi aplikasi di bawah beban yang berbeza, manakala ujian unit mengesahkan ketepatan satu unit kod. Ujian prestasi memfokuskan pada mengukur masa tindak balas dan daya pemprosesan, manakala ujian unit memfokuskan pada output fungsi dan liputan kod. Ujian prestasi mensimulasikan persekitaran dunia sebenar dengan beban tinggi dan serentak, manakala ujian unit dijalankan di bawah beban rendah dan keadaan bersiri. Matlamat ujian prestasi adalah untuk mengenal pasti kesesakan prestasi dan mengoptimumkan aplikasi, manakala matlamat ujian unit adalah untuk memastikan ketepatan dan keteguhan kod.

Pengaturcaraan serentak C++: bagaimana untuk melaksanakan penjadualan tugas dan pengurusan kolam benang? Pengaturcaraan serentak C++: bagaimana untuk melaksanakan penjadualan tugas dan pengurusan kolam benang? May 06, 2024 am 10:15 AM

Penjadualan tugas dan pengurusan kumpulan benang adalah kunci untuk meningkatkan kecekapan dan kebolehskalaan dalam pengaturcaraan serentak C++. Penjadualan tugas: Gunakan std::thread untuk membuat thread baharu. Gunakan kaedah join() untuk menyertai utas. Pengurusan kolam benang: Buat objek ThreadPool dan nyatakan bilangan utas. Gunakan kaedah add_task() untuk menambah tugas. Panggil kaedah join() atau stop() untuk menutup kumpulan benang.

Pengaturcaraan Serentak C++: Bagaimana untuk mengelakkan kebuluran benang dan penyongsangan keutamaan? Pengaturcaraan Serentak C++: Bagaimana untuk mengelakkan kebuluran benang dan penyongsangan keutamaan? May 06, 2024 pm 05:27 PM

Untuk mengelakkan kebuluran benang, anda boleh menggunakan kunci yang adil untuk memastikan peruntukan sumber yang adil, atau menetapkan keutamaan benang. Untuk menyelesaikan penyongsangan keutamaan, anda boleh menggunakan warisan keutamaan, yang meningkatkan keutamaan utas yang memegang sumber buat sementara waktu atau menggunakan promosi kunci, yang meningkatkan keutamaan utas yang memerlukan sumber.

Penjelasan terperinci tentang primitif penyegerakan dalam pengaturcaraan serentak C++ Penjelasan terperinci tentang primitif penyegerakan dalam pengaturcaraan serentak C++ May 31, 2024 pm 10:01 PM

Dalam pengaturcaraan berbilang benang C++, peranan primitif penyegerakan adalah untuk memastikan ketepatan berbilang utas yang mengakses sumber yang dikongsi Ia termasuk: Mutex (Mutex): melindungi sumber yang dikongsi dan menghalang akses serentak (ConditionVariable): thread Tunggu khusus syarat yang perlu dipenuhi sebelum meneruskan operasi atom: memastikan bahawa operasi dilaksanakan dengan cara yang tidak terganggu.

Pengaturcaraan Serentak C++: Bagaimana untuk mengendalikan komunikasi antara benang? Pengaturcaraan Serentak C++: Bagaimana untuk mengendalikan komunikasi antara benang? May 04, 2024 pm 12:45 PM

Kaedah untuk komunikasi antara benang dalam C++ termasuk: memori dikongsi, mekanisme penyegerakan (kunci mutex, pembolehubah keadaan), paip dan baris gilir mesej. Contohnya, gunakan kunci mutex untuk melindungi pembilang yang dikongsi: mengisytiharkan kunci mutex (m) dan pembolehubah yang dikongsi (pembilang); untuk mengelakkan keadaan perlumbaan.

Pengaturcaraan Serentak C++: Bagaimana untuk melakukan penamatan dan pembatalan benang? Pengaturcaraan Serentak C++: Bagaimana untuk melakukan penamatan dan pembatalan benang? May 06, 2024 pm 02:12 PM

Mekanisme penamatan dan pembatalan utas dalam C++ termasuk: Penamatan utas: std::thread::join() menyekat utas semasa sehingga utas sasaran menyelesaikan pelaksanaan std::thread::detach() menanggalkan utas sasaran daripada pengurusan utas. Pembatalan utas: std::thread::request_termination() meminta utas sasaran untuk menamatkan pelaksanaan; benang. Dalam pertempuran sebenar, request_termination() membenarkan utas untuk menentukan masa penamatan, dan join() memastikan bahawa pada baris utama

Apakah rangka kerja dan perpustakaan pengaturcaraan serentak dalam C++? Apakah kelebihan dan batasan masing-masing? Apakah rangka kerja dan perpustakaan pengaturcaraan serentak dalam C++? Apakah kelebihan dan batasan masing-masing? May 07, 2024 pm 02:06 PM

Rangka kerja pengaturcaraan serentak C++ menampilkan pilihan berikut: utas ringan (std::benang-benang Boost concurrency concurrency dan algoritma OpenMP untuk pemproses berbilang pemproses berprestasi tinggi (TBB); (cpp-Setuju).

See all articles