Home
Explore
Submit Search
Upload
Login
Signup
Advertisement
Java web application testing
Report
Tokuhiro Matsuno
Follow
Software Engineer at LINE Corp
Apr. 13, 2015
•
0 likes
20 likes
×
Be the first to like this
Show More
•
7,677 views
views
×
Total views
0
On Slideshare
0
From embeds
0
Number of embeds
0
Check these out next
脱・独自改造! GebでWebDriverをもっとシンプルに
Hiroko Tamagawa
おっさんES6/ES2015,React.jsを学ぶ
dcubeio
クラウド時代だからSpring-Retryフレームワーク
Y Watanabe
ほんとうに便利だった業務で使えるJava SE8新機能(JJUG CCC 2015 Spring)
Yuuki Fukuda
Springを使ったwebアプリにリファクタリングしよう
土岐 孝平
テンプレートエンジンにMixer2を使うとSeleniumでのテストもラクになるかもねという話
Y Watanabe
Lineにおけるspring frameworkの活用
Tokuhiro Matsuno
Jsug 20160422 slides
Yuichi Hasegawa
1
of
151
Top clipped slide
Java web application testing
Apr. 13, 2015
•
0 likes
20 likes
×
Be the first to like this
Show More
•
7,677 views
views
×
Total views
0
On Slideshare
0
From embeds
0
Number of embeds
0
Download Now
Download to read offline
Report
Software
JJUG CCC 2015 Spring
Tokuhiro Matsuno
Follow
Software Engineer at LINE Corp
Advertisement
Advertisement
Advertisement
Recommended
プログラミング言語Clojureのニャンパスでの活用事例
sohta
13.6K views
•
34 slides
Javaで1から10まで書いた話(sanitized)
Tokuhiro Matsuno
12.3K views
•
164 slides
JobStreamerではじめるJavaBatchのクラウド分散実行
Yoshitaka Kawashima
11.4K views
•
51 slides
SeleniumIDEとSelenium WebDriver × Node.js Seleniumで業務効率化する15分
松田 千尋
11.1K views
•
29 slides
Jsug2015 summer spring適用におけるバッドノウハウとベタープラクティス
Yoichi KIKUCHI
10.2K views
•
148 slides
capybara で快適なテスト生活を
Ryunosuke SATO
14.7K views
•
44 slides
More Related Content
Slideshows for you
(20)
脱・独自改造! GebでWebDriverをもっとシンプルに
Hiroko Tamagawa
•
37.1K views
おっさんES6/ES2015,React.jsを学ぶ
dcubeio
•
18.1K views
クラウド時代だからSpring-Retryフレームワーク
Y Watanabe
•
3.2K views
ほんとうに便利だった業務で使えるJava SE8新機能(JJUG CCC 2015 Spring)
Yuuki Fukuda
•
44.3K views
Springを使ったwebアプリにリファクタリングしよう
土岐 孝平
•
6.7K views
テンプレートエンジンにMixer2を使うとSeleniumでのテストもラクになるかもねという話
Y Watanabe
•
4.7K views
Lineにおけるspring frameworkの活用
Tokuhiro Matsuno
•
33.5K views
Jsug 20160422 slides
Yuichi Hasegawa
•
5.1K views
2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクション
Takahiro Okumura
•
11.6K views
Seasar2で作った俺たちのサービスの今
Koichi Sakata
•
25.5K views
最近のSpringFramework2013 #jjug #jsug #SpringFramework
Toshiaki Maki
•
4K views
Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframework
Toshiaki Maki
•
16.6K views
【B-1】kintoneでお手軽コールセンター!
Sakae Saito
•
5K views
Clojure Language Update (2015)
sohta
•
1.4K views
Gradle handson
Nemoto Yusuke
•
10.3K views
2016/12/17 ASP.NET フロントエンドタスク入門
miso- soup3
•
755 views
JavaEE7徹底入門 プレゼンテーション層の開発 JSF
Masuji Katoda
•
5.4K views
楽天トラベルとSpring(Spring Day 2016)
Rakuten Group, Inc.
•
13.9K views
JavaFXとRoboVMを使ってiOS上で動くアプリを試してみた
Satoshi Takami
•
6.8K views
2015/11/15 Javaでwebアプリケーション入門
Asami Abe
•
78.7K views
Similar to Java web application testing
(20)
5 年続く 「はてなブックマーク」 アプリを継続開発する技術
Yu Nobuoka
•
15K views
我が家のフロントエンド開発事情
Naoki Yamada
•
3.9K views
よくある業務開発の自動化事情 #jjug_ccc #ccc_cd3
irof N
•
32.6K views
bottle.pyをつかったチャットアプリ作成チュートリアル
Satoshi Yamada
•
5.1K views
Spring Boot + Doma + AngularJSで作るERP 〜JavaQneバージョン〜 #jqfk
学 松崎
•
4.3K views
俺とAngular JS 2
Masayuki KaToH
•
2K views
Swagger jjug ccc 2018 spring
kounan13
•
2.6K views
Spring.project
広平 田村
•
1.5K views
Challenge PWA!! Technical Edition @JAG201809
Ryu Shindo
•
364 views
今後のWeb開発の未来を考えてangular jsにしました(拡大版)
Mitsuru Ogawa
•
7.9K views
開発ライフサイクルから見たAngularJS
Mizuho Sakamaki
•
25.3K views
[Observability conference 2022/3/11] NewsPicks のプロダクト開発エンジニアが実践するスキルとしての SRE
Iida Yukako
•
989 views
S14 t3 yosuke_yamashita
Takeshi Akutsu
•
320 views
これから始めるSpringのwebアプリケーション
土岐 孝平
•
19K views
[GrapeCity Web TECH FORUM 2018]グレープシティJavaScript製品のご紹介 活用のコツと開発のポイント
ツール事業部 グレープシティ株式会社
•
871 views
師弟登壇2015 GMOペパボ @orzup
Asami Nakano
•
11.9K views
PhoneGapでWebアプリをスマホアプリ化
Takashi Okamoto
•
3.5K views
Lightning componentとlightning design system
Noriko Iwai
•
1K views
ウェブパフォーマンスの基礎とこれから
Hiroshi Kawada
•
111.6K views
詳解!自動結合テスト #jasst
kyon mm
•
8.9K views
Advertisement
More from Tokuhiro Matsuno
(20)
20190126 yapc tokyo keynote
Tokuhiro Matsuno
•
9.1K views
最近のPerlバイナリマネージャー Perl 編
Tokuhiro Matsuno
•
1.5K views
Plenv and perl build, and search.cpan.org
Tokuhiro Matsuno
•
1.3K views
MyBatis を利用した web application 開発についてのご紹介
Tokuhiro Matsuno
•
12.8K views
Yapc fukuoka crust
Tokuhiro Matsuno
•
2.5K views
Perl6 と web 開発と
Tokuhiro Matsuno
•
909 views
Openjdk 入門してみた話
Tokuhiro Matsuno
•
3.2K views
promgen - prometheus managemnet tool / simpleclient_java hacks @ Prometheus c...
Tokuhiro Matsuno
•
20.7K views
Perl6 web-app
Tokuhiro Matsuno
•
2.3K views
Perl6 meets JVM
Tokuhiro Matsuno
•
5.1K views
Server::Starter meets Java
Tokuhiro Matsuno
•
4.3K views
Test::Kantan - Perl and Testing
Tokuhiro Matsuno
•
5.1K views
[jjug] Java と Benchmark
Tokuhiro Matsuno
•
4.4K views
Devel::NYTProf::Apache
Tokuhiro Matsuno
•
1.8K views
MySQL のチューニングについて考えてみた
Tokuhiro Matsuno
•
2.7K views
Archer
Tokuhiro Matsuno
•
3.7K views
MySQL::NameLocker
Tokuhiro Matsuno
•
1.5K views
Inside MF
Tokuhiro Matsuno
•
1.1K views
Web Application FLow
Tokuhiro Matsuno
•
1K views
madeye agents
Tokuhiro Matsuno
•
1.1K views
Recently uploaded
(20)
国外学历【奥克兰商学院研究生文凭毕业证留学生首选】
jsad789
•
2 views
留信网认证可查【伊利诺伊理工学院文凭证书毕业证购买】
1lkjhg
•
2 views
在哪里可以做《邦德大学文凭证书|毕业证》
kjds1245
•
2 views
①【伦敦政治经济学院毕业证文凭学位证书|工艺完美复刻】
0987hgh789
•
2 views
☀️【波恩大学毕业证成绩单留学生首选】
bjd42as
•
2 views
①【利兹贝克特大学毕业证文凭学位证书|工艺完美复刻】
love445ds
•
2 views
測量データ処理システム「MarineDiscoveryクラウド」の紹介
ssuserbceee8
•
39 views
測量データ処理ソフト・MarineDiscoveryの紹介
ssuserbceee8
•
22 views
留信网认证可查【威得恩大学文凭证书毕业证购买】
32lkhng
•
2 views
国外学历【麻省大学波士顿分校研究生文凭毕业证留学生首选】
534asdsa
•
4 views
測量支援ソフト「みとおしえ」「みとおしえクラウド」の紹介
ssuserbceee8
•
42 views
留信网认证可查【麻省大学洛威尔分校文凭证书毕业证购买】
hh123hh1
•
2 views
留信网认证可查【怀俄明大学文凭证书毕业证购买】
1lkjhg
•
2 views
在哪里可以做《俄克拉荷马大学文凭证书|毕业证》
lobd15
•
2 views
留信网认证可查【堪萨斯大学文凭证书毕业证购买】
1lkjhg
•
2 views
留信网认证可查【俄亥俄大学文凭证书毕业证购买】
1lkjhg
•
2 views
留信网认证可查【新学院文凭证书毕业证购买】
hh123hh1
•
2 views
留信网认证可查【奥克兰大学文凭证书毕业证购买】
ihh14ds
•
2 views
留信网认证可查【南安普顿大学文凭证书毕业证购买】
32lkhng
•
2 views
留信网认证可查【莱比锡大学文凭证书毕业证购买】
khh123kj
•
2 views
Advertisement
Java web application testing
Java Web アプリケーショ ンのテスティングの話 JJUG
CCC 2015 Spring tokuhirom
初心者向けっちゃ 初心者向け
コミュニティイベントなので コミュニティからのフィード バック重視
答えを提供するよりは 議論の元を提供する感じで
自己紹介
自己紹介なんて 不要だと思うかもしれません が。。
業種の前提が無いと、 聞いても無意味
自社サービスの ウェブアプリケーション の開発
一昨年まで Perl 書い てたけど去年から
Java
Native App 用の
API サーバー等が主
Form Webapp multipart/form-data application/x-www-form-urlencoded HTML 従来手法
iPhone App Webapp Android App AngularJS App JSON JSON 近年のアプリ
開発手法の話
Agile
それをAgileと呼ぶなら それはAgileなのだろう
開発の手順 Server Spec Client QA
Iterative 1.2 1.1 2.0 2.1
開発に利用している コンポーネント
Apache Tomcat MySQLJava8
普通だ!
自己紹介終わり。
本編です
質問は随時叫ぶなり手を あげるなりしてください。
原則
手動テスト最高です ね!!
(CENSORED)
ネイティブアプリ等は 機種ごとの差異なども あるので 最終的には必要
どこまで自動化するか
手動でやるよりも 自動でやったほうが 楽になりそうだな~って ところまでやる。
ここ、テスト書いておかない と後で壊れそうだな というところを、「契約」とし て 書いておく
Web Application でのテ スト、どのレイヤでやるか。
どこまでスタブにする か
近代的WebApp Browser Controller Model
RDBMS 外部API
どこのレイヤでテスト する?
Model のテストを手厚 くやろう。
どうやる?
悩みどころ
Q. RDBMSまわりの テスト、どうやるか?
A. RDBMSとのつきあ いかたによる
深い付き合い 浅い付き合い
1. RDBMS を絞り尽く したい派
SQLをゴリゴリ 書きたい
2. JPA にすべてを委ね るよって人
JPAがRDBMSの差異 を吸収してくれる。。
はず
RDBMS に依存しない 実装を求める
H2 でテストするぞ!!!
僕の場合
1 です。
JPA は使わないので。。 (CENSORED)
SQL書きたいよ?
一番テストしたいのは RDBMS とのつなぎ込み部分
RT : WEB+DB
システムとは SQL と入出力仕様だ
というわけで、MySQLを利用 したテストの仕方をご紹介し ます。
よ~し、パパ MySQL を maven
から 起動しちゃうぞ~
(CENSORED)
local に立ってる MySQL 使ってこ
CREATE DATABASE proj_test_deadbeef; プロジェクト名 ランダム生成文字列
スキーマのSQLを流し 込む!!!
for (SHOW TABLES)
{ DELETE FROM $_; } @Before
マスターデータを INSERTする
自動生成したDBへの接続情報は DI かなにかでがんばって 設定しよう!!
DB のテストに関する 知見は以上になります。
休憩
外部APIのテスト
ところで、最近話題の microservices
SOA でもなんでもい いですが……
僕の周りでは10年ぐらい前 疎結合ウェブアプリケーション と呼んでました。
コンポーネントを 細かい httpd に分けて HTTP
で通信してこ↑
メリット: 分業しやすい 変更の影響範囲が明確
弊社でも、 バズワードが出る前から 実践されております。 (CENSORED)
しかし、 テストがやや やりにくい。
どうするか?
クライアントライブラ リを DI で置き換える?
速い。
テスト範囲が狭くなっ て良くない面がある。
結合テストを別途行う ならいいけど。。
httpd を起動して モックサーバーを実行する
Embedded Jetty
servlettester-jetty github.com/tokuhirom/ servlettester-jetty
JettyServletTester.runServlet((req, resp) ->
{ resp.getWriter().print("Hey"); }, (uri) -> { try (CloseableHttpClient client = HttpClientBuilder.create() .build()) { HttpGet request = new HttpGet(uri); try (CloseableHttpResponse resp = client.execute(request)) { String body = EntityUtils.toString(resp.getEntity(), StandardCharsets.UTF_8); assertEquals("Hey", body); } } });
http://localhost:12800/
httpd あげるの無駄な のでは????
無駄だけど、jetty なら起 動速いし気にならない。
DB関連のほうが十分 に遅いので。。
実際には、もっとシン プルに。。
apimock https://github.com/ tokuhirom/apimock
Sinatra風にサーバー側 実装を書ける
@Test public void test()
{ mockApi(mock -> { mock.get(“/api/member/detail“,c -> { return ImmutableMap.of(“hoge”, “fuga”); }); }, () -> { assertEquals(”fuga}”, injector.get(Client.class).getMember(1) .getHoge() ); } }
HTTPの通信を細かく 書けないと、 Regression Test 書きづらい。
外部 API のテストに関する 知見は以上になります。
休憩
コントローラのテスト
コントローラのテスト、 どうやるか
API サーバー のテスト
極めて書きやすい。
httpd をあげて Apache HttpClient でアクセスする。
servlettester-jetty
JettyServletTester.runServlet( new MyServlet(), (uri)
-> { // your test code } );
実際のテストコードで は。。。
ControllerTestBase クラ ス的なので自動的にサー ブレット立ち上げる。
@Test public void test()
{ http.get(“/api/member/“) .isOK() .contentContains(“hogehoge”); }
JSON API だったらど うすんの?
@Test public void test()
{ val req = new Req(“hoge”, “fuga”); Res res = mech2.postJSON(“/api/ member/register“, req) .isOK() .parseJSON(Res.class); assertThat(res.getName()) .isEqualTo(“hoge”); }
@Test public void test()
{ http.post(“/api/member/create“) .param(“name”, “John”) .isOK() .contentContains(“hogehoge”); }
HTML のフォームとか ……?
あんま真面目にテスト してない。。
人力のテストでカバー できるので。。
HTML 変わりまくるので、自動 化テストの手間が 見合わない。
コントローラのテスト の話は終わり。
ダミーデータの作成
public class TestBase
{ @Inject protected Creator create; }
@Test public void test()
{ Member member = create.member(); Blog blog = create.blog(member); // … }
fixture.yml 的なの メンテナンスが面倒
Web 屋さん、 Excel 嫌いな人もいるので。。
ダミーデータ作成の話、 終わり。
テストライブラリ どれがいいのか、という話
junit3 vs junit4
junit4 世代なので、素直 に junit4
つかってます
assertThat(actual, is(expected));
読む分にはいいけど、 書きづらい。。
assertj を使う
assertThat(actual) .isEqualTo(expected)
補完が効きやすい = IDE Friendly
assertThat(list) .hasSize(5)
開発が活発
assertThat(uri) .hasPath(“/“) .hasPort(80);
先週ぐらいに要望だし たら、だれか実装してた。
ところで、、
Google truth ってどう なの?
dagger2 とか、google 発 プロダクトで利用されてる
だいたい assertj と一緒
コードが小難しい assertj のほうが好き
まとめ • assertj 便利。
Continuous Integration
全体の構成
gh:e jenkins エン ジニア Nexus Enterprise Deploy System ServerServer Server
Server
Nexus Enterprise へは jenkins
からしか上がらない
テスト通らないコード はリリースできない
CI は誰かがお膳立てして あげればみんな諦めて使う
Findbugs checkstyle
gh:e から p-r
投げたら テストが自動で回る
CI ないと、テストは ぶっ壊れる
CI 回さないと 自分の書いたコードを 誰かが壊す
CI は基本。
僕のやり方まとめ • DB のテストは実際に
DB を使う • 外部 API のテストは実際に API をコールする • コントローラのテストはサーブレットコンテナ を起動する • CI を常に回す
おしまい • (CENSORED)
以上。
Advertisement