Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ChatGPTとKarateで実現するシン・BDD / Realizing New BDD t...

ChatGPTとKarateで実現するシン・BDD / Realizing New BDD through ChatGPT and Karate

ソフトウェアテスト自動化カンファレンス2023での発表資料
https://testautomationresearch.connpass.com/event/299491/
#stac2023

Takanori Suzuki

December 09, 2023
Tweet

More Decks by Takanori Suzuki

Other Decks in Technology

Transcript

  1. Copyright © Acroquest Technology Co., Ltd. All rights reserved. ChatGPT

    と Karate で 実現するシン・BDD 2023/12/09 Acroquest Technology Co., Ltd. 鈴木 貴典 1 ソフトウェアテスト自動化カンファレンス2023 #stac2023
  2. Copyright © Acroquest Technology Co., Ltd. All rights reserved. 2

    自己紹介 ◼ 所属 • Acroquest Technology 株式会社 ◼ 主な業務分野 • システムアーキテクト • クラウドサービス開発 • IoT/AI 鈴木 貴典 シニアテクニカルアーキテクト Acro = 先端を quest = 探究する
  3. 本日お話すること Copyright © Acroquest Technology Co., Ltd. All rights reserved.

    4 1. Karateとは何か? 2. 生成AIをKarateに 適用してみた話 3. 生成AIがテスト自動化に もたらす価値
  4. Karateは、テスト自動化の対応範囲の広さが魅力 Copyright © Acroquest Technology Co., Ltd. All rights reserved.

    6 Unified Test Automation Platform (open-source) ① APIテスト ② API Mock(テストダブル) ③ UIテスト ④ 性能テスト
  5. Karateのテストシナリオ Copyright © Acroquest Technology Co., Ltd. All rights reserved.

    7 ⚫ Gherkin記法で テストケースを記述 ⚫ BDD(Behavior Driven Development)の概念で、 シナリオテストが可能 ⚫ テスト構造が分かりやすく、 内容の理解やテストケース のメンテナンスが容易
  6. Karateによるテスト実行+実行結果 Copyright © Acroquest Technology Co., Ltd. All rights reserved.

    8 java -jar karate.jar my-test.feature java -jar karate.jar some/folder https://karatelabs.github.io/karate/karate-netty/#standalone-jar テスト実行結果のHTMLレポートも 分かりやすい 単一のバイナリだけで 実行可能 単一のKarateシナリオを実行 複数のKarateシナリオをまとめて実行
  7. Karate を選択したポイント Copyright © Acroquest Technology Co., Ltd. All rights

    reserved. 9 ① テスト対象の カバーの広さ ⚫ 様々なAPIに対応 • REST-API JSON, YAML, XML, Text, CSV, Bytes • GraphQL • WebSockets • gRPC ⚫ APIモック (テストダブル) ⚫ 性能テスト ⚫ UIテスト ② 柔軟なDSLでの テストシナリオ ⚫ API単発ではなく シナリオテストが可能 ⚫ シナリオを分割して 再利用なども可能 ⚫ Request/Response、 Assert処理に対する 豊富な機能群 ⚫ Java/JavaScriptとの 連係 ③ 学習コストが 低い ⚫ 直感的なテストケースの 記述 • 新人でもハマらず 導入できている事例多数 ⚫ プログラマでなくても 作成できる ⚫ デバッグ可能 ⚫ 分かりやすい 実行結果レポート
  8. Karateの主な機能 Copyright © Acroquest Technology Co., Ltd. All rights reserved.

    10 ① シンプルな テストケース記述 ② ローコード スキーマ ③ データ駆動テスト 対応 ④ プログラミング 言語拡張 ⑤ テストダブル ⑥ IDEサポート • シナリオ定義/シナリオ再利用 • 分かりやすいテスト実行結果 レポート • HTTP標準サポート • Assertion • Fuzzy Matching • テストデータと テストシナリオの分離 • Loop処理 • JavaScript関数の呼び出し • Javaコードの呼び出し • APIのモック化 • VS Code プラグイン • IntelliJ プラグイン • デバッグなども可能
  9. ①シンプルなテストケース記述 Copyright © Acroquest Technology Co., Ltd. All rights reserved.

    11 Feature: cats end-point Background: * url demoBaseUrl * configure logPrettyRequest = true * configure logPrettyResponse = true Scenario: create and retrieve a cat # create a new cat Given path 'cats’ And request { name: 'Billie' } When method post Then status 200 And match response == {id:'#number', name:'Billie'} * def id = response.id シナリオの開始 リクエストの定義(Given) +送信(When) レスポンスの確認(Then) →Assert処理
  10. ①シンプルなテストケース記述 Copyright © Acroquest Technology Co., Ltd. All rights reserved.

    12 Feature: cats end-point Background: * url demoBaseUrl * configure logPrettyRequest = true * configure logPrettyResponse = true Scenario: create and retrieve a cat # create a new cat Given path 'cats’ And request { name: 'Billie' } When method post Then status 200 And match response == {id:'#number', name:'Billie'} * def id = response.id # get by id Given path 'cats’, id When method get Then status 200 And match response == {id:’#(id)', name:'Billie'} リクエストやレスポンスの内容を利用して、 連続したAPIの呼び出しができる
  11. ②ローコード・スキーマ Copyright © Acroquest Technology Co., Ltd. All rights reserved.

    13 # match(一致) * match myJson == {a:'1', b:2} # match contains(含む) * def foo = {bar:1, baz:'hello', ban:'world'} * match foo contains {bar: 1} # パラメータの有無 * def test = {id:'001’, name:'Bob'} • match test == {id:'001’, name:'#present’, age:'#notpresent’} # 範囲 * def date = {month:3} • match date == {month:'#? _ > 0 && _ < 13’} # データの型 * def test = {foo:1, bar:‘baz’} * match test == {foo:'#number’, bar:’#string’} リクエストやレスポンス、アサーションの処理で必要となる スキーマの処理を、標準で多数サポート アサーション Fuzzy Matching
  12. ③データ駆動テスト対応 Copyright © Acroquest Technology Co., Ltd. All rights reserved.

    14 Scenario Outline: データ駆動テストーサンプルシナリオ Given path 'api/v1/circuits/<name>.json' When method get Then match $.MRData.CircuitTable.Circuits[0].Location.country == '<country>’ Examples: | name | country | | monza | Italy | | spa | Belgium | | sepang | Malaysia | テーブル形式で 複数データを指定 動的パラメータ
  13. ④プログラミング言語拡張 Copyright © Acroquest Technology Co., Ltd. All rights reserved.

    15 * def greeter = function(name){ return 'hello ' + name } * assert greeter('Bob') == 'hello Bob' JavaScript が使える! * def dateStringToLong = """ function(s) { var SimpleDateFormat = Java.type('java.text.SimpleDateFormat'); var sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); return sdf.parse(s).time; } """ * assert dateStringToLong("2016-12-24T03:39:21.081+0000") == 1482550761081 Java のクラスも実行できる! 何か複雑な処理や判定が必要になる場合でも、独自関数で対応可能
  14. ⑤テストダブル Copyright © Acroquest Technology Co., Ltd. All rights reserved.

    16 自動化したいけど、よくある面倒なパターン テスト対象 サービス 依存関係 サービス テスト対象のAPI テスト対象 サービス テスト対象のAPI テストダブル (API Mock) Karateを使えば、このような構成ができます これをどうするか?
  15. ⑥IDEサポート Copyright © Acroquest Technology Co., Ltd. All rights reserved.

    17 VS Code IntelliJ ※ Karate Labs 公式プラグイン(一部有償) https://www.karatelabs.io/vs-code https://www.karatelabs.io/intellij IDEのプラグインを利用することで、効率的なテストケース作成が可能
  16. Karate利用事例:SBペイメントサービス様 Copyright © Acroquest Technology Co., Ltd. All rights reserved.

    18 ▪課題 ⚫ 40以上の決済サービスと連係しており、 機能追加などを行う度に、繰り返しテストが 必要なため、多大な手間がかかっていた。 ⚫ 自動化するためには、Web画面とAPIとを 連携した試験が必要であった。 ▪Karate導入効果 ⚫ 複数の決済サービスに対して 常に自動テストを実行すること ができるようになった。 ⚫ Web画面とAPIを連携させる テストシナリオを実現することができた。 100以上の テスト シナリオを 自動化
  17. Copyright © Acroquest Technology Co., Ltd. All rights reserved. 19

    生成AIをKarateに 適用してみた話
  18. ChatGPTでKarateのテストシナリオが作成できたら便利! Copyright © Acroquest Technology Co., Ltd. All rights reserved.

    20 あなたは、Test Automation Tool の Karate を利用するテストエキスパートです。 Karateで、以下を行うテストシナリオを生成してください。 # Given - HTTPリクエストを送信する。 - BodyはJSON形式とする。 # When - POSTで送信する。 # Then - HTTPステータス200であること。 - レスポンスに、データが10件あること。 - レスポンスで、ID = 100 のデータが含まれること。 ChatGPT プロンプト
  19. ChatGPTでKarateのテストシナリオが作成できたら便利! Copyright © Acroquest Technology Co., Ltd. All rights reserved.

    21 思っていたよりも 簡単で精度も良い! 簡単なテストケースで あればこれで十分 効率的に作成できる。
  20. 連続したシナリオも生成することが可能 Copyright © Acroquest Technology Co., Ltd. All rights reserved.

    23 Excelに定義したテストシナリオを元に 自動でKarateのシナリオが作成された!
  21. OpenAPIの定義からもテストシナリオを生成 Copyright © Acroquest Technology Co., Ltd. All rights reserved.

    24 参考:https://acro-engineer.hatenablog.com/entry/2023/08/30/110000 こちらもOpenAPIの仕様を理解して テストシナリオ(ケース)が出力される
  22. Copyright © Acroquest Technology Co., Ltd. All rights reserved. 25

    ChatGPTとKarateの組み合わせは効果的! 自然言語による柔軟な テストシナリオの生成ができる ChatGPT 大規模言語モデル(LLM) Karate ドメイン固有言語(DSL)
  23. Copyright © Acroquest Technology Co., Ltd. All rights reserved. 26

    生成AIが テスト自動化に もたらす価値
  24. エンジニアにとっては効率UP間違いなし! Copyright © Acroquest Technology Co., Ltd. All rights reserved.

    27 ① テスト自動化の生産性が 向上する ② QA担当者/開発者にも 新規メンバにも 導入しやすい ③ テスト対象システムが 未開発でもテストシナリオを 作成できる
  25. Copyright © Acroquest Technology Co., Ltd. All rights reserved. 28

    ソフトウェアテストライフサイクル(STLC)を 効率的に回す 1. 要件分析 2. テスト 計画 3. テスト 設計 4. テスト環境 構築 5. テスト 実行 6. テスト 完結 ソフトウェア テスト ライフサイクル (STLC) ChatGPT Karate
  26. Copyright © Acroquest Technology Co., Ltd. All rights reserved. 29

    顧客・ユーザー 開発 QA ソフトウェアテストに 関わる人々の コミュニケーションを よりスマートに!
  27. 本日のまとめ Copyright © Acroquest Technology Co., Ltd. All rights reserved.

    30 ① Karateを利用することで 幅広くテスト自動化を推進できる ② ChatGPT+Karateの組み合わせで テストシナリオの作成がより効率的になる ③ 生成AIによりソフトウェアテスト自動化も 新時代へ!