Submit Search
Upload
Friendlyで始めるwindowsアプリシステムテスト自動化+内部使用技術解説
•
Download as PPTX, PDF
•
6 likes
•
13,843 views
Tatsuya Ishikawa
Follow
2014/08/23 わんくま横浜勉強会の資料
Read less
Read more
Software
Report
Share
Report
Share
1 of 31
Download now
Recommended
Friendlyを使ったwindowsアプリテスト自動化
Friendlyを使ったwindowsアプリテスト自動化
Tatsuya Ishikawa
FriendlyによるWindowsアプリテスト自動化手法 基礎技術編
FriendlyによるWindowsアプリテスト自動化手法 基礎技術編
Kenji Fukumoto
.Netconf
.Netconf
Tatsuya Ishikawa
【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上
【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上
Tatsuya Ishikawa
Bindingからframework elementを見つける
Bindingからframework elementを見つける
Tatsuya Ishikawa
GUI Test is (not) necessary
GUI Test is (not) necessary
Hiroshi Maekawa
価値あるシステムテスト自動化の実現By friendly
価値あるシステムテスト自動化の実現By friendly
Tatsuya Ishikawa
Windowsでの自動化の手段
Windowsでの自動化の手段
Hidari Ikw
Recommended
Friendlyを使ったwindowsアプリテスト自動化
Friendlyを使ったwindowsアプリテスト自動化
Tatsuya Ishikawa
FriendlyによるWindowsアプリテスト自動化手法 基礎技術編
FriendlyによるWindowsアプリテスト自動化手法 基礎技術編
Kenji Fukumoto
.Netconf
.Netconf
Tatsuya Ishikawa
【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上
【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上
Tatsuya Ishikawa
Bindingからframework elementを見つける
Bindingからframework elementを見つける
Tatsuya Ishikawa
GUI Test is (not) necessary
GUI Test is (not) necessary
Hiroshi Maekawa
価値あるシステムテスト自動化の実現By friendly
価値あるシステムテスト自動化の実現By friendly
Tatsuya Ishikawa
Windowsでの自動化の手段
Windowsでの自動化の手段
Hidari Ikw
XP祭り2013-LT-Codeer
XP祭り2013-LT-Codeer
Tatsuya Ishikawa
テストの自動化を考える前に
テストの自動化を考える前に
bleis tift
自動テスト知識体系TABOKのご紹介
自動テスト知識体系TABOKのご紹介
Shinsuke Matsuki
Selenium boot campの紹介
Selenium boot campの紹介
Nozomi Ito
ぼくのかんがえた iOSテスト戦略
ぼくのかんがえた iOSテスト戦略
Naoki Umehara
テストエンジニアのおっさんの日常です
テストエンジニアのおっさんの日常です
ryuji koyama
テストを書こう!!
テストを書こう!!
拓 小林
20121019 jenkins勉強会lt資料
20121019 jenkins勉強会lt資料
Hiroko Tamagawa
SGT2013 技術トークス「アジャイルテスティング」
SGT2013 技術トークス「アジャイルテスティング」
yasuohosotani
テスト自動化ツール[Selenium]を検討してみて
テスト自動化ツール[Selenium]を検討してみて
裕史 川松
Windowsアプリテスト自動化 [Friendly+delphi]
Windowsアプリテスト自動化 [Friendly+delphi]
Tatsuya Ishikawa
SI-Toolkitでテスト自動化を実現する現場で遭遇したこと
SI-Toolkitでテスト自動化を実現する現場で遭遇したこと
yuichi_kuwahara
SGT技術トークス 継続的デリバリー
SGT技術トークス 継続的デリバリー
Yukei Wachi
Jenkins Bootcamp Premiumのご紹介 in デブサミ2016冬
Jenkins Bootcamp Premiumのご紹介 in デブサミ2016冬
Masanori Satoh
Pythonを中心としたチーム開発
Pythonを中心としたチーム開発
Ryo Takahashi
事例 アジャイルと自動化 後半(ヤフオク!アプリでの自動テストの事例紹介) at Ques vol.7( #ques7 ) 11/20/2015
事例 アジャイルと自動化 後半(ヤフオク!アプリでの自動テストの事例紹介) at Ques vol.7( #ques7 ) 11/20/2015
Yahoo!デベロッパーネットワーク
テスト初心者Androiderのためのソフトウェアテスト入門
テスト初心者Androiderのためのソフトウェアテスト入門
Satoshi Watanabe
Jenkins+Play!で気軽にCI
Jenkins+Play!で気軽にCI
Takafumi Ikeda
開発ビギナーだけじゃない!インフラエンジニア & マネージャー にも知ってほしいテスト自動化と品質管理
開発ビギナーだけじゃない!インフラエンジニア & マネージャー にも知ってほしいテスト自動化と品質管理
慎一 古賀
FriendlyとTestAssistantProでテスト自動化やってみた
FriendlyとTestAssistantProでテスト自動化やってみた
NakaiYusaku
Stac2014 石川
Stac2014 石川
Tatsuya Ishikawa
自動家(オートメーター)大地に立つ!! 〜オールドタイプの一年戦争〜
自動家(オートメーター)大地に立つ!! 〜オールドタイプの一年戦争〜
Kazuhito Miura
More Related Content
What's hot
XP祭り2013-LT-Codeer
XP祭り2013-LT-Codeer
Tatsuya Ishikawa
テストの自動化を考える前に
テストの自動化を考える前に
bleis tift
自動テスト知識体系TABOKのご紹介
自動テスト知識体系TABOKのご紹介
Shinsuke Matsuki
Selenium boot campの紹介
Selenium boot campの紹介
Nozomi Ito
ぼくのかんがえた iOSテスト戦略
ぼくのかんがえた iOSテスト戦略
Naoki Umehara
テストエンジニアのおっさんの日常です
テストエンジニアのおっさんの日常です
ryuji koyama
テストを書こう!!
テストを書こう!!
拓 小林
20121019 jenkins勉強会lt資料
20121019 jenkins勉強会lt資料
Hiroko Tamagawa
SGT2013 技術トークス「アジャイルテスティング」
SGT2013 技術トークス「アジャイルテスティング」
yasuohosotani
テスト自動化ツール[Selenium]を検討してみて
テスト自動化ツール[Selenium]を検討してみて
裕史 川松
Windowsアプリテスト自動化 [Friendly+delphi]
Windowsアプリテスト自動化 [Friendly+delphi]
Tatsuya Ishikawa
SI-Toolkitでテスト自動化を実現する現場で遭遇したこと
SI-Toolkitでテスト自動化を実現する現場で遭遇したこと
yuichi_kuwahara
SGT技術トークス 継続的デリバリー
SGT技術トークス 継続的デリバリー
Yukei Wachi
Jenkins Bootcamp Premiumのご紹介 in デブサミ2016冬
Jenkins Bootcamp Premiumのご紹介 in デブサミ2016冬
Masanori Satoh
Pythonを中心としたチーム開発
Pythonを中心としたチーム開発
Ryo Takahashi
事例 アジャイルと自動化 後半(ヤフオク!アプリでの自動テストの事例紹介) at Ques vol.7( #ques7 ) 11/20/2015
事例 アジャイルと自動化 後半(ヤフオク!アプリでの自動テストの事例紹介) at Ques vol.7( #ques7 ) 11/20/2015
Yahoo!デベロッパーネットワーク
テスト初心者Androiderのためのソフトウェアテスト入門
テスト初心者Androiderのためのソフトウェアテスト入門
Satoshi Watanabe
Jenkins+Play!で気軽にCI
Jenkins+Play!で気軽にCI
Takafumi Ikeda
開発ビギナーだけじゃない!インフラエンジニア & マネージャー にも知ってほしいテスト自動化と品質管理
開発ビギナーだけじゃない!インフラエンジニア & マネージャー にも知ってほしいテスト自動化と品質管理
慎一 古賀
FriendlyとTestAssistantProでテスト自動化やってみた
FriendlyとTestAssistantProでテスト自動化やってみた
NakaiYusaku
What's hot
(20)
XP祭り2013-LT-Codeer
XP祭り2013-LT-Codeer
テストの自動化を考える前に
テストの自動化を考える前に
自動テスト知識体系TABOKのご紹介
自動テスト知識体系TABOKのご紹介
Selenium boot campの紹介
Selenium boot campの紹介
ぼくのかんがえた iOSテスト戦略
ぼくのかんがえた iOSテスト戦略
テストエンジニアのおっさんの日常です
テストエンジニアのおっさんの日常です
テストを書こう!!
テストを書こう!!
20121019 jenkins勉強会lt資料
20121019 jenkins勉強会lt資料
SGT2013 技術トークス「アジャイルテスティング」
SGT2013 技術トークス「アジャイルテスティング」
テスト自動化ツール[Selenium]を検討してみて
テスト自動化ツール[Selenium]を検討してみて
Windowsアプリテスト自動化 [Friendly+delphi]
Windowsアプリテスト自動化 [Friendly+delphi]
SI-Toolkitでテスト自動化を実現する現場で遭遇したこと
SI-Toolkitでテスト自動化を実現する現場で遭遇したこと
SGT技術トークス 継続的デリバリー
SGT技術トークス 継続的デリバリー
Jenkins Bootcamp Premiumのご紹介 in デブサミ2016冬
Jenkins Bootcamp Premiumのご紹介 in デブサミ2016冬
Pythonを中心としたチーム開発
Pythonを中心としたチーム開発
事例 アジャイルと自動化 後半(ヤフオク!アプリでの自動テストの事例紹介) at Ques vol.7( #ques7 ) 11/20/2015
事例 アジャイルと自動化 後半(ヤフオク!アプリでの自動テストの事例紹介) at Ques vol.7( #ques7 ) 11/20/2015
テスト初心者Androiderのためのソフトウェアテスト入門
テスト初心者Androiderのためのソフトウェアテスト入門
Jenkins+Play!で気軽にCI
Jenkins+Play!で気軽にCI
開発ビギナーだけじゃない!インフラエンジニア & マネージャー にも知ってほしいテスト自動化と品質管理
開発ビギナーだけじゃない!インフラエンジニア & マネージャー にも知ってほしいテスト自動化と品質管理
FriendlyとTestAssistantProでテスト自動化やってみた
FriendlyとTestAssistantProでテスト自動化やってみた
Viewers also liked
Stac2014 石川
Stac2014 石川
Tatsuya Ishikawa
自動家(オートメーター)大地に立つ!! 〜オールドタイプの一年戦争〜
自動家(オートメーター)大地に立つ!! 〜オールドタイプの一年戦争〜
Kazuhito Miura
Robotium を使った UI テスト
Robotium を使った UI テスト
健一 辰濱
Java → Kotlin 変換 そのあとに。
Java → Kotlin 変換 そのあとに。
健一 辰濱
AAA2015 関西風と欧米風 2つのTest Automation Patterns
AAA2015 関西風と欧米風 2つのTest Automation Patterns
Noriyuki Mizuno
Template Meta Programming入門から応用まで
Template Meta Programming入門から応用まで
yoshihikoozaki5
よろしい、ならば自動化だっ! ~自動家の自動化哲学~ #AsianAA
よろしい、ならば自動化だっ! ~自動家の自動化哲学~ #AsianAA
Kazuhito Miura
C#でもメタプログラミングがしたい!!
C#でもメタプログラミングがしたい!!
TATSUYA HAYAMIZU
Sansan における Android アプリ自動テスト導入事例
Sansan における Android アプリ自動テスト導入事例
健一 辰濱
Visual Studio と Team Foundation Server / Visual Studio Team Services で実現するビル...
Visual Studio と Team Foundation Server / Visual Studio Team Services で実現するビル...
Masaki Takeda
GUI自動テストの保守性を高めるには
GUI自動テストの保守性を高めるには
Nozomi Ito
Visual Studio 2017 とTeam Foundation Server /Visual Studio Team Services で実現...
Visual Studio 2017 とTeam Foundation Server /Visual Studio Team Services で実現...
Masaki Takeda
Visual Studio とTeam Foundation Server /Visual Studio Team Services で実現するビル...
Visual Studio とTeam Foundation Server /Visual Studio Team Services で実現するビル...
Masaki Takeda
Prism.Formsについて
Prism.Formsについて
一希 大田
「自動家(オートメータ)をつくる」-システムテスト自動化カンファレンス2014 「.reviewrc」枠発表-
「自動家(オートメータ)をつくる」-システムテスト自動化カンファレンス2014 「.reviewrc」枠発表-
Kazuhito Miura
テスト自動化のパターンと実践
テスト自動化のパターンと実践
Hiroshi Maekawa
Team Foundation Server 2015 によるテスト工数削減
Team Foundation Server 2015 によるテスト工数削減
Masaki Takeda
Viewers also liked
(17)
Stac2014 石川
Stac2014 石川
自動家(オートメーター)大地に立つ!! 〜オールドタイプの一年戦争〜
自動家(オートメーター)大地に立つ!! 〜オールドタイプの一年戦争〜
Robotium を使った UI テスト
Robotium を使った UI テスト
Java → Kotlin 変換 そのあとに。
Java → Kotlin 変換 そのあとに。
AAA2015 関西風と欧米風 2つのTest Automation Patterns
AAA2015 関西風と欧米風 2つのTest Automation Patterns
Template Meta Programming入門から応用まで
Template Meta Programming入門から応用まで
よろしい、ならば自動化だっ! ~自動家の自動化哲学~ #AsianAA
よろしい、ならば自動化だっ! ~自動家の自動化哲学~ #AsianAA
C#でもメタプログラミングがしたい!!
C#でもメタプログラミングがしたい!!
Sansan における Android アプリ自動テスト導入事例
Sansan における Android アプリ自動テスト導入事例
Visual Studio と Team Foundation Server / Visual Studio Team Services で実現するビル...
Visual Studio と Team Foundation Server / Visual Studio Team Services で実現するビル...
GUI自動テストの保守性を高めるには
GUI自動テストの保守性を高めるには
Visual Studio 2017 とTeam Foundation Server /Visual Studio Team Services で実現...
Visual Studio 2017 とTeam Foundation Server /Visual Studio Team Services で実現...
Visual Studio とTeam Foundation Server /Visual Studio Team Services で実現するビル...
Visual Studio とTeam Foundation Server /Visual Studio Team Services で実現するビル...
Prism.Formsについて
Prism.Formsについて
「自動家(オートメータ)をつくる」-システムテスト自動化カンファレンス2014 「.reviewrc」枠発表-
「自動家(オートメータ)をつくる」-システムテスト自動化カンファレンス2014 「.reviewrc」枠発表-
テスト自動化のパターンと実践
テスト自動化のパターンと実践
Team Foundation Server 2015 によるテスト工数削減
Team Foundation Server 2015 によるテスト工数削減
Similar to Friendlyで始めるwindowsアプリシステムテスト自動化+内部使用技術解説
【オンライン】.NET 6 移行祭り! C# Tokyo イベント
【オンライン】.NET 6 移行祭り! C# Tokyo イベント
Tatsuya Ishikawa
Jenkins導入ライブ
Jenkins導入ライブ
Hiasyoshi Suehiro
ワンクリックデプロイ101 #ocdeploy
ワンクリックデプロイ101 #ocdeploy
Ryutaro YOSHIBA
Agile japan2010 rakuten様プレゼン資料
Agile japan2010 rakuten様プレゼン資料
Akiko Kosaka
RICOH最終選考プレゼン資料
RICOH最終選考プレゼン資料
pyar6329
クラウドが実現するソフト開発・運用の変革と自動化
クラウドが実現するソフト開発・運用の変革と自動化
Etsuji Nakai
テスト駆動開発の導入ーペアプログラミングの学習効果ー
テスト駆動開発の導入ーペアプログラミングの学習効果ー
Shuji Watanabe
ツールを使い倒せ!公開版 : (Use the tool to defeat it! : Public version)
ツールを使い倒せ!公開版 : (Use the tool to defeat it! : Public version)
Mr. Vengineer
あなたはグーグルのモルモットです
あなたはグーグルのモルモットです
James Harvey
テストしなイカ? Seleniumで自動ブラウザテスト
テストしなイカ? Seleniumで自動ブラウザテスト
Ohishi Mikage
Web制作者視点で理解するソフトェアテスト
Web制作者視点で理解するソフトェアテスト
祐磨 堀
とりあえず30分でひととおり分かった気にはなれるアジャイル入門
とりあえず30分でひととおり分かった気にはなれるアジャイル入門
陽一 滝川
ハードコア デバッギング : サポート直伝! Windows カーネルモード デバッグ活用編!!
ハードコア デバッギング : サポート直伝! Windows カーネルモード デバッグ活用編!!
TAKUYA OHTA
第3回ソフトウェアテストセミナー
第3回ソフトウェアテストセミナー
Tomoyuki Sato
Jenkins ユーザ・カンファレンス 2012 東京 S406-4/マルチステージ型継続的インテグレーションのすすめ
Jenkins ユーザ・カンファレンス 2012 東京 S406-4/マルチステージ型継続的インテグレーションのすすめ
atsushi_tmx
Selenium WebDriver + python で E2Eテスト自動化
Selenium WebDriver + python で E2Eテスト自動化
JustSystems Corporation
ソフトウェアテスト入門
ソフトウェアテスト入門
iKenji
ゲーム開発環境、もっと楽にできるよ♬ マインクラフトでも実践している DevOpsでゲーム開発を効率化しよう!
ゲーム開発環境、もっと楽にできるよ♬ マインクラフトでも実践している DevOpsでゲーム開発を効率化しよう!
Hiroko Umetsu
Jenkinsではじめる継続的インテグレーション
Jenkinsではじめる継続的インテグレーション
Masanori Satoh
第2回nseg slideshare
第2回nseg slideshare
ko ty
Similar to Friendlyで始めるwindowsアプリシステムテスト自動化+内部使用技術解説
(20)
【オンライン】.NET 6 移行祭り! C# Tokyo イベント
【オンライン】.NET 6 移行祭り! C# Tokyo イベント
Jenkins導入ライブ
Jenkins導入ライブ
ワンクリックデプロイ101 #ocdeploy
ワンクリックデプロイ101 #ocdeploy
Agile japan2010 rakuten様プレゼン資料
Agile japan2010 rakuten様プレゼン資料
RICOH最終選考プレゼン資料
RICOH最終選考プレゼン資料
クラウドが実現するソフト開発・運用の変革と自動化
クラウドが実現するソフト開発・運用の変革と自動化
テスト駆動開発の導入ーペアプログラミングの学習効果ー
テスト駆動開発の導入ーペアプログラミングの学習効果ー
ツールを使い倒せ!公開版 : (Use the tool to defeat it! : Public version)
ツールを使い倒せ!公開版 : (Use the tool to defeat it! : Public version)
あなたはグーグルのモルモットです
あなたはグーグルのモルモットです
テストしなイカ? Seleniumで自動ブラウザテスト
テストしなイカ? Seleniumで自動ブラウザテスト
Web制作者視点で理解するソフトェアテスト
Web制作者視点で理解するソフトェアテスト
とりあえず30分でひととおり分かった気にはなれるアジャイル入門
とりあえず30分でひととおり分かった気にはなれるアジャイル入門
ハードコア デバッギング : サポート直伝! Windows カーネルモード デバッグ活用編!!
ハードコア デバッギング : サポート直伝! Windows カーネルモード デバッグ活用編!!
第3回ソフトウェアテストセミナー
第3回ソフトウェアテストセミナー
Jenkins ユーザ・カンファレンス 2012 東京 S406-4/マルチステージ型継続的インテグレーションのすすめ
Jenkins ユーザ・カンファレンス 2012 東京 S406-4/マルチステージ型継続的インテグレーションのすすめ
Selenium WebDriver + python で E2Eテスト自動化
Selenium WebDriver + python で E2Eテスト自動化
ソフトウェアテスト入門
ソフトウェアテスト入門
ゲーム開発環境、もっと楽にできるよ♬ マインクラフトでも実践している DevOpsでゲーム開発を効率化しよう!
ゲーム開発環境、もっと楽にできるよ♬ マインクラフトでも実践している DevOpsでゲーム開発を効率化しよう!
Jenkinsではじめる継続的インテグレーション
Jenkinsではじめる継続的インテグレーション
第2回nseg slideshare
第2回nseg slideshare
More from Tatsuya Ishikawa
burikaigi2024.pptx
burikaigi2024.pptx
Tatsuya Ishikawa
burikaigi2023
burikaigi2023
Tatsuya Ishikawa
Test to net core 3
Test to net core 3
Tatsuya Ishikawa
Test automation strategy for .net core 3 transition
Test automation strategy for .net core 3 transition
Tatsuya Ishikawa
Developer summit codeer
Developer summit codeer
Tatsuya Ishikawa
Infragistics Web Day 2017 - 継続的な開発を支える テスト自動化技術
Infragistics Web Day 2017 - 継続的な開発を支える テスト自動化技術
Tatsuya Ishikawa
Stack2017 自動化困難な状況での活動方法
Stack2017 自動化困難な状況での活動方法
Tatsuya Ishikawa
メタな感じのプログラミング(プロ生 + わんくま 071118)
メタな感じのプログラミング(プロ生 + わんくま 071118)
Tatsuya Ishikawa
Dot netconf2017 - VS拡張
Dot netconf2017 - VS拡張
Tatsuya Ishikawa
boost - std - C#
boost - std - C#
Tatsuya Ishikawa
Ride on azure~アイデアソン編~
Ride on azure~アイデアソン編~
Tatsuya Ishikawa
私とC++ in 例外安全day
私とC++ in 例外安全day
Tatsuya Ishikawa
他言語との連携(ネイティブから動的言語まで)
他言語との連携(ネイティブから動的言語まで)
Tatsuya Ishikawa
More from Tatsuya Ishikawa
(13)
burikaigi2024.pptx
burikaigi2024.pptx
burikaigi2023
burikaigi2023
Test to net core 3
Test to net core 3
Test automation strategy for .net core 3 transition
Test automation strategy for .net core 3 transition
Developer summit codeer
Developer summit codeer
Infragistics Web Day 2017 - 継続的な開発を支える テスト自動化技術
Infragistics Web Day 2017 - 継続的な開発を支える テスト自動化技術
Stack2017 自動化困難な状況での活動方法
Stack2017 自動化困難な状況での活動方法
メタな感じのプログラミング(プロ生 + わんくま 071118)
メタな感じのプログラミング(プロ生 + わんくま 071118)
Dot netconf2017 - VS拡張
Dot netconf2017 - VS拡張
boost - std - C#
boost - std - C#
Ride on azure~アイデアソン編~
Ride on azure~アイデアソン編~
私とC++ in 例外安全day
私とC++ in 例外安全day
他言語との連携(ネイティブから動的言語まで)
他言語との連携(ネイティブから動的言語まで)
Friendlyで始めるwindowsアプリシステムテスト自動化+内部使用技術解説
1.
Friendlyで始める Windowsアプリ システムテスト自動化 + 内部使用技術解説
2.
石川達也 株式会社Codeer代表取締役 Microsoft MVP for
C# Windowsアプリテスト自動化歴9年 自己紹介
3.
システムテスト自動化って? 文字通り人間の代わりに アプリケーションをプログラムが動かして 成否判定をすることです。
4.
お得? コストを抑えたらね (・∀・) エラー! 成功 開発期間中、 実行し続ける。 デグレを早期に検出。 テストの作りが悪くて不安定 仕様変更等でメンテ 作成 指定のケースではデグレがなかった という情報を取得できた! BugFix 実行
5.
OS層 Winコア(User32,Kernel32とか) MS,他ベンダGUI ユーザ実装 ←SendInput 不安定、遅い ←Win32Api ←UIAutomation 難しい 操作できないのもある GUIアプリをプログラムからどうやって操作するの?
6.
ところで、同一プロセスからだったら操作できるでしょ? //当たり前 void Operation() { _comboBox.SelectedIndex =
1; }
7.
そこで、Friendlyですよ!
8.
Friendly 他のとは根本的に違います。 対象プロセスと、友達になって、 まるで、同一プロセスでプログラムするように 我が物顔で操作できるのです! 最強
9.
①君のものは僕のもの public partial class
MainForm : Form { ComboBox _comboBox; string MyFunc(int value) { return value.ToString(); } } public void YourThingIsMine() { var process= Process.GetProcessesByName("Target")[0]; //友達になると・・・ var app = new WindowsAppFriend(process); //別プロセスのオブジェクトを //自分のプロセスのもののように操作できる。 dynamic form = app.Type<Application>().OpenForms[0]; form._comboBox.SelectedIndex = 1; string ret = form.MyFunc(3); } そ、そんな・・・ .Netはもちろん NativeのDLL公開関数もOK!
10.
②僕のものは君のもの void MyThingIsYours() { var process=
Process.GetProcessesByName("Target")[0]; var app = new WindowsAppFriend(process); //自分のコードを動的にインジェクション! WindowsAppExpander.LoadAssembly(app, GetType().Assembly); //挿入したコードを相手プロセスで実行 app.Type(GetType()). ForTest(); } static void ForTest() { /*テスト用*/ } え!? 勝手に?
11.
上位ライブラリ紹介 基本 内部メソッド操作、DLLインジェクション Win32 WinForms WPF (めとべや) GUI操作ライブラリ PinInterface (VSHTC) 記述性UP 拡張も自由自在! Friendlyの上に構築されているから安定感抜群! //各コントロールをラップする //シンプルで直感的なインターフェイスのみ定義されている var _comboBox
= new FormsComboBox(form._comboBox);
12.
デモ
13.
Codeer で検索 eが一個多い これらはNugetで無料で入手できます!
14.
自動化環境 + + VSもTest作成だけならExpressでOK + Friendly Friendly.Windows Friendly.Windows.NativeStandardControls Friendly.FormsStandardControls Friendly.WPFStandardControls Friendly.PinInterface VSTest
15.
ということは? ・ツール購入コスト無料 ・簡単なインターフェイス、既知のインターフェイス →作成コスト減 ・安定感抜群 →運用コスト減 ・テスタビリティーを容易に操作 →作成、メンテコスト減 ・高速な動作 →実行時間減
16.
備考) テスタビリティー操作(自動化と相性悪いコード) //ここの結合は不安が少ない void Event(object
sender, EventArgs e) { EventCore(PointToClient(Control. MousePosition)); } //これをFriendlyで呼び出す void EventCore(Point mousePosClient) { //ここから先のロジックをテストしたい。 } プロダクトを変更。 難易度高くて効果の低い 部分は自動化しない。 効果の高い部分のみ 呼び出せるようにする。 ・キー、マウス直接参照 ・D&D ・OS提供のGUI etc… ・タイマ ・非同期 ・ペイントイベントを利用したトリッキーコード etc…
17.
コスパに優れた自動テスト構築が可能! 明日からでも自動化しよう!
18.
・・・ 知ってますよ。 わんくま横浜は、 こんなことじゃ満足しないんでしょ?
19.
本邦初公開! 友達の作り方
20.
最終的にはリフレクションを使っています。 でも、普通は自プロセスにしか使えないですよね? //いくら探してもみつからない foreach (var assembly
in AppDomain.CurrentDomain.GetAssemblies()) { var type = assembly.GetType(“Target.ClassA”); } //当たり前だけど、自分のプロセスのFormしか見つからない var forms =(FormCollection)typeof(Application).GetProperty("OpenForms"). GetGetMethod().Invoke(null, new object[0]);
21.
ということは、こうですよ。 リフレクション実行! Dll Injection! これに話しかける。 関数名、引数を渡す。 あれ? テストプロセスと友達だった気がする…
22.
Win32APIを使ってDLLインジェクション //インジェクションできるのはネイティブDLLのみ //対象プロセスにメモリ作成 IntPtr path =
VirtualAllocEx(...); //ロードさせたいパスを書き込み WriteProcessMemory(path, ...); //LoadLibraryのアドレスを取得 //★Kernel32は常に同じアドレスにロードされる! IntPtr pFunc = GetProcAddress(GetModuleHandle("Kernel32"), "LoadLibraryW"); //LoadLibraryを対象プロセスで実行! CreateRemoteThread(..., pFunc, path, ...); 入りました!
23.
ところで、 CreateRemoteThreadに渡す関数ポインタの型 CreateRemoteThread(..., pFunc,
...); //pFuncの型はコレに合致するもの typedef DWORD (__stdcall *LPTHREAD_START_ROUTINE) ( [in] LPVOID lpThreadParameter ); //あれ?戻り値・・・ HMODULE LoadLibraryW( LPCWSTR lpFileName ); 64bitのとき、合ってないやん! ∑( ゚Д゚ノ)ノ
24.
HMODULE Func(LPCWSTR) { HMODULE m
= nullptr; return m; mov rax,qword ptr [rsp] } int _tmain(int argc, _TCHAR* argv[]) { LPTHREAD_START_ROUTINE f = (decltype(f))Func; auto ret = f(nullptr); call qword ptr [f] mov dword ptr [ret],eax return 0; } 実験してみました! 戻り値使わなかったら 全く問題なし (゚∀゚;) HMODULEを戻り値に使っても レジスタしかつかわない 情報が落ちただけ
25.
挿入したDLLのAPIを呼び出し //自分のプロセスで関数ポインタを取得 IntPtr mod =
LoadLibrary(dllPath); IntPtr proc = GetProcAddress(mod, procName); //差分を計算 var distance = …;//proc - mod; x64とx86で型が違う //相手プロセスの中でのDLLのアドレスを取得 IntPtr targetDllAddress; EnumProcessModules(...) ... //差分を足したら、対象プロセス内での関数ポインタになる IntPtr pFunc = …;//targetDllAddress + distance; //指定の関数を対象プロセスで実行! CreateRemoteThread(..., pFunc, path, ...); Init() 初期化開始! 通信サーバー 立ち上げるよー
26.
呼び出された関数内で.Netのアセンブリをロード //ホストAPIを使って.Netの機能呼び出し ICLRMetaHost *pMetaHost; ICLRRuntimeInfo *pRuntimeInfo; ICLRRuntimeHost
*pClrRuntimeHost; CLRCreateInstance(... , IID_PPV_ARGS(&pMetaHost)); //pRuntimeInfoの検索 //ルールはWindowsAppFriendのコンストラクタ参照 ... //CLR開始 pRuntimeInfo->IsLoadable(...); pRuntimeInfo->GetInterface(... , IID_PPV_ARGS(&pClrRuntimeHost)); pClrRuntimeHost->Start(); //.Netのアセンブリのロードと目的のメソッド呼び出し pClrRuntimeHost->ExecuteInDefaultAppDomain (asm, type, method, args, &ret); もちろん.Netの機能が いるよねー。
27.
.Netのアセンブリインジェクションで気を付けること //アセンブリの解決 AppDomain.CurrentDomain.AssemblyResolve += ...; アセンブリの解決! GAC、プロービングパス以外のDLLは、 中途半端にしか使えない。 AssemblyResolveで解決 ハマりポイント!
28.
後は、通信サーバーを立ち上げる 僕たち、 友達になりました! サーバーと言っても単なるWindow WM_COPYDATAを使うと リッチなデータが送受信できる! SendMessageでデータもらってます。 でも、COM対策はしてるので例の ルールは気にしなくてOK!
29.
求む! Friendlyエバンジェリスト 今日実演したデモができるセットをご用意いたしております。 Friendlyのデモは手品のようなので、 LTや宴会でやったら、うけること間違いなし! また、会社に導入したいとき、上司に見せると効果アリ!? こちらからダウンロードできます。 http://www.codeer.co.jp/download
30.
お知らせ 登壇予定 9/20 Boost.勉強会
#16 大阪 http://osakaboostjp.doorkeeper. jp/events/14150 9/11 SQIPシンポジウム http://www.juse.jp/sqip/symp osium/timetable/day1/
31.
ご清聴ありがとうございました。 明日からでもFriendlyで自動化を始めましょう! http://www.codeer.co.jp/AutoTest picture Dawn Huczek
Editor's Notes
PrivateでもOK
Download now