61
2014/12/14 kyon_mm STA Introduction

#STAC2014 システムテスト自動化ハンズオン

  • Upload
    kyon-mm

  • View
    5.337

  • Download
    1

Embed Size (px)

Citation preview

2014/12/14 kyon_mm

STA Introduction

kyon_mm

Test Architect

TDD/BDD Expert

27 years old.

Self Introduction

Time Table11:50 : Ice break, deploy, test

13:15 - 14:15 work

14:30 - 15:30 work

15:50 - 16:35 work

16:35 - 17:00 closing

AgendaToday’s Goal

System Test Automation

About today’s Challenge

Geb+Spock

Today’s Goal

練習する事

目的

効果の高いものに集中する

一通りやってみる

練習する事

目的テスト対象の見極め

テスト設計

優先順位

プロセス

Testing!「あなたたちが持つテスト技術によってこの製品をより良くする」ということが使命です。

今回は手始めにテストレベルが高いものからやってみるという状況で考えてみてください。

Testing!「開発者の怠惰サポート」より「気づきにくい問題の発見」を

「生成可能なテスト」より「生成しづらいテスト」を

「特定コンテキストだけ」より「複数コンテキスト」を

AgendaToday’s Goal

System Test Automation

About today’s Challenge

Geb+Spock

System Test Automation

System Test Automation

System Test

Automation

Process

System testシステム全体を動作させてのテスト。コンポーネントテスト、統合テストでは検出されないようなバグを検出するためのテストになります。自然とJSTQBのようなステージング環境が想定され、実際のシナリオが必要になります。

Test Levelユニット

コンポーネント

統合

システム

受け入れ

Automation設計

実行

レポート

バグ分析

Process計画

設計

実装

実行

Share ToolGoogle SpreadSheet, Document

HipChat, Idobata, Kato.im

GitHub + Issue + Wiki

Paper + Pen

Process計画

設計

実装

実行

Plan「どんなテスト」を「どれくらいの時間」で「何を」「どれくらい網羅」して「どの順番」でやる

リスク分析、対処法、見積もり、実現可能性を合わせて「テストの全体像と進め方」を共有し、今後も変更しやすくしたもの。

Designテストスイートやテストケースの設計。

デシジョンテーブル、状態遷移図で整理したり

「何を」「どれくらい」網羅する

「怪しいところ」を組み合わせる

Implementation実行出来るテストケースを記述する

いわゆるテストを実行する手順を記述する

必要なサポート(クラスや別テーブルなど)も記述する

Executeテストを実行して、結果を見る。

テストを直したり、新しいテストをつくったり

計画に反映したり

プロダクトに反映したり

Process計画

設計

実装

実行

Share ToolGoogle SpreadSheet, Document

HipChat, Idobata, Kato.im

GitHub + Issue + Wiki

Paper + Pen

Testing!「あなたたちが持つテスト技術によってこの製品をより良くする」ということが使命です。

今回は手始めにテストレベルが高いものからやってみるという状況で考えてみてください。

Testing!「開発者の怠惰サポート」より「気づきにくい問題の発見」を

「生成可能なテスト」より「生成しづらいテスト」を

「特定コンテキストだけ」より「複数コンテキスト」を

About today’s Challenge

Challenge

Application

Testing Tool

Application

Test Case Manage

テストケースにタグをつけて管理できるWebGUIアプリ

ログイン認証

未ログイン

トップ

ログイン済み ※ヘッダを介して遷移する

ダッシュボード

ユーザー管理 (管理者用機能)

テストケース

テストタグ

Grails

Groovy

Heroku

Java Postgres SQL

Application Code

Mandrill

Inside Screen画面間の動作は同期

画面内の動作は非同期

未ログインで各ページにアクセスしたら、トップページ表示して、ログイン後に元のページを表示する。

Outside Screen

ユーザー情報を変更するとメール通知がくる

システムのログはherokuに垂れ流している

Tag

name : 250, unique

description : 1000

TestCase

name : 250

scenario : 1000

tags : 0 - n

Userusername

password

email

enabled

Challenge

Application

Testing Tool

Backgroundテストケース専用の管理ツールをつくって今後、テストプロセセスをよくしていきたい。

そのためのプロトタイプができたので、評価してほしい。

継続的な開発をする前提。

Testing!「あなたたちが持つテスト技術によってこの製品をより良くする」ということが使命です。

今回は手始めにテストレベルが高いものからやってみるという状況で考えてみてください。

Testing!「開発者の怠惰サポート」より「気づきにくい問題の発見」を

「生成可能なテスト」より「生成しづらいテスト」を

「特定コンテキストだけ」より「複数コンテキスト」を

Testing Tool

Spock

Geb

GroovyでWeb Driverをラップしたライブラリ

Spock

Geb

Groovyでパラメタライズしやすいテスティングフレームワーク

Geb Basic

Test, Page, Module

$(), css selector, jQuery like Navigator

Test, Page, Module

TestClassJUnit,Spock,TestNGを使ってブラウザを動作させるコードを書く JUnit → @Test Spock → extends GebReportingSpec, GebSpec

PageObject

画面毎につくるクラス テストから利用する URL 画面オブジェクト 不変条件 画面に必要な操作

Module

テーブルや、複数画面で共有したい画面オブジェクトを定義する PageObjectの画面オブジェクトに利用する

URL

このページを表示させるURLの相対パスか、絶対パス。 ルートとなるURLはGebConfig.groovyに書く。

at

to TestCasePageやat TestCasePageとしたときにassertする内容 ページの不変条件。

content

ページ中でアクセスする各オブジェクトを定義する。

table

<table>の内容を取る例

General

ヘッダーのような共通的なものを定義する例

Geb Basic

Test, Page, Module

$(), css selector, jQuery like Navigator

Navigator

画面オブジェクトへアクセスするためのクラスや操作のことです。

jQuery like Navigator$(tagName, attribute:value | index)

$(tagName.class, attribute:value | index)

$(“div”, name:”description")

$(“div.main”, name:”description”)

$(“input”, name:”create”)

Geb Infrasrc/test/resources/GebConfig.groovy

baseUrl, wait

Driver

htmlUnit, Chrome, FireFox, IE, PhantomJs

Geb Reference

http://gebish.org

http://kyon-mm.hatenablog.com

Deployhttps://github.com/kyonmm/grabbit

click [deploy to heroku]

input mandrill-api-key

deploy!

Test Project Template

https://github.com/kyonmm/geb-template

download zip OR git clone