Tingkatkan Ujian Karate anda dengan 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()); } }
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; }
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')}` } }
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
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!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

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

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas











Penyelesaian masalah dan penyelesaian kepada perisian keselamatan syarikat yang menyebabkan beberapa aplikasi tidak berfungsi dengan baik. Banyak syarikat akan menggunakan perisian keselamatan untuk memastikan keselamatan rangkaian dalaman. …

Penyelesaian untuk menukar nama kepada nombor untuk melaksanakan penyortiran dalam banyak senario aplikasi, pengguna mungkin perlu menyusun kumpulan, terutama dalam satu ...

Pemprosesan pemetaan medan dalam dok sistem sering menemui masalah yang sukar ketika melaksanakan sistem dok: bagaimana untuk memetakan medan antara muka sistem dengan berkesan ...

Apabila menggunakan Mybatis-Plus atau Rangka Kerja ORM yang lain untuk operasi pangkalan data, sering diperlukan untuk membina syarat pertanyaan berdasarkan nama atribut kelas entiti. Sekiranya anda secara manual setiap kali ...

Mula musim bunga menggunakan versi IntelliJideaultimate ...

Penukaran objek dan tatasusunan Java: Perbincangan mendalam tentang risiko dan kaedah penukaran jenis cast yang betul Banyak pemula Java akan menemui penukaran objek ke dalam array ...

Penjelasan terperinci mengenai reka bentuk jadual SKU dan SPU di platform e-dagang Artikel ini akan membincangkan isu reka bentuk pangkalan data SKU dan SPU dalam platform e-dagang, terutamanya bagaimana menangani jualan yang ditentukan pengguna ...

Bagaimanakah penyelesaian caching Redis menyedari keperluan senarai kedudukan produk? Semasa proses pembangunan, kita sering perlu menangani keperluan kedudukan, seperti memaparkan ...
