Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Bucle de verificación para proyectos Quarkus: build, análisis estático, pruebas con cobertura, escaneos de seguridad, compilación nativa y revisión de diff antes del lanzamiento o PR.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-03 | ✗→✓ | ▲ Improved | 138% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 100% | 0% |
| case-22 | ✗→✓ | ▲ Improved | 395% | 0% |
| case-23 | ✗→✓ | ▲ Improved | 68% | 0% |
| case-02 | ✓→✗ | ▼ Worse | 102% | 0% |
PR'lardan önce, büyük değişikliklerden sonra ve deployment öncesi çalıştırın.
bash# Maven mvn clean verify -DskipTests # Gradle ./gradlew clean assemble -x test
Build başarısız olursa, durdurun ve derleme hatalarını düzeltin.
bashmvn checkstyle:check pmd:check spotbugs:check
bashmvn sonar:sonar \ -Dsonar.projectKey=my-quarkus-project \ -Dsonar.host.url=http://localhost:9000 \ -Dsonar.login=${SONAR_TOKEN}
bash# Tüm testleri çalıştır mvn clean test # Kapsam raporu oluştur mvn jacoco:report # Kapsam eşiğini zorla (%80) mvn jacoco:check # Veya Gradle ile ./gradlew test jacocoTestReport jacocoTestCoverageVerification
Mock'lanmış bağımlılıklarla servis mantığını test edin:
java@ExtendWith(MockitoExtension.class) class UserServiceTest { @Mock UserRepository userRepository; @InjectMocks UserService userService; @Test void createUser_validInput_returnsUser() { var dto = new CreateUserDto("Alice", "alice@example.com"); // Panache persist() void döndürür — doNothing + verify kullanın doNothing().when(userRepository).persist(any(User.class)); User result = userService.create(dto); assertThat(result.name).isEqualTo("Alice"); verify(userRepository).persist(any(User.class)); } }
Gerçek veritabanıyla (Testcontainers) test edin:
java@QuarkusTest @QuarkusTestResource(PostgresTestResource.class) class UserRepositoryIntegrationTest { @Inject UserRepository userRepository; @Test @Transactional void findByEmail_existingUser_returnsUser() { User user = new User(); user.name = "Alice"; user.email = "alice@example.com"; userRepository.persist(user); Optional<User> found = userRepository.findByEmail("alice@example.com"); assertThat(found).isPresent(); assertThat(found.get().name).isEqualTo("Alice"); } }
REST Assured ile REST endpoint'lerini test edin:
java@QuarkusTest class UserResourceTest { @Test void createUser_validInput_returns201() { given() .contentType(ContentType.JSON) .body(""" {"name": "Alice", "email": "alice@example.com"} """) .when().post("/api/users") .then() .statusCode(201) .body("name", equalTo("Alice")); } @Test void createUser_invalidEmail_returns400() { given() .contentType(ContentType.JSON) .body(""" {"name": "Alice", "email": "invalid"} """) .when().post("/api/users") .then() .statusCode(400); } }
Ayrıntılı kapsam için target/site/jacoco/index.html sayfasını kontrol edin:
bashmvn org.owasp:dependency-check-maven:check
CVE'ler için target/dependency-check-report.html raporunu inceleyin.
bash# Güvenlik açığı olan extension'ları kontrol et mvn quarkus:audit # Tüm extension'ları listele mvn quarkus:list-extensions
bashdocker run -t owasp/zap2docker-stable zap-api-scan.py \ -t http://localhost:8080/q/openapi \ -f openapi
GraalVM native image uyumluluğunu test edin:
bash# Native executable oluştur mvn package -Dnative # Veya container ile mvn package -Dnative -Dquarkus.native.container-build=true # Native executable'ı test et ./target/*-runner # Temel smoke testleri çalıştır curl http://localhost:8080/q/health/live curl http://localhost:8080/q/health/ready
Yaygın sorunlar:
quarkus.native.resources.includes ile kaynakları dahil edinÖrnek reflection yapılandırması:
java@RegisterForReflection(targets = {MyDynamicClass.class}) public class ReflectionConfiguration {}
javascript// load-test.js import http from 'k6/http'; import { check } from 'k6'; export const options = { stages: [ { duration: '30s', target: 50 }, { duration: '1m', target: 100 }, { duration: '30s', target: 0 }, ], }; export default function () { const res = http.get('http://localhost:8080/api/markets'); check(res, { 'status is 200': (r) => r.status === 200, 'response time < 200ms': (r) => r.timings.duration < 200, }); }
Çalıştırın:
bashk6 run load-test.js
bash# Liveness curl http://localhost:8080/q/health/live # Readiness curl http://localhost:8080/q/health/ready # Tüm sağlık kontrolleri curl http://localhost:8080/q/health # Metrikler (etkinleştirilmişse) curl http://localhost:8080/q/metrics
Beklenen yanıtlar:
json{ "status": "UP", "checks": [ { "name": "Database connection", "status": "UP" } ] }
bash# Container image oluştur mvn package -Dquarkus.container-image.build=true # Veya belirli registry ile mvn package \ -Dquarkus.container-image.build=true \ -Dquarkus.container-image.registry=docker.io \ -Dquarkus.container-image.group=myorg \ -Dquarkus.container-image.tag=1.0.0 # Container'ı test et docker run -p 8080:8080 myorg/my-quarkus-app:1.0.0
bash# Trivy trivy image myorg/my-quarkus-app:1.0.0 # Grype grype myorg/my-quarkus-app:1.0.0
bash# Tüm yapılandırma özelliklerini kontrol et mvn quarkus:info # Tüm yapılandırma kaynaklarını listele curl http://localhost:8080/q/dev/io.quarkus.quarkus-vertx-http/config
/q/swagger-ui)OpenAPI spec oluşturun:
bashcurl http://localhost:8080/q/openapi -o openapi.json
bash#!/bin/bash set -e echo "=== Faz 1: Build ===" mvn clean verify -DskipTests echo "=== Faz 2: Static Analiz ===" mvn checkstyle:check pmd:check spotbugs:check echo "=== Faz 3: Testler + Kapsam ===" mvn test jacoco:report jacoco:check echo "=== Faz 4: Güvenlik Taraması ===" mvn org.owasp:dependency-check-maven:check echo "=== Faz 5: Native Derleme ===" mvn package -Dnative -Dquarkus.native.container-build=true echo "=== Tüm Fazlar Tamamlandı ===" echo "Raporları inceleyin:" echo " - Kapsam: target/site/jacoco/index.html" echo " - Güvenlik: target/dependency-check-report.html" echo " - Native: target/*-runner"
yamlname: Verification on: [push, pull_request] jobs: verify: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Set up JDK 21 uses: actions/setup-java@v3 with: java-version: '21' distribution: 'temurin' - name: Cache Maven packages uses: actions/cache@v3 with: path: ~/.m2 key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }} - name: Build run: mvn clean verify -DskipTests - name: Test with Coverage run: mvn test jacoco:report jacoco:check - name: Security Scan run: mvn org.owasp:dependency-check-maven:check - name: Upload Coverage uses: codecov/codecov-action@v3 with: files: target/site/jacoco/jacoco.xml
Other measured skills in the registry, with their headline benchmark lift.