Bruno CLI vs Apidog CLI: CI'da API Testlerini Çalıştırma

Bruno CLI ve Apidog CLI'ın CI için karşılaştırılması: doğru API test çalıştırıcısını seçmenize yardımcı olmak amacıyla kurulum komutları, bayraklar, raporlayıcılar, çıkış kodları ve GitHub Actions örnekleri.

Ashley Innocent

Ashley Innocent

15 June 2026

Bruno CLI vs Apidog CLI: CI'da API Testlerini Çalıştırma

enterprise.banner.title

enterprise.banner.feature1

enterprise.banner.feature2

enterprise.banner.feature3

enterprise.banner.ctaB

API testleriniz dizüstü bilgisayarınızda geçiyor. Asıl soru, herhangi bir insanın hiçbir şeye tıklamasına gerek kalmadan, her çekme isteğinde, her birleştirmede, her gece yapısında çalışıp çalışmadıklarıdır. Bu iş, bir komut satırı çalıştırıcısına aittir. Zaten yazdığınız testleri alır ve işlem hattınızın içinde başsız olarak yürütür, temiz bir durum koduyla çıkar ve CI kontrol panelinizin okuyabileceği bir rapor yazar.

Ekipler bunu kurarken sürekli iki çalıştırıcıdan bahsedilir: Bruno CLI ve Apidog CLI. Farklı başlangıç noktalarından aynı sorunu çözerler. Bruno, git-tabanlı, çevrimdışı öncelikli, açık kaynaklı bir API istemcisidir ve CLI'ı deponuzda bulunan .bru dosyalarını çalıştırır. Apidog ise hepsi bir arada bir API platformudur ve CLI'ı uygulamada oluşturduğunuz görsel test senaryolarını çalıştırır. Her ikisi de GitHub Actions, GitLab CI, Jenkins ve Node.js içeren diğer her şeyle entegre olur. Her ikisi de bir test başarısız olduğunda derlemeyi durdurur. Farklar, testleri nasıl yazdığınızda, nasıl kimlik doğruladığınızda ve test tanımının CI'a nasıl aktarıldığında ortaya çıkar.

button

Bu, ikisinin dürüst, komut düzeyinde bir karşılaştırmasıdır. Asılsız iddialar yok. Bruno gerçekten de birçok şeyi iyi yapar ve bunlardan birini işlem hattınıza bağlamadan önce her bir çalıştırıcının tam olarak nereye uyduğunu göreceksiniz.

ÖZET

Asıl sorun: var olan ama hiç çalışmayan testler

Elle çalıştırdığınız bir test, çürüyen bir testtir. Biri onu inşa etti, bir kez geçti ve sonra API altında sürüklenirken dokunulmadan kaldı. Çözüm daha fazla test değil. Her değişiklikte otomatik olarak çalışan, işlem hattının üzerinde hareket edebileceği bir geçiş/başarısızlık sinyali veren testlerdir.

Bu boşluğu kapatan şey bir CLI çalıştırıcısıdır. CI'da kullanışlı olması için üç şeye ihtiyacı vardır: bir GUI olmadan çalışması, bir şeyler başarısız olduğunda derlemenin kırmızıya dönmesi için sıfır olmayan bir kodla çıkması ve inceleyicilerin neyin bozulduğunu görmesi için makine tarafından okunabilir bir rapor yazması gerekir. Bruno ve Apidog bu barı her ikisi de aşar. Farklılıkları, çalıştırma komutundan önce, testin nasıl yazıldığı ve nerede yaşadığıdır.

CI'ı sıfırdan kuruyorsanız, CI/CD'de API testlerini otomatikleştirme konusundaki daha geniş kalıpları bu karşılaştırmayla birlikte okumaya değer. Burada iki çalıştırıcının kendisine odaklanıyoruz.

Bruno CLI'ın iyi yaptığı şeyler

Bruno'nun tüm tasarımı git-tabanlıdır. Her istek, ortam ve doğrulama, deponuzda, disk üzerinde, diğer kaynak dosyalar gibi versiyonlanan düz metin bir .bru dosyasıdır. Bu modelin gerçek avantajları vardır ve herhangi bir karşılaştırmadan önce bunları açıkça belirtmekte fayda var.

Testleriniz kodunuzla birlikte yaşar. Bir uç noktayı değiştiren bir çekme isteği, aynı uç nokta için testi aynı farkta değiştirebilir, aynı kişi tarafından incelenir. Senkronize edilecek ayrı bir sistem yok, depodaki içerikten uzaklaşabilecek bir bulut kopyası yok. Format metin olduğu için farklar okunabilir. Testlerinizi grepleyebilir, kod için kullandığınız araçlarla yeniden düzenleyebilir ve bir düzenleyicide birleştirme çakışmalarını çözebilirsiniz.

Ayrıca açık kaynaklı ve çevrimdışı çalışır. CLI, makinenizde veya CI çalıştırıcınızda tamamen hesap, oturum açma ve jeton olmadan çalışır. Sıkı veri işleme kuralları olan veya yalıtılmış ortamlara sahip ekipler için bu önemlidir. Bruno'nun ücretli katmanı, Bruno Ultimate, SSO ve SCIM, gizli yönetici entegrasyonları ve denetim yetenekleri dahil ekip özelliklerini ekler, bu nedenle proje sadece bir hobi aracı değildir. Ancak çekirdek istemci ve CLI ücretsiz ve bağımsızdır ve bu yasal bir güçlü yanıdır.

npm install -g @usebruno/cli

İkili dosya bru'dur. Bir koleksiyonu, .bru dosyalarınızı içeren klasörü işaret ederek çalıştırırsınız:

bru run --env staging

Koleksiyon dizininin içinden çalıştırın ve bru run orada bulduğu istekleri yürütür. İç içe geçmiş istekleri bulması için alt klasörlerde özyinelemeli olarak arama yapmak için -r ekleyin:

bru run -r --env staging

Temel döngü budur. Kimlikler yok, jeton yok, uzaktan getirme yok. Klasördeki dosyalar testlerdir ve CLI bunları çalıştırır.

Bruno'nun daha geniş hikayesini git-native bir API istemcisi olarak Bruno'yu farklı kılan şeylerde ve daha büyük ekipler için sınırlamalarının nerede ortaya çıktığında ele aldık. Özellikle CI için, yukarıdaki güçlü yönler önemlidir.

Apidog CLI'ın iyi yaptığı şeyler

Apidog, aynı işlem hattına farklı bir yoldan gider. Testleri Apidog uygulamasında görsel olarak oluşturursunuz: istekleri bir senaryoda zincirler, doğrulamalar ekler, bir yanıttan bir değeri bir sonraki isteğe çeker ve tümünü bir veri dosyası üzerinde döngüye alırsınız. CLI, bu senaryolar için başsız yürütücüdür. Kendi dosya biçimi yoktur. Belirttiğiniz senaryoyu Apidog projenizden kimliğe göre getirir ve uygulamada olduğu gibi çalıştırır.

Avantajı, kimsenin aynı testin iki farklı temsilini sürdürmemesidir. Projedeki senaryo testin kendisidir. İstek zincirleme, değişken çıkarma ve doğrulamaları sizin komut dosyaları yazıp hata ayıklamanıza gerek kalmadan halleden görsel bir oluşturucuda yazarsınız. Daha sonra CLI, aynı senaryoyu CI'da çalıştırır. Hızlı yazma döngüsü ve otomasyon döngüsü tek bir doğru kaynak kullanır.

npm install -g apidog-cli

İkili dosya apidog'dur. Tipik bir çalıştırma, bir senaryoyu kimliğe göre adlandırır, bir ortam seçer ve bir erişim jetonuyla kimlik doğrulaması yapar:

apidog run --access-token $APIDOG_ACCESS_TOKEN -t 605067 -e 1629989 -n 1 -r html,junit

Bu kimlikleri elle yazmazsınız. Test senaryosunu açın, CI/CD sekmesine geçin, bir erişim jetonu oluşturun ve Apidog, senaryo kimliği ve ortam kimliği zaten doldurulmuş olarak sizin için tam komutu oluşturur. Bir kez kopyalarsınız, ardından jetonu bir CI sırrına taşıyın ve onu $APIDOG_ACCESS_TOKEN olarak referans alın. Tüm seçenekleri tek bir yerde istiyorsanız, tam bayrak referansı Apidog CLI tam kılavuzunda bulunur.

Jeton tabanlı model, Bruno'dan en belirgin farktır. Apidog, CLI'ın ağ üzerinden eriştiği, kimliği doğrulanmış bir projede depolanan testleri çalıştırır. Bruno ise CLI'ın diskten okuduğu dosyalar olarak depolanan testleri çalıştırır. İkisi de yanlış değildir; farklı ekip kurulumlarına uygundurlar.

Yan yana karşılaştırma

Boyut Bruno CLI (bru) Apidog CLI (apidog)
Paket @usebruno/cli apidog-cli
Çalıştırma komutu bru run apidog run
Test kaynağı Git deponuzdaki .bru dosyaları Apidog projenizdeki test senaryoları, Kimliğe göre getirilir
Yazma Metin dosyalarını elle düzenleme veya Bruno uygulamasını kullanma Apidog uygulamasında görsel senaryo oluşturucu
CI'da Kimlik Doğrulama Yok; çevrimdışı çalışır Erişim jetonu (--access-token)
Ne çalıştırılacağını seçme Klasör yolu, -r özyinelemeli, --tags -t senaryo, -f klasör, --test-suite
Ortam --env <name> -e <environmentId>
Veri odaklı --csv-file-path, --json-file-path -d <path> (CSV veya JSON)
Yinelemeler --iteration-count <n> -n <n>
Raporlayıcılar JSON, JUnit, HTML cli, html, json, junit
Hızlı hata durdurma --bail --on-error end (varsayılan olarak ilk hatada durur)
Açık kaynak Evet Hayır (ücretsiz npm CLI; planınızdaki senaryoları çalıştırır)
Lisans/hesap CLI için yok Proje için Apidog hesabı

İki şey dikkat çekiyor. Birincisi, her iki çalıştırıcı da aynı CI temel özelliklerini kapsar: ortam seçimi, veri odaklı yineleme, önemli olan üç rapor formatı ve başarısızlıkta sıfır olmayan bir çıkış. İkincisi, ayrım ham yetenekle ilgili değil, testin nerede yaşadığı ve nasıl yazdığınızla ilgilidir. Bruno testi depoda metin olarak tutar. Apidog ise projede görsel bir senaryo olarak tutar ve referansla çalıştırır.

Raporlayıcılar ve çıkış kodları: CI'ın aslında okuduğu kısımlar

Bir çalıştırıcı, bir işlem hattında yerini iki davranışla kazanır: yazdığı rapor ve döndürdüğü çıkış kodu. Bunları doğru yapın, gerisi bağlantıdır.

Bruno, her formata özel bayraklarla rapor yazar. İstediğiniz her format için bir yol belirtirsiniz:

bru run -r --env staging \
  --reporter-junit ./results/junit.xml \
  --reporter-html ./results/report.html \
  --reporter-json ./results/report.json

JUnit XML, CI kontrol panelinizin bir geçiş/başarısızlık ağacına ayrıştırdığı şeydir. HTML raporu ise göz atılabilir bir eserdir. Bruno'nun --bail bayrağı, ilk başarısız istek, test veya doğrulamadan sonra çalıştırmayı durdurur, bu da bir duman testinde geri bildirimi hızlı tutar. --bail olmadan her şeyi çalıştırır ve tüm hataları tek seferde raporlar.

Apidog, virgülle ayrılmış bir liste ile tek bir -r bayrağı kullanır ve her şeyi tek bir çıktı dizini altına yazar:

apidog run --access-token $APIDOG_ACCESS_TOKEN -t 605067 \
  -r html,junit --out-dir ./apidog-reports

--on-error bayrağı, senaryo içi davranışını şekillendirir: end ilk hatada durur (varsayılan), continue her adımı çalıştırır, böylece tüm hataları tek bir raporda toplarsınız ve ignore bilinen kararsız bir adımı atlar. Her iki durumda da bir şey başarısız olursa çalıştırma sıfır olmayan bir kodla biter.

Çıkış kodu sözleşmesi her iki tarafta da aynıdır ve taşıyıcı kısımdır. Bir doğrulama başarısız olduğunda, çalıştırıcı sıfır olmayan bir kodla çıkar. CI bu kodu okur, adımı başarısız olarak işaretler, işi başarısız kılar ve birleştirmeyi veya dağıtımı engeller. Ek bir yapılandırma yapmazsınız. Her ikisi için de aynı olan tek tuzak, çıkış kodunu yutmaktır: çalıştırmayı bir shell işlem hattına sarar veya || true eklerseniz, sıfır olmayan çıkış yutulur ve geçit sessizce çalışmayı durdurur. Bunu yapmayın.

GitHub Actions'ta Bruno CLI

.bru dosyaları zaten depoda olduğu için iş akışı kısadır. Kodu kontrol edin, CLI'yı kurun, koleksiyonu çalıştırın, raporu yükleyin.

name: API tests

on:
  pull_request:
    branches: [main]

jobs:
  api-tests:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Set up Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '20'

      - name: Install Bruno CLI
        run: npm install -g @usebruno/cli

      - name: Run API tests
        working-directory: ./api-tests
        run: bru run -r --env staging --reporter-junit ./results/junit.xml

      - name: Upload report
        if: always()
        uses: actions/upload-artifact@v4
        with:
          name: bruno-report
          path: ./api-tests/results

working-directory, koleksiyonunuzu içeren klasörü işaret eder. if: always(), testler başarısız olsa bile rapor yüklemesini çalışır durumda tutar, ki bu tam da onu okumak istediğiniz zamandır. Hiçbir uzak hizmete kimlik doğrulaması yapılmadığı için gizli bir bilgiye gerek yoktur.

GitHub Actions'ta Apidog CLI

Apidog iş akışı yapısal olarak aynıdır, bir eklemeyle: erişim jetonu depo sırlarından gelir ve senaryoyu klasör yolu yerine kimliğe göre seçersiniz.

name: API tests

on:
  pull_request:
    branches: [main]

jobs:
  api-tests:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Set up Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '20'

      - name: Install Apidog CLI
        run: npm install -g apidog-cli

      - name: Run API test scenario
        run: |
          apidog run \
            --access-token "$APIDOG_ACCESS_TOKEN" \
            -t 605067 \
            -e 1629989 \
            -r html,junit \
            --out-dir ./apidog-reports
        env:
          APIDOG_ACCESS_TOKEN: ${{ secrets.APIDOG_ACCESS_TOKEN }}

      - name: Upload report
        if: always()
        uses: actions/upload-artifact@v4
        with:
          name: apidog-report
          path: ./apidog-reports

Simetriyi fark edin. Aynı kontrol, aynı Node kurulumu, aynı kur-sonra-çalıştır şekli, aynı her zaman yükleme. Tek gerçek farklılıklar, bir sır olarak bağlanan jeton ve kimlik ile seçilen senaryodur. Bunu GitLab CI ve Jenkins varyantlarıyla da genişletmek isterseniz, Apidog CLI tam kılavuzu çalıştırıcılar arasında aynı deseni taşır.

Nasıl seçilir

Karar nadiren hangi çalıştırıcının "daha iyi" olduğuna indirgenir. Daha çok ekibinizin testleri nasıl yazmak ve saklamak istediğine bağlıdır.

Depo doğruluk kaynağı olduğunda Bruno'yu seçin. Her testi, kapsadığı kodun yanında yaşayan düz metin bir dosya olarak istiyorsanız, aynı çekme isteğinde incelenmesini, hesap gerektirmemesini ve çalışma zamanında ağ çağrısı yapmamasını istiyorsanız, Bruno bu modele tam olarak uyar. Testleri kod olarak gören, çevrimdışı ve açık kaynaklı araçlara değer veren ve .bru dosyalarını doğrudan düzenlemekte rahat olan ekipler için doğal bir seçimdir. Bruno Ultimate, daha sonra ekip ve yönetim katmanına ihtiyaç duyarsanız SSO, SCIM, gizli yönetici entegrasyonları ve denetim özellikleri ekler, bu nedenle ona adapte olmak bir engel yerine bir seçenektir.

Dosya düzeyinde kontrolden ziyade yazma hızı ve entegre bir iş akışı önemli olduğunda Apidog'u seçin. Bir test senaryosunu görsel olarak oluşturmayı, istekleri zincirlemeyi, değişkenleri çıkarmayı ve test kodunu elle yazıp hata ayıklamaya gerek kalmadan aynı senaryoyu farklı ortamlarda çalıştırmayı tercih ediyorsanız, Apidog'un modeli bu sürtünmeyi ortadan kaldırır. Tasarım, hata ayıklama, taklit etme ve test etme tek bir çalışma alanında gerçekleşir ve CLI, oluşturduğunuz senaryoyu tam olarak çalıştırır. Postman kurulumundan gelen ekipler için zihinsel model net bir şekilde eşleşir ve geçiş yolu, Apidog'un API testi için bir Postman alternatifi olarak sunduğu bir şeydir.

Her iki aracı da kullanma cevabı da var. Bazı ekipler, düşük seviyeli istek kontrolleri için Bruno'nun git-tabanlı dosyalarını tutarken, daha büyük zincirlenmiş senaryolar ve yoğun ortamlı regresyon çalıştırmaları için Apidog'u kullanır. İki CLI, tek bir işlem hattında sorunsuz bir şekilde bir arada bulunabilir; ayrı çıkış kodlarına sahip ayrı adımlardır.

Yalnızca CLI'lar arasında değil, platformlar arasında daha geniş bir karar veriyorsanız, Apidog vs Bruno karşılaştırması komut satırının ötesinde tasarım, taklit ve işbirliğini kapsar. İlk otomatik senaryonuzu kurmak ve aynı öğleden sonra terminalden çalıştırmak için Apidog'u indirin ve herhangi bir senaryonun CI/CD sekmesinden oluşturulan komutu kopyalayın.

button

Sıkça sorulan sorular

Bruno CLI ücretsiz mi?

Evet. Bruno CLI açık kaynaklıdır ve @usebruno/cli npm paketi olarak gönderilir. Makinenizde veya CI çalıştırıcınızda tamamen hesap veya jeton olmadan çalışır. Bruno Ultimate, SSO, SCIM, gizli yönetici entegrasyonları ve denetim gibi ekip ve yönetim özelliklerini ekleyen ayrı bir ücretli katmandır, ancak CLI'ın kendisi ücretsizdir.

Apidog CLI ücretsiz mi?

CLI, ücretsiz bir npm paketi olan apidog-cli'dır. Apidog projenizdeki test senaryolarını çalıştırır, bu nedenle ne çalıştırabileceğiniz Apidog planınıza bağlıdır, ancak komut satırı çalıştırıcısı ayrı bir ücretli ürün değildir.

Herhangi bir çalıştırıcı için testleri kod olarak yazmak zorunda mıyım?

Bruno için testleriniz, elle düzenleyebileceğiniz veya Bruno uygulamasında yazabileceğiniz .bru dosyalarıdır, bu nedenle doğrudan dokunacağınız bir metin formatı vardır. Apidog için senaryoları uygulamada görsel olarak oluşturursunuz ve CLI bunları kimliğe göre çalıştırır, bu nedenle test kodunu elle sürdürmezsiniz. Bu, ikisi arasındaki temel yazma farkıdır.

Her iki çalıştırıcı da bir test başarısız olduğunda derlemeyi durdurur mu?

Evet. Her ikisi de bir doğrulama başarısız olduğunda sıfır olmayan bir kodla çıkar ve CI bunu adımı başarısız olarak işaretlemek ve birleştirmeyi veya dağıtımı engellemek için okur. Bruno'nun --bail bayrağı ilk hatada durur; Apidog'un --on-error end'i de aynı şeyi yapar ve varsayılandır. Her iki çalıştırmayı da || true içine sarmaktan kaçının, bu çıkış kodunu yutar ve geçidi bozar.

CI'da hangi rapor formatını kullanmalıyım?

CI kontrol panelinizin bir geçiş/başarısızlık ağacına ayrıştırdığı makine tarafından okunabilir sonuç için JUnit XML kullanın ve göz atılabilir bir eser istiyorsanız HTML ekleyin. Bruno bunları --reporter-junit ve --reporter-html ile yazar; Apidog -r html,junit kullanır. Her ikisi de özel son işlem için JSON'u da destekler.

Bruno CLI'ın çalışması için internet bağlantısı veya hesap gerekiyor mu?

Hayır. Bruno, deponuzdaki .bru dosyalarını yerel olarak, oturum açma veya uzaktan getirme olmadan çalıştırır, bu da onu çevrimdışı veya yalıtılmış CI için uygun kılar. Apidog'un CLI'ı bir erişim jetonuyla kimlik doğrulaması yapar ve senaryoyu projenizden getirir, bu nedenle çalışma zamanında Apidog hizmetine ağ erişimine ihtiyaç duyar.

Herhangi bir CLI'ı global kurulum olmadan çalıştırabilir miyim?

Her ikisi için de evet. Kalıcı bir global kurulum olmadan çalıştırmak için npx @usebruno/cli run ... veya npx apidog-cli run ... kullanın, bu geçici CI çalıştırıcılarında kullanışlıdır. Yüklü sürümünüzdeki mevcut tam seçenekleri onaylamak için bru run --help veya apidog run --help komutunu çalıştırın.

API Tasarım-Öncelikli Yaklaşımı Apidog'da Uygulayın

API'leri oluşturmanın ve kullanmanın daha kolay yolunu keşfedin