Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

③データ駆動テスト対応 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 | テーブル形式で 複数データを指定 動的パラメータ

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

これであなたも Karate道