Rumah Java javaTutorial Tingkatkan Ujian Karate anda dengan Spring Boot DI

Tingkatkan Ujian Karate anda dengan Spring Boot DI

Jul 22, 2024 pm 04:44 PM

Level up your Karate Testing with Spring Boot DI

Selama beberapa tahun saya telah menggunakan Timun untuk ujian peringkat lebih tinggi, dan baru-baru ini mula menggunakan Karate. Walaupun Timun adalah alat yang hebat, saya rasa Karate benar-benar bersinar dalam mengurangkan boilerplate yang disertakan bersama definisi langkah dan memudahkan untuk menulis ujian yang bermakna dengan cepat, terutamanya apabila ia berkaitan dengan ujian API.

Untuk aplikasi mudah, menulis fail ciri anda dalam JavaScript biasa sudah memadai. Apabila aplikasi dan ujian anda berkembang, menggunakan semula beberapa kod Java boleh menjadi berharga. Spring Boot API boleh mendapat banyak manfaat daripada ujian Karate, tetapi bagaimana pula dengan memanfaatkan kuasa Spring Boot secara langsung dalam ujian Karate anda?

Sesetengah contoh kes penggunaan

  • Walaupun Karate menyokong konfigurasi melalui fail karate-config.js, sesetengah pihak mungkin suka mengkonfigurasi melalui Spring YAML/properties sebaliknya. Ini boleh membantu untuk mengkonfigurasi semula perkara di luar membina semula kod juga.
  • Untuk menyegerakkan sifat konfigurasi But Spring tertentu antara aplikasi dan ujian.
  • Untuk mengesahkan keadaan pangkalan data antara panggilan API. Kacang repositori/entiti JPA boleh digunakan dalam ujian Karate.
  • Sesetengah kacang Spring mungkin berguna untuk digunakan dalam ujian.

Cara mengintegrasikan Spring ke dalam Karate

Projek sampel penuh: https://github.com/trey-pero/karate-spring

Karate boleh dilaksanakan melalui ujian JUnit yang mudah. Untuk memulakan pendawaian Spring in, sediakan ujian JUnit sebagai @SpringBootTest.

@RequiredArgsConstructor
@SpringBootTest(classes = Main.class)
public class KarateTest {
    private final ApplicationContext applicationContext;

    @Test
    void test() {
        ApplicationContextHolder.setApplicationContext(this.applicationContext);

        // Since this one JUnit test runs all Karate tests,
        // fail the test if any underlying Karate tests fail
        assertEquals(0, Runner.path("classpath:org/tpero")
                .parallel(Optional.ofNullable(System.getProperty("karate.threads"))
                        .map(Integer::parseInt)
                        .orElse(5)
                ).getFailCount());
    }
}
Salin selepas log masuk

Untuk mengakses konteks Spring (yang menyediakan akses kepada semua kacang dan konfigurasi), ia perlu disimpan di tempat yang Karate boleh mengaksesnya secara statik.

/**
 * Provides Karate static access to the Spring application context.
 */
@UtilityClass
public class ApplicationContextHolder {
    @Setter
    @Getter
    private ApplicationContext applicationContext;
}
Salin selepas log masuk

Daripada konfigurasi Karate, pemegang statik boleh diakses untuk menyambung konteks aplikasi ke dalam peta konfigurasi global Karate menggunakan sampel berikut:

/**
 * Define common feature file configuration here.
 * @returns Common configuration as a JSON object.
 */
function getConfig() {
    // Global values
    const appContext = Java.type("org.tpero.ApplicationContextHolder")
        .getApplicationContext()
    const environment = appContext.getEnvironment()

    return {
        appContext: appContext,
        environment: environment,

        baseUrl: `http://localhost:${environment.getProperty('app.server.port', '8080')}`
    }
}
Salin selepas log masuk

Dengan kod persediaan di atas, kacang dan konfigurasi boleh diakses daripada fail ciri Karate, ditunjukkan oleh sampel ini yang menguji API log masuk mudah yang mengembalikan token JWT.

Feature: Login
  Background:
    * url baseUrl
    * path '/login'
    # Load the JWT service bean from Spring DI
    * def jwtService = appContext.getBean('jwtService')

  Scenario: Login with valid credentials
    Given request { username: 'user', password: 'password' }
    When method post
    Then status 200
    * print response

    # Use the JWT service bean to decode the JWT from the response
    * def decodedJwt = jwtService.decode(response)
    * print decodedJwt
    * def decodedBody = decodedJwt.getBody()
    * print decodedBody

    And match decodedBody['sub'] == 'user'
    * def issuedAt = Number(decodedBody['iat'])
    # Ensure the issuedAt is in the past
    And assert issuedAt < Java.type('java.lang.System').currentTimeMillis()
    * def configuredExpirationInMinutes = Number(environment.getProperty('jwt.expiration.ms')) / 1000
    # Ensure the expiration is the configurable amount of minutes beyond the issuedAt
    And match Number(decodedBody['exp']) == issuedAt + configuredExpirationInMinutes
Salin selepas log masuk

Sampel ini menunjukkan betapa mudahnya untuk menyepadukan kuasa Spring Boot ke dalam Karate untuk membina suite ujian yang lebih berkebolehan.

Atas ialah kandungan terperinci Tingkatkan Ujian Karate anda dengan Spring Boot DI. 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

Tag artikel 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)

Rangka Kerja 4 JavaScript teratas pada tahun 2025: React, Angular, Vue, Svelte Rangka Kerja 4 JavaScript teratas pada tahun 2025: React, Angular, Vue, Svelte Mar 07, 2025 pm 06:09 PM

Rangka Kerja 4 JavaScript teratas pada tahun 2025: React, Angular, Vue, Svelte

Bagaimanakah mekanisme kelas muatan Java berfungsi, termasuk kelas yang berbeza dan model delegasi mereka? Bagaimanakah mekanisme kelas muatan Java berfungsi, termasuk kelas yang berbeza dan model delegasi mereka? Mar 17, 2025 pm 05:35 PM

Bagaimanakah mekanisme kelas muatan Java berfungsi, termasuk kelas yang berbeza dan model delegasi mereka?

Bagaimanakah saya menggunakan Maven atau Gradle untuk Pengurusan Projek Java Lanjutan, Membina Automasi, dan Resolusi Ketergantungan? Bagaimanakah saya menggunakan Maven atau Gradle untuk Pengurusan Projek Java Lanjutan, Membina Automasi, dan Resolusi Ketergantungan? Mar 17, 2025 pm 05:46 PM

Bagaimanakah saya menggunakan Maven atau Gradle untuk Pengurusan Projek Java Lanjutan, Membina Automasi, dan Resolusi Ketergantungan?

Node.js 20: Peningkatan Prestasi Utama dan Ciri -ciri Baru Node.js 20: Peningkatan Prestasi Utama dan Ciri -ciri Baru Mar 07, 2025 pm 06:12 PM

Node.js 20: Peningkatan Prestasi Utama dan Ciri -ciri Baru

Iceberg: Masa Depan Jadual Data Tasik Iceberg: Masa Depan Jadual Data Tasik Mar 07, 2025 pm 06:31 PM

Iceberg: Masa Depan Jadual Data Tasik

Bagaimanakah saya boleh menggunakan JPA (Java Constence API) untuk pemetaan objek-objek dengan ciri-ciri canggih seperti caching dan malas malas? Bagaimanakah saya boleh menggunakan JPA (Java Constence API) untuk pemetaan objek-objek dengan ciri-ciri canggih seperti caching dan malas malas? Mar 17, 2025 pm 05:43 PM

Bagaimanakah saya boleh menggunakan JPA (Java Constence API) untuk pemetaan objek-objek dengan ciri-ciri canggih seperti caching dan malas malas?

Bagaimanakah saya melaksanakan caching pelbagai peringkat dalam aplikasi java menggunakan perpustakaan seperti kafein atau cache jambu? Bagaimanakah saya melaksanakan caching pelbagai peringkat dalam aplikasi java menggunakan perpustakaan seperti kafein atau cache jambu? Mar 17, 2025 pm 05:44 PM

Bagaimanakah saya melaksanakan caching pelbagai peringkat dalam aplikasi java menggunakan perpustakaan seperti kafein atau cache jambu?

Spring Boot Snakeyaml 2.0 CVE-2022-1471 Isu Tetap Spring Boot Snakeyaml 2.0 CVE-2022-1471 Isu Tetap Mar 07, 2025 pm 05:52 PM

Spring Boot Snakeyaml 2.0 CVE-2022-1471 Isu Tetap

See all articles