Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
EN
Uploaded by
Yuji Shimada
1,158 views
Let s database_testing
Read more
0
Save
Share
Embed
Embed presentation
Download
Download to read offline
1
/ 79
2
/ 79
3
/ 79
4
/ 79
5
/ 79
6
/ 79
7
/ 79
8
/ 79
9
/ 79
10
/ 79
11
/ 79
12
/ 79
13
/ 79
14
/ 79
15
/ 79
16
/ 79
17
/ 79
18
/ 79
19
/ 79
20
/ 79
21
/ 79
22
/ 79
23
/ 79
24
/ 79
25
/ 79
26
/ 79
27
/ 79
28
/ 79
29
/ 79
30
/ 79
31
/ 79
32
/ 79
33
/ 79
34
/ 79
35
/ 79
36
/ 79
37
/ 79
38
/ 79
39
/ 79
40
/ 79
41
/ 79
42
/ 79
43
/ 79
44
/ 79
45
/ 79
46
/ 79
47
/ 79
48
/ 79
49
/ 79
50
/ 79
51
/ 79
52
/ 79
53
/ 79
54
/ 79
55
/ 79
56
/ 79
57
/ 79
58
/ 79
59
/ 79
60
/ 79
61
/ 79
62
/ 79
63
/ 79
64
/ 79
65
/ 79
66
/ 79
67
/ 79
68
/ 79
69
/ 79
70
/ 79
71
/ 79
72
/ 79
73
/ 79
74
/ 79
75
/ 79
76
/ 79
77
/ 79
78
/ 79
79
/ 79
More Related Content
KEY
Jenkins javascript ci
by
hisame64
PDF
意識の低い自動化
by
greenasparagus
PDF
YAPC::Asia Tokyo 2013 ランチセッション
by
Kuninobu SaSaki
PPTX
EWD 3トレーニングコース#11 ewd-xpressでのエラー処理
by
Kiyoshi Sawada
PDF
究極のバッチフレームワーク(予定)
by
fumoto kazuhiro
PDF
Shellを書こう 02 shUnit2を使おう
by
Keisuke Oohata
PDF
Shellを書こう 01 Shellcheckを使おう
by
Keisuke Oohata
PDF
ebisu.rb #19 超実践 super
by
Kaito Minatoya
Jenkins javascript ci
by
hisame64
意識の低い自動化
by
greenasparagus
YAPC::Asia Tokyo 2013 ランチセッション
by
Kuninobu SaSaki
EWD 3トレーニングコース#11 ewd-xpressでのエラー処理
by
Kiyoshi Sawada
究極のバッチフレームワーク(予定)
by
fumoto kazuhiro
Shellを書こう 02 shUnit2を使おう
by
Keisuke Oohata
Shellを書こう 01 Shellcheckを使おう
by
Keisuke Oohata
ebisu.rb #19 超実践 super
by
Kaito Minatoya
What's hot
PDF
TypeScript 言語処理系ことはじめ
by
Yu Nobuoka
PDF
プロキシーを使ってテストを楽にする
by
Shunji Konishi
PPT
Rspec
by
Yunosuke Taga
PDF
2012 osc北海道 セッション資料「blackjumbodog利用のすすめ」
by
Shinichi Hirauchi
PDF
関西Php勉強会のlimeの話
by
Hisateru Tanaka
KEY
Sencha ug3 siesta_share
by
久司 中村
PPTX
13016 n分で作るtype scriptでnodejs
by
Takayoshi Tanaka
PDF
B lack jumbodog 運転と改造のすすめ
by
Shinichi Hirauchi
PPTX
EWD 3トレーニングコース#11 ewd-xpressでのエラー処理
by
Kiyoshi Sawada
PPT
Eclipse を使った java 開発 111126 杉浦
by
urasandesu
PDF
Adobe JSX入門
by
silvers ofsilvers
PPTX
Power shellmemo
by
ytanno
PDF
最近の単体テスト
by
Ken Morishita
PDF
PerlとSQLのいろいろ
by
Takuya Tsuchida
PDF
PowerShell 紹介
by
tsudaa
PDF
Jmeter20120421
by
hatakyo
PDF
負荷対策しておもったことまとめ~JMeterでSocket.IOもいけるでよ~
by
johgus johgus
PPTX
PowerShell 小技集
by
sakuragi yuuto
PPTX
T sql の parse と generator
by
Oda Shinsuke
PDF
秋だからEclipse再入門
by
Katsumi Honda
TypeScript 言語処理系ことはじめ
by
Yu Nobuoka
プロキシーを使ってテストを楽にする
by
Shunji Konishi
Rspec
by
Yunosuke Taga
2012 osc北海道 セッション資料「blackjumbodog利用のすすめ」
by
Shinichi Hirauchi
関西Php勉強会のlimeの話
by
Hisateru Tanaka
Sencha ug3 siesta_share
by
久司 中村
13016 n分で作るtype scriptでnodejs
by
Takayoshi Tanaka
B lack jumbodog 運転と改造のすすめ
by
Shinichi Hirauchi
EWD 3トレーニングコース#11 ewd-xpressでのエラー処理
by
Kiyoshi Sawada
Eclipse を使った java 開発 111126 杉浦
by
urasandesu
Adobe JSX入門
by
silvers ofsilvers
Power shellmemo
by
ytanno
最近の単体テスト
by
Ken Morishita
PerlとSQLのいろいろ
by
Takuya Tsuchida
PowerShell 紹介
by
tsudaa
Jmeter20120421
by
hatakyo
負荷対策しておもったことまとめ~JMeterでSocket.IOもいけるでよ~
by
johgus johgus
PowerShell 小技集
by
sakuragi yuuto
T sql の parse と generator
by
Oda Shinsuke
秋だからEclipse再入門
by
Katsumi Honda
Viewers also liked
PDF
Youth camp intercession 7 dec2014
by
SSMC
PDF
Kingdom christians 24 apr2016
by
SSMC
PDF
Changing media landscape 08022011
by
Worldcom Public Relations Group
DOCX
Tipografi adalah salah satu kualitas atas mana kita mendasarkan sebagian besa...
by
Fadillah Brown Eye
PDF
05 04 jesus’s manifesto lk 4 18-19 f-inal
by
SSMC
PDF
After you say i do sermon12 feb2012
by
SSMC
PPTX
Prep Place Direction
by
guest2d777ab
PPT
Resource review
by
Kristin Schwan
PDF
What does-it-take-to-follow-christ
by
SSMC
PDF
03 03 john 2 23-25 from fear to faith to fulfillment
by
SSMC
PDF
Abstract
by
Geophysics-IASBS
DOCX
Social Media for Investigations Tools
by
Mandy Jenkins
PDF
When i do becomes i don't
by
SSMC
PDF
Social Strategies: Maximize Your Social Media
by
Mandy Jenkins
PPT
Buy this news, please?
by
Mandy Jenkins
PDF
Crowdsourcing, Searching Social Media and Curation Resource List
by
Mandy Jenkins
PDF
Raising godly children 19 jun 15
by
SSMC
PDF
Ephesians intro and chap 2 21 oct2012
by
SSMC
PDF
11 24 Apostles Creed Series - I Believe
by
SSMC
PDF
Susan Morreale Portfolio 2012
by
smorreale
Youth camp intercession 7 dec2014
by
SSMC
Kingdom christians 24 apr2016
by
SSMC
Changing media landscape 08022011
by
Worldcom Public Relations Group
Tipografi adalah salah satu kualitas atas mana kita mendasarkan sebagian besa...
by
Fadillah Brown Eye
05 04 jesus’s manifesto lk 4 18-19 f-inal
by
SSMC
After you say i do sermon12 feb2012
by
SSMC
Prep Place Direction
by
guest2d777ab
Resource review
by
Kristin Schwan
What does-it-take-to-follow-christ
by
SSMC
03 03 john 2 23-25 from fear to faith to fulfillment
by
SSMC
Abstract
by
Geophysics-IASBS
Social Media for Investigations Tools
by
Mandy Jenkins
When i do becomes i don't
by
SSMC
Social Strategies: Maximize Your Social Media
by
Mandy Jenkins
Buy this news, please?
by
Mandy Jenkins
Crowdsourcing, Searching Social Media and Curation Resource List
by
Mandy Jenkins
Raising godly children 19 jun 15
by
SSMC
Ephesians intro and chap 2 21 oct2012
by
SSMC
11 24 Apostles Creed Series - I Believe
by
SSMC
Susan Morreale Portfolio 2012
by
smorreale
Similar to Let s database_testing
PDF
Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話
by
azuma satoshi
PDF
DTraceによるMySQL解析ことはじめ
by
Mikiya Okuno
PDF
What is doobie? - database access for scala -
by
chibochibo
PDF
Markdown DB Unit
by
aha_oretama
PPTX
継続的12章
by
shinjiyoshida
PDF
Perl RDBMS Programming(DBI/DBIx::Sunnyのはなし)
by
karupanerura
PPT
今年こそ始めたい!SQL超入門 セミナー資料 2024年5月22日 富士通クラウドミートアップ
by
Toru Miyahara
PDF
データベース03 - SQL(CREATE, INSERT, DELETE, UPDATEなど)
by
Kenta Oku
PPT
オイシックスIT勉強会20141030_テストデータ
by
iwai-atsushi
PDF
あんなテスト、こんなテスト(this and that about testing)
by
Takuya Tsuchida
PPT
今年こそ始めたい!SQL超入門 MIRACLE Linux Meetup版 0620
by
Toru Miyahara
PDF
MySQLトラブル解析入門
by
Mikiya Okuno
PDF
Nds#24 単体テスト
by
Kazumune Katagiri
ODP
MySQLのパフォーマンスの話
by
Tetsuro Ikeda
PPTX
Laravel勉強会(データベーステスト編)
by
AyakaNishiyama
PPTX
カジュアルにセキュリティテストはじめよう #qpstudy
by
Masahiro NAKAYAMA
KEY
My sql casual_in_fukuoka_vol1
by
Makoto Haruyama
PDF
160130 0dir system
by
aizawa_yoshikazu
PDF
Introduction to Continuous Test Runner MakeGood
by
Atsuhiro Kubo
PPT
Online schema change in mysql casual #1(2010/12/11)
by
Naritoshi Hayashi
Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話
by
azuma satoshi
DTraceによるMySQL解析ことはじめ
by
Mikiya Okuno
What is doobie? - database access for scala -
by
chibochibo
Markdown DB Unit
by
aha_oretama
継続的12章
by
shinjiyoshida
Perl RDBMS Programming(DBI/DBIx::Sunnyのはなし)
by
karupanerura
今年こそ始めたい!SQL超入門 セミナー資料 2024年5月22日 富士通クラウドミートアップ
by
Toru Miyahara
データベース03 - SQL(CREATE, INSERT, DELETE, UPDATEなど)
by
Kenta Oku
オイシックスIT勉強会20141030_テストデータ
by
iwai-atsushi
あんなテスト、こんなテスト(this and that about testing)
by
Takuya Tsuchida
今年こそ始めたい!SQL超入門 MIRACLE Linux Meetup版 0620
by
Toru Miyahara
MySQLトラブル解析入門
by
Mikiya Okuno
Nds#24 単体テスト
by
Kazumune Katagiri
MySQLのパフォーマンスの話
by
Tetsuro Ikeda
Laravel勉強会(データベーステスト編)
by
AyakaNishiyama
カジュアルにセキュリティテストはじめよう #qpstudy
by
Masahiro NAKAYAMA
My sql casual_in_fukuoka_vol1
by
Makoto Haruyama
160130 0dir system
by
aizawa_yoshikazu
Introduction to Continuous Test Runner MakeGood
by
Atsuhiro Kubo
Online schema change in mysql casual #1(2010/12/11)
by
Naritoshi Hayashi
Let s database_testing
1.
let's database testing!!
2010/10/16 YAPC::Asia 2010 @xaicron
2.
自己紹介 name: Yuji Shimada
( 嶋田 裕二 ) works: DeNA twitter: @xaicron blog: http://blog.livedoor. jp/xaicron/
3.
皆さん
4.
データーベース 処理のテスト
5.
してますか?
6.
DB のテストをすると この SELECT
なんにもマッチしない... INSERT したデータが文字化けしてるや ん! UPDATE や DELETE に WHERE 付け忘れ てて全件あばばば TRIGGER が間違ってて、データ壊れ た。。。
7.
という事態を未然に防げます!
8.
というか。。。
9.
永続的なストレージに実際に
入出力があるんだから テストするのはあたりまえですね!
10.
今回は MySQL に焦点を絞って
お話します
11.
ORM の話もしません
12.
基本的には 生DBI をつかってやり
ます
13.
Haw To Testing
14.
鉄則
15.
ローカルでテストできる環境を
作ること!!
16.
よくない例
ステージング環境のDBに接続してテストする 本番は MySQL だけど、テストでは SQLite を 使う 自分のローカルに立ち上がっている MySQL を テストに使う
17.
実際に存在している DB を使ってテスト すると、毎回データが変わってテストに ならない 本番は
MySQL なのに テストでは SQLite とかは意味がない
18.
Test の大まかな流れ Test::mysqld を使って毎回クリーンな
mysql を立ち上げる Test::Fixture::DBI を使ってテストデータを 突っ込む DB 接続して、実際にデータの入出力が行わ れているかテスト そして伝説へ...
19.
Test::mysqld new するだけで、lcoal に
新規 mysql が立ち 上がる DESTROY が走ったら、自動的に mysql を 落とす Author: kazuhooku
20.
DEMO
21.
Test::Fixture::DBI table 作ったり、 procedure
/ function / trigger 作っ たり、data ぶっこんだりできる 既存の DB から schema 定義をもってきたり、指定の レコードをとって来たりできる make_*_yaml.pl で fixture や database 定義を YAML に吐き出せる Author: ZIGOROu, (test: xaicron)
22.
DEMO
23.
なかなか便利ですが
24.
テスト毎にこれを毎回書くのはめん
どいので
25.
適当に組み合わせた Test Module を書いて使うと
いいでしょう
26.
Test::Foo::Fixture::DBI みたいな名前にして
setup_
27.
実際のテストの書き方
28.
の前に
29.
DBI を直接扱う上で 便利なモジュールを紹介します
30.
DBI と親和性の高いモジュール SQL::Abstract DBIx::DBHResolver DBIx::Connector
31.
DBIx::Connector -> DBIx::DBHResolver ->
DBI
32.
という感じでラップすると なかなかいい感じ
33.
DBIx::Connector DBI の超薄いラッパー $dbh を局所化できる
多分最大の利点 fixup => で再接続 トランザクション処理をよしなにやってくれる
34.
DBIx::DBHResolver DBI 専用の container
みたいなノリ 複数の DB に接続するのに便利 Master / Slave User と Diary が別の DB Sharding していてもかなり直感的 DBIx::Connector とも協調しやすい
35.
+SQL::Abstract
36.
my $row =
$model->connector('SLAVE')->txn(fixup => sub { my $dbh = shift; my ($stmt, @bind) = $model->sql->select(...); return $dbh->selectrow_hashref($stmt, undef, @bind); });
37.
みたないな感じでつかえる
38.
ようやく実際のテストの話
39.
SELECT した結果を 返すもののテスト
40.
my $row =
try { $self->connector('SLAVE', $user_id)->run(fixup => sub { my $dbh = shift; my ($stmt, @bind) = $self->sql->select( 'user_data', [qw/id name/], { id => $user_id, disabled => 0 }, ); $dbh->selectrow_hashref($stmt, undef, @bind); }); } catch { my $e = $_; ... };
41.
mysqld に fixture
を入れる 実際にたたいて値を取得 取得した値が正しいかチェック
42.
DEMO
43.
INSERT のテスト
44.
try { my
$seq = $self->next_seq('MASTER', 'seq_tweet'); $self->connector('MASTER', $user_id)->run(fixup => sub { my $dbh = shift; my ($stmt, @bind) = $self->sql->insert( 'tweet', { id => $seq, ... }, ); $dbh->do($stmt, undef, @bind); $dbh->commit; }); } catch { my $e = $_; };
45.
実際にたたいて値を入力 正常に INSERT されているかチェッ ク
46.
UPDATE とか DELETE
も 同じ感じ
47.
特別に難しいことは やっていない
48.
すべての SQL に対して 地道にテストを書きましょう
49.
PROCEDURE / FUNCTION
/ TRIGGER のテスト
50.
FUNCTION とは そのまんま 一連のSQLを関数化できる CALL function_name(args)
で呼べる 値を返すので、参照系に使える
51.
PROCEDURE と 値を返さない FUNCTION 主に更新用途 CALL
procedure_name(args) で呼べる
52.
TRIGGER とは テーブルの更新タイミングで発火 INSERT
/ UPDATE / DELETE SQL なら何でも書ける PROCEDURE をよく使う (更新なので)
53.
FUNCTION のテスト
54.
SELECT とおんなじ
55.
PROCEDURE / TRIGGER
のテスト
56.
INSERT / UPDATE
/DELETE とおんなじ
57.
Test::mysqld の問題点
58.
make test したときに すっごい時間がかかる
orz
59.
1テスト毎に mysqld を立ち上げて
落としてるから仕方ないよね
60.
なんとかしたい
61.
なんとかしたい
63.
Makefile の書き換え大変です!
64.
Module かいたよー Module::Install::ExtendsMakeTest
65.
replace_default_make_test( includes
=> ['t/lib'], modules => ['Test::MyApp::DB'], before_run_codes => [ sub { $SIG{INT} = sub { CORE::exit 1 }; my $db = Test::MyApp::DB->setup; $ENV{TEST_MY_SOCKET} = $db->my_cnf->{socket}; }, ], );
66.
みたいな感じで書くと make test 時に
mysqld が立ち上がる
67.
あとは、socket ファイルとかを指定
して接続すれば OK
68.
$ENV に値があったら立ち上がっ
ている mysqld を使って、 なかったら 新規に立ち上げるよう にしておけばいい
69.
DEMO
70.
というわけで
71.
プログラムから扱いそうな
DB の処理は
72.
ちゃんとテストできる!!
73.
ので、テストを書きましょう
74.
自分(とみんな)のために
75.
まとめ 地道にやっていけば DB 処理の大部分をテ スト 結構ツール類が充実してきている でもまだ自分で書く部分が多い印象 割とこの辺のノウハウがたまりつつあるので、 よくある処理は
Module 化したい
76.
DEMO で 使った適当なプロダクト http://github.com/xaicron/Mayoi
77.
ご清聴ありがとうございました
78.
Questions?
79.
閑話休題
Download