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

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

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

    View full-size slide

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

    View full-size slide

  3. 「働きがいのある会社(GPTW)」
    ランキング(従業員25~99人部門)
    1位 を
    3回 受賞
    1位 1位 1位

    View full-size slide

  4. 本日お話すること
    Copyright © Acroquest Technology Co., Ltd. All rights reserved. 4
    1. Karateとは何か?
    2. 生成AIをKarateに
    適用してみた話
    3. 生成AIがテスト自動化に
    もたらす価値

    View full-size slide

  5. Copyright © Acroquest Technology Co., Ltd. All rights reserved. 5
    Karateとは
    何か?

    View full-size slide

  6. Karateは、テスト自動化の対応範囲の広さが魅力
    Copyright © Acroquest Technology Co., Ltd. All rights reserved. 6
    Unified
    Test Automation
    Platform
    (open-source)
    ① APIテスト
    ② API Mock(テストダブル)
    ③ UIテスト
    ④ 性能テスト

    View full-size slide

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

    View full-size slide

  8. 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シナリオをまとめて実行

    View full-size slide

  9. 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との
    連係

    学習コストが
    低い
    ⚫ 直感的なテストケースの
    記述
    • 新人でもハマらず
    導入できている事例多数
    ⚫ プログラマでなくても
    作成できる
    ⚫ デバッグ可能
    ⚫ 分かりやすい
    実行結果レポート

    View full-size slide

  10. Karateの主な機能
    Copyright © Acroquest Technology Co., Ltd. All rights reserved. 10

    シンプルな
    テストケース記述

    ローコード
    スキーマ

    データ駆動テスト
    対応

    プログラミング
    言語拡張

    テストダブル

    IDEサポート
    • シナリオ定義/シナリオ再利用
    • 分かりやすいテスト実行結果
    レポート
    • HTTP標準サポート
    • Assertion
    • Fuzzy Matching
    • テストデータと
    テストシナリオの分離
    • Loop処理
    • JavaScript関数の呼び出し
    • Javaコードの呼び出し
    • APIのモック化 • VS Code プラグイン
    • IntelliJ プラグイン
    • デバッグなども可能

    View full-size slide

  11. ①シンプルなテストケース記述
    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処理

    View full-size slide

  12. ①シンプルなテストケース記述
    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の呼び出しができる

    View full-size slide

  13. ②ローコード・スキーマ
    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

    View full-size slide

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

    View full-size slide

  15. ④プログラミング言語拡張
    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 のクラスも実行できる!
    何か複雑な処理や判定が必要になる場合でも、独自関数で対応可能

    View full-size slide

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

    View full-size slide

  17. ⑥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のプラグインを利用することで、効率的なテストケース作成が可能

    View full-size slide

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

    View full-size slide

  19. Copyright © Acroquest Technology Co., Ltd. All rights reserved. 19
    生成AIをKarateに
    適用してみた話

    View full-size slide

  20. 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
    プロンプト

    View full-size slide

  21. ChatGPTでKarateのテストシナリオが作成できたら便利!
    Copyright © Acroquest Technology Co., Ltd. All rights reserved. 21
    思っていたよりも
    簡単で精度も良い!
    簡単なテストケースで
    あればこれで十分
    効率的に作成できる。

    View full-size slide

  22. 連続したシナリオも生成することが可能
    Copyright © Acroquest Technology Co., Ltd. All rights reserved. 22
    Excelで連続したシナリオを自然言語で定義

    View full-size slide

  23. 連続したシナリオも生成することが可能
    Copyright © Acroquest Technology Co., Ltd. All rights reserved. 23
    Excelに定義したテストシナリオを元に
    自動でKarateのシナリオが作成された!

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  26. Copyright © Acroquest Technology Co., Ltd. All rights reserved. 26
    生成AIが
    テスト自動化に
    もたらす価値

    View full-size slide

  27. エンジニアにとっては効率UP間違いなし!
    Copyright © Acroquest Technology Co., Ltd. All rights reserved. 27
    ① テスト自動化の生産性が
    向上する
    ② QA担当者/開発者にも
    新規メンバにも
    導入しやすい
    ③ テスト対象システムが
    未開発でもテストシナリオを
    作成できる

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  31. これであなたも
    Karate道

    View full-size slide