Lock in $30 Savings on PRO—Offer Ends Soon! ⏳

APIシナリオテストツールとしてのrunn / 4 API testing tools

APIシナリオテストツールとしてのrunn / 4 API testing tools

APIテストツール4選!開発者が語る各ツールの特徴と魅力
https://trident-qa.connpass.com/event/299308/

このセッションではAPIシナリオテストツールとしてrunnで何ができるのかを紹介します。 また、runnの開発者として「runnがどのような設計思想で開発されているのか」「runnはどのようなAPIテストに向いていてどのようなAPIテストに向いていないのか」など直球で紹介できればと思います。

Ken’ichiro Oyama

November 30, 2023
Tweet

More Decks by Ken’ichiro Oyama

Other Decks in Technology

Transcript

  1. 4

  2. • runn ( means "Run N". is pronounced /rʌ́n én/.

    ) is a package/tool for running operations following a scenario. • https://github.com/k1LoW/runn • γφϦΦΛYAMLͰॻ͍ͯͦΕΛ΋ͱʹૢ࡞ʢΦϖϨʔγϣϯʣΛࣗಈԽͰ͖Δύο έʔδ/πʔϧ • ίϚϯυͱͯ͠΋GoͷύοέʔδʢϥΠϒϥϦʣͱͯ͠΋࢖͑Δ • APIςετ΋ϢʔεέʔεͷϑΝʔετϓϥΠΦϦςΟͱͯ͠Ґஔ෇͚͍ͯΔ 5 https://github.com/k1LoW/runn runnʢϥϯΤψʣ
  3. • 1όΠφϦͷγφϦΦ࣮ߦͷCLIίϚϯυʢπʔϧʣͱͯ͠࢖༻Ͱ͖Δ • 1όΠφϦ = CIϑϨϯυϦ • ͞·͟·ͳϓϩτίϧʹରԠ͓ͯ͠Γɺ1ͭͷγφϦΦ಺Ͱෳ਺૊Έ߹ΘͤΔ͜ͱ͕Մೳ • HTTP

    • gRPC • DatabaseʢSQLʣ • Chrome DevTools Protocol • ೚ҙίϚϯυͷ࣮ߦʢϩʔΧϧ/SSHʣ • GoͷTest Helperʢύοέʔδʣͱͯ͠࢖༻Ͱ͖Δ 17 https://github.com/k1LoW/runn runnͷػೳʢv0.91.0ʣʢ1/2ʣ
  4. 18 https://github.com/k1LoW/runn runnͷػೳʢv0.91.0ʣʢ2/2ʣ • γφϦΦϑΝΠϧʢYAMLʣͷϑΥʔϚοτ͕OpenAPI SpecϥΠΫ • γφϦΦ಺ͷεςοϓؒͷ஋͕ࣗಈͰ࿈ܞ͞Ε͍ͯΔ • ʮεςοϓAΛ࣮ߦ͔ͯ͠Βͦͷ݁ՌΛ࢖ͬͯεςοϓBΛ࣮ߦ͢Δʯͱ͍͏γφϦΦΛߏங͠΍͍͢

    • ෳ਺ͷγφϦΦͷ࣮ߦΛ૝ఆ࣮ͨ͠૷ • ෳ਺ͷγφϦΦͷ෼ׂ࣮ߦɺαϯϓϦϯά࣮ߦɺϥϯμϜ࣮ߦͳͲ͕Մೳ • ϧʔϓ࣮ߦ΍ϦτϥΠ࣮ߦͷ࢓૊Έ͕૊ΈࠐΈͰඋΘ͍ͬͯΔ • ಉ͡γφϦΦϑΝΠϧΛ࢖ͬͨෛՙςετʢϩʔυςετʣ͕Մೳ • ίϚϯυΛ runn run ͔Β runn loadt ʹมߋ͢Δ͚ͩɻෳ਺γφϦΦ࣮ߦ΋ͦͷ··Մೳ • γφϦΦ࣮ߦͷϩά΋ه࿥Մೳ • γφϦΦ࣮ߦͷϓϩϑΝΠϧ΋औಘՄೳʢ֤εςοϓͷܦա࣌ؒʣ
  5. • ϝΠϯͰ։ൃ͍ͯ͠Δͷ͸ @k1LoW ɹɹɹͱ @k2tzumi ɹɹɹ ͷ2ਓ • ͦΕͧΕrunnΛυοΫϑʔσΟϯά͍ͯͯ͠ɺ@k1LoW͕Goύοέʔδͱͯ͠ͷ runnɺ@k2tzumi͕ίϚϯυͱͯ͠ͷrunnΛओʹ࢖͍ͬͯΔ

    • υοΫϑʔσΟϯάΛ͍ͯ͠ΔதͰඞཁͱײͨ͡΋ͷ͕࣮૷͞ΕΔ͜ͱ͕ଟ͍ • GitHubͷIssue/Pull Request΍X(Twitter)ͷϋογϡλά #runn։ൃऀձٞ Λத৺ʹ ํ਑΍։ൃΛਐΊΔʢ࣌ʑϦϞʔτɺ࣌ʑΧϯϑΝϨϯεͷ࿓Լʣ 20 runn͸ͲͷΑ͏ͳઃܭࢥ૝Ͱ࡞ΒΕ͍ͯΔͷ͔ runnͷ։ൃମ੍
  6. 27 runn͸ͲͷΑ͏ͳઃܭࢥ૝Ͱ࡞ΒΕ͍ͯΔͷ͔ ಋೖ͸γϯϓϧʹ • 1όΠφϦ • ؆୯Πϯετʔϧʢ brew install k1LoW/tap/runn

    ʣ • θϩίϯϑΟάͰςετ࣮ߦʢ runn run **/*.yml ʣ • cURL΍ΞΫηεϩά͔ΒͷγφϦΦϑΝΠϧͷੜ੒ʢ runn new ʣ • ͳΜͳΒϦϞʔτͷγφϦΦϑΝΠϧΛ࣮ߦʢ —-scopes run:remote ʣ
  7. 28 runn͸ͲͷΑ͏ͳઃܭࢥ૝Ͱ࡞ΒΕ͍ͯΔͷ͔ ֮͑Δ͜ͱ͸γϯϓϧɻͨͩɺ֮͑ͨ͜ͱͰͰ͖ͦ͏ͳ͜ͱ͕ʮ࣮͸Ͱ͖ΔʯΑ͏ʹ • ࣮͸ɺloop: ηΫγϣϯͰϦτϥΠͷઃఆ͕Ͱ͖Δ • ࣮͸ɺSSHϥϯφʔΛ࢖ͬͯϙʔτϑΥϫʔσΟϯά͕Ͱ͖Δ • ࣮͸ɺγφϦΦͷ࣮ߦΛγϟοϑϧͨ͠Γ෼ׂͨ͠ΓαϯϓϦϯάͨ͠ΓͰ͖Δ

    • ࣮͸ɺࣦഊͨ͠γφϦΦ͚ͩΛ࠶࣮ߦ͢Δ͜ͱ͕Ͱ͖Δ • ࣮͸ɺ࣮ߦ͕࣌ؒେ͖͍γφϦΦΛ༏ઌ࣮ͯ͠ߦ͢Δ͜ͱ͕Ͱ͖Δ ৽͍͠ػೳΛ1ͭ࡞Δ࣌ɺͦͷػೳͱطଘͷػೳͷ૊Έ߹Θͤ·ͰؚΊͯσβΠϯ͢Δ
  8. 31 runn͸ͲͷΑ͏ͳAPIςετʹ޲͍͍ͯͯͲͷΑ͏ͳAPIςετʹ޲͍͍ͯͳ͍ͷ͔ runn͕޲͍͍ͯΔAPIςετ • APIΛ։ൃ͢ΔΤϯδχΞ͕ɺAPIͷ։ൃ։͔࢝࣌Β࣮ࢪ͢ΔAPIςετ • cURLʹΑΔख࡞ۀʹΑΔڍಈ֬ೝͷ୅ΘΓʹಋೖ͢Δͷ͕͍͔ܰ΋ • APIαʔό͕Goͷ৔߹runnΛ૊ΈࠐΉ͜ͱͰ go

    test Ͱ࣮ߦͰ͖Δ • ෳ਺ͷϦΫΤετΛ·͍ͨͩγφϦΦ͕ଟ͋͘ΔAPIςετ • εΩʔϚۦಈͷ։ൃݱ৔ • γϯλοΫε͕ࣅ͍ͯΔͷͰࢀߟʹ͠΍͍͢ • OpenAPI Spec΍Protocol Buffersʢ.protoϑΝΠϧʣʹΑΔϦΫΤετ/Ϩεϙϯε ͷγφϦΦࣗମͷόϦσʔγϣϯ΋Ͱ͖Δ
  9. 32 runn͸ͲͷΑ͏ͳAPIςετʹ޲͍͍ͯͯͲͷΑ͏ͳAPIςετʹ޲͍͍ͯͳ͍ͷ͔ runn͕޲͍͍ͯͳ͍APIςετ • ϦΫΤετ/Ϩεϙϯεͷ1ϖΞ͚ͩͰࡁΉΑ͏ͳAPIςετ͕ଟ͍৔߹ • ςετʹରͯ͠runnͷγφϦΦϑΝΠϧͷهड़͕ଟগ৑௕͔΋͠Εͳ͍ • OpenAPI Spec΍Protocol

    Buffersʢ.protoϑΝΠϧʣʹ׳Ε͍ͯͳ͍։ൃݱ৔ • runnͷγφϦΦϑΝΠϧͷγϯλοΫε͕ཪ໨ʹͰͦ͏ • ٯʹrunnͷγϯλοΫεʹͳΕͨΒOpenAPI Spec͕ಡΈ΍͘͢ͳΔੈք… •