では始めましょう。みなさん、おめでとうございます。コンフランスは終わりについておりますので、皆さんが楽しむことをお願いいたします。こんにちは。私はカザーキマツオです。日本からです。カズです。私のソーシャルアカウント、メディアアカウントはカズココアです。私はスネアソフトエンジニアのヘスピンです。私は前のコンパニーのヘスピンやクリティエンジニアのヘスピンです。私はプロジェクト、ヴェアスクライアンとサーバーサイドを持っています。今日の話はここです。このセッションはケスターディーです。私の経験を行います。私の経験はあなたにとても面白いです。私はキャプチュアのHTTPリクエストをコンフェルネットワークについてお話しします。私はアピムシナリオンについてお話しします。私はアピムテープをお話しします。私はアピムテープをコンフィギュアのテストアップについてお話しします。まず、私はテストターゲットについてお話しします。このケスターディーは私の先輩のコンファニーの経験についてお話しします。アップは多くの歴史のコードです。サービスのアップは10年以上経験しています。サービスのコンフィギュアについてお話しします。コードも長い時間で発売されています。いま、一つのアプリカーについてお話しします。アンデュロイドとIORISのアプリカーも一つのアプリカーを発売しました。アップは10 sigp0よりも一つのアプリカーへのアプリカーから発売しました。一か月間、アップ々のコードを発売しました。他の部分については2014年から始まった経験から始まったモバイルアウトメーションのインバイメントは最近の年より多くありませんテストエンジニアは私だけでしたこの状況については私たちがアンドライダーとIOSを与える必要があります私たちが最高のバッグランドについては私たちが彼らのHTTPリクエストを採用するためのバッグランドですこのバッグランドは、サービスデザインを使ってサービスの行動を使ってとても重要です私たちがインバイメントの特徴を改める必要があるのですサービスデザインはウェブサービスのようなイコマサービスやウェススペシャリングサービスのために人々のために彼らのイベントを使ってそれを使ってそれをアップベターで使うためにサービスデザインを使って新しいフィーチャーを供用するためにサービスデザインを使ってサービスデザインを使ってサービスデザインを使ってサービスデザインは非常に重要ですその結果は決められているのですそのため資料が私はしないででも実際にデザインは1人でしたその場合はアップベースデザインを使って見たことがある前のベース実際に数のイベントを取り入れているのがでも、試験の中でのデータの中で非常に低いだから、知っていることが難しいのが前のレースに出ているのが難しいのがでも、新しいバージョンがデータの数を取り入れているのが全てのユーザーによってデータの中でのデータを取り入れているのが全てのユーザーによってデータを調整するとそのため、その時の数の数が変わっているのが前のデータによって数が変わっているのが2つになったのではないかと前のバージョンではなくそのため、データは無いのではないかとそのため、データを取り入れているのが必要なのですモバイルアップのレースのリースは非常に多く長い時間でこの場合は数週間くらい1週間くらいデータを調整するとオペレーションの数が増えているのがコントロールを調整するのが必要ですそのため、オペレーションのデータを調整するとオペレーションは簡単にアンデータを調整するとアンデータを調整するとアンデータを調整すると今日の問題はどのようにアンデータを調整するのかを知りましょうユーザーのイベントを描くことができますユーザーはこのアップを使ってユーザーはアクションを使ってアップを開けボタンをクリックしてサンフビューを使ってデータはこのようなフォーマットでジェイソンフォーマットでイベントがアレーとキーを描くことができますアレーはタイムキーとイベントを描くことができますこのデータを描くことができますこのデータはタイムシリーズとユーザーのアクションをサーバーの中にユーザーを開けアップを開けアップをアクションでローカルを開けネットワークのリクエストを使って毎日パチュアの日にアップをサーバーにサーバーに2のレイヤーがこの場合1はUI2はノンUIユーザーをアップでUIのレイヤーをサーバーにウォークの後にウォークの後にデータをローカルにサーバーにウォークの後にタイムシリーズとピックペンスでタイムシリーズがウォークの後にリクエストがウォークの後にタイムシリーズがウォークの後にブレーキングチェンジで多くのイベントにも出てくるかもしれません。多くのイベントにも出てくるかもしれません。現実的には、法案を確認することが可能だ。これは、確認が可能だ。そして、結果、その資料が可行になる。この試合を解釈させ、バッグが在意していることを理解しました。今、私はアンドロイドとIOSのケースを選択しています。私はアンドロイドとIOSのケースを選択しています。まず、アンドロイドのケースです。アンドロイドには、2つの主なコンポーネントをディスプレイしています。数年後としてアクティメントがあ ustedesと同じく厳しく生涯交ではありません。実際、私はこのビジュを送付しているっていう花生です。私とは何かのスケールを引いて玩女の多くのプレイしたプレイしたプレaxterでされています。ブルーカラーのアイテムは just a start point to build each component.グリーンカラーは display UI, UI Views on the display screen.レッドカラーは the Views shut down so users cannot see any UIs against the activity or fragment in the red color section.Kindly, when you finish the app, then the app is basically the red section.Let me focus on between the blue color and the green color.Once the activity starts, then blue color starts and till become green color, there is a three step.On create, on start, on resume.Fragment case is more complicated.There is a six part after launching the fragment before showing some views on the display.And thinking the open the app case.How to detect the open the app and when we must store the open app.Which method should be there?Actually, this method case, actually the user opens the app.How to store them?We must detect and implement storing and sending logs to somewhere.This kind of complexity makes it easy to mistake implementations.But a business person say, I want to get a log when a user opens the app.But in Android case, there is a one, two, three, four way, almost four ways to we can say open the app.For example, the first case is very common thing.Tap the icon and launch the app.This is actually open the case.And Android, we can show the app history.Usually, there is a square icon on the bottom bar.And from, we can launch the app from here.This case also for users, open the app.And of course, from notification bar, also open the app.And in Android case, if you already open up A and up A, open up B.And then we put a back button.Then open B disappear and open up B disappear and up A appears again.In that case, also open the app.Actually, in Android case, I saw a complicated lifecycle.Open from the icon case, all plus has been proceed.So if a user opens the icon, tap the icon, then the activity launched and on create and on start and on resume.Everything is called.But for example, from launch of history, then only on resume is called.So in some day, if a developer move the logic, getting the event logic from on resume to on create, then the log is called only once.Only open the app from the icon.Developers must know this lifecycle very well to avoid this kind of one implementations.If no one notice the changes in their reviews, review processes, the changes will release and the revamped logs will break.Fragment is very unique.In addition to their activity case, and fragment is very interesting thing.Fragment is reusable component.So this case happened.A developer put a log into a fragment for viewA.And another developer use the fragment because in another view for viewB because they have same items on the component.So another developer think, oh, I can use this component.But the fragment has some event log for viewA.But the developer doesn't know something logs is in the fragment.But fragment is used in B.And then what happened?The log event corrected in both viewA and viewB.Even their event should be only corrected in viewA.This kind of complicacy happened frequently, very easy to happen in Android case.View thing in iOS case is very easier than Android because iOS have only one class.We say UI view controller.So this case not so frequently happen in iOS case.But we happened in iOS case was this one.In iOS case one interesting is Apple has been published on new programming languages, Swift.Then many developers started converting objective C code to Swift in Japan.Based on my experience, as developer try to rewrite their implementation in Swift, keeping current behavior.This kind of case also easy to break non-UI layer.In mobile world implementation, tie ratio to UI component break create difficult to make them testable.So it is difficult to figure out such regression on unit test level.I talked roughly for Android and iOS specific case.And here I will show last two things easy to happen such breaking changes.One is prototype and implementation something.If our future is early stage, then we implement our future as a prototype or minimal implementation and reset.The purpose is evaluate the value of the future.Once we finish evaluating the future is worse, then we rewrite or implement additional features more.Then the future and relevant future will grow.Meanwhile, we must keep the same log to make it miserable, consistency to keep the metric.Because if some metric change, then we can't measure the same thing as a constant tree.And up also have very complicated view flows.Views are not go and back to the next screen.For example, in this case, the view A is only communicated with B or CD.And B is only communicated with C.And in back case, it also view C to B and to A very easy.But our app harder this kind of way.So view C can jump to the A from C.This kind of complicated view flow also easy to break any logs.Because everything is behind the UI.So if the developer just seeing the views and just thinking the user can walk to this way,then never thought such event and some breaking change happen behind the UI.I talked about our situation.Logging user flow and Android has a very complicated life cycle and easy to break the event.And in our case, we are programming a language change.And long running code has very historical thing.So the flow and event and many things is very complicated.So to make sure the HTTP request behind the UI and make sure the exactly the logs have no break,I started capturing the HTTP request.What I did was capturing HTTP request to ensure them if they heard unexpected logs in scenarios.I use some tools.I will explain some tools later.Suddenly encouraging communication between developers might prevent such breaks.To reduce the missing some specification for example.But people, no one knows everything.So this kind of automation is necessary thing to prevent such break changes.I use HTTP proxy server.And I want to show some way to capture the HTTP. Roughly when I consider the way, then there is almost four ways we can implement.We could implement.One is the app, communicate with proxy server directory.And the proxy server communicate with production servers.And the production server there is a reverse proxy to handle a request to particular app servers behind the proxy servers.With reverse proxy servers.And next, second thing is the device for the Wi-Fi settings.And we can set a proxy setting on the Wi-Fi setting on Android and iOS.One thing is just connect to the Wi-Fi without non-proxy settings on the device.And Wi-Fi communicate to the proxy servers changing the Wi-Fi configuration.And after that proxy server communicate with reverse proxy and application servers.This is the second way.And the third way is change the proxy setting on the device and communicate with proxy servers directory.After that, it's the same reverse proxy and application servers.And the last thing is non-proxy servers case.In this case, we can get the HTTP request in the reverse proxy layer.The first three things is where we can get the HTTP request is in the proxy server.It's the first three things.And the last one is get the HTTP request in the reverse proxy servers.We consider which way is the prefer for us.And at some point, we want you to handle test environment in the test script.And we want to start implementations from a small one.So I wouldn't want to change that widely in this case.So finally, we choose the first one.We change the up endpoint to the proxy server.And after that proxy server communicate with reverse proxy.And to achieve this, we should implement the way to change endpoint in the test app.There's roughly three ways to change the endpoint.One is prepare build configuration for test.In this case, we need a rebuild.Second way is change the environment variables, process arguments, intent arguments,which is provided by Apium capabilities.This way is we don't need a rebuild if the logic already in the app.Then app can change the endpoint to the particular URL.Third is we use the preference where some helper app,like Apium's IO settings does.We finally choose the second way.Because the first way require rebuilding.So we don't test against the rebuild.And third way is we must prepare helper app.So this is maybe not so small start.So we choose the second way.Very easy to implement.And the communication flow to change the environment.There are two ways to get the HP request in proxy server.And the communicate with server is here.In previous company with Ruby mainly.So I also write a wrote test script in Ruby.The Ruby communicate with Apium.And Apium communicate with drivers.And drivers handle test app.And test app change the endpoint.And communicate with proxy server.And proxy server communicate with servers.We are servers.And we can handle this orange point.So we can configure, change the configuration where Ruby scriptand the driver part and the proxy server part.We don't need to change any code in the app test target.So we don't need rebuilding for the test target or something.And capture the data in the proxy layer.And one with Apium.We prepare from this.I want to show some test lifecycle thing.Comparing with Apium.And the express works test provided by Google and Apple.In Apium case.Interesting thing is Apium can control building test environment outside the app.This means I will show you your figure in next page.In XC test case was not released yet.When I started to do this one.But in XC test case also have the same limitations to handle the test lifecycle.Express also have the same one with XC test.Let me see the lifecycle in the Apium.In Apium case.There is almost three part.First is the configured test device and environment.And run the test.Just send some find element or something to the test app.And the final thing is tear down is remaining up or deleted up.Mapping to the Ruby code.Similar to this.For example,in Ruby test script called setup is like a quiz session.And test something case is just a center of that.Send some command to the Apium.And handle the app.And tear down is almost close the session or remain the app.And go to the next setup.This is a lifecycle of the app.And test scenario written in Ruby.But comparing with Apium and express over X test.Then the last cycle we can control is different.In express over X test case.The test case start after installing the app.So launching the simulator or emulator will prepare a device already finished by the framework.And the setup happen after installing the app on the device or on simulator emulator.And after that we can implement a test case and tear down.So the last cycle is there.In Apium case we can control before installing the app.But in express over X test case we can control the last cycle after installing.But before launching the app.This is a kind of X test and express source easy test script.And we can start just a setup call.In X test case is we can launch the app with launch method.But before that already installing is finished.Expressor case also same.We can launch the app, launch the activities.But before this is the setup section.But before that already installing the app to the target device already finished.And next is 80 proxies.I use two proxy servers.One is wire mock between Java.And the other is I implemented one between Elixir.And the reason why we choose this one and implement this one isWe want to correct data by JSON.They are very easy to handle the HTTP request with JSONand store the HTTP request as a JSON.So we can easy to analyze the data.Actually we use these proxy servers in another way.But in this session case the most important thing isWe can handle the request and store the request as a JSONVery easy to handle.And we integrate the proxy server with rpm.So launch the proxy server before launching the test app.The benefit of rpm is we can control the some environmentbefore launching or installing or something.So finally the test suite became like this.In Ruby script we implement our setup.And some test case and tear down and analyze the dataand summarize the test result.And the proxy server start just calling the setup.But before rpm script start.And after that rpm start to installing the appand try to launch the app.And then proxy already started.The HTTP request which happened just after launching the appalready we can capture and go the run testand bring the app and delete app.And after that in tear down phaseruby script close the proxy server.And in analyze section with Ruby scriptI counted the number of HTTP requestand pass the JSON body and make sure the loghave this log, this log and this log.In many cases if the scenario is the sameand the event log doesn't changethen the number of event log should be same.So the HTTP request alsoand the body also should be the same.So I just check very easy.I talked about, yes, summarize.I talked about the lifecycle on Appiumand get the HTTP request via proxy serverand how I implemented the capturing data behind UIand we launched the proxy serverbefore starting the Appium somethingand close the proxy serverAnd after Appium's processionwe can implement such thingwith Ruby or Pythonother script and Appiumif you want to do a similar thingwith Espresso or XC testthen that case alsoyou must implement similar thingusing the Python scriptfor examplewith Python script launchedXC code buildand launched the XC testwith XC code buildand run some testand after that XC code finishedand next the signalsend to the Python scriptPython script here downand measure the resultso almost the two achieve the same thingin Espresso and iOS casealso need a script casenext the frameworkthat's all for the capturing HTTP requestand from nowI want to show one tipthe second wayI choose the wayto provide the environment variablesand process argumentwhich provided by Appiumin XC test frameworkprovider environment argumentfor XC code build argumentif we put some databeer environment argumentthen the applaunched by XC code buildcan handle theenvironment variableswhen the app running on the processif the app haveM processvalue for exampleif the app have this kind of codeand the applaunched by XC code buildwith process variablesprosess environmentthen the onlythis case the appcan handle this methodso if you implement acontrol flow using thisM process valuethen you can handle somewith the sameXC code buildthingif a userif someonelaunched the appwithout XC code buildand actually theM process value exists in theappin that casethe process launchedactually launched butthe process have known this kind of environmentvariablesso it's very safeif you release the appwith this kind of codebut in generalusers never seen thiskind of behaviorsin the appin the appium you canset this configurationas a process argumentand you canput some environmentlike a JSONandroid case we can put your intent argumentandroid runneralso serve a similar casewe canput your launch the activitieswith some additional dataappiumalready provides some kind of argumentsso theI wrote optional intent argumentbut you can find another intent argumentyou can use thisto launch theactivitiesand thenif the apphave some control flowshandle the intent argumentthen you can configuresome datafollowing the intent argumentandactually one interestingonly androidandroid canget all package nameinstalled on the deviceso if youexample.comexample run on some package namethenanother app can detect the appis exist in the devicein this caseis alsoyou can handle your environmentlike aif thispackage name exist in the devicethen the appbehaved like thisyou can implement this kind of codethis code is much easierbutif someone knows thisoutside the company guysor figure out such behaviorin the appthen the guy also cansend the same argumentto the appthis is androidso this is a bit different from iosbut we can dothis kind of hacky thingin android casethis is the original tipswhenwe can emulate the push notificationswith androidfor androidusing the adb commandin android caseandroid apphandled notificationsas a broadcast receiverwe can send the adb commandwith apium andwe can also emulate thepush notificationsand something happens behindafter a usertouch the push notificationsand launch the appand easy toemulate the suspend and backand some life cycle thingin androidthis is a bitassurance tipsI put one more thingbut this is very smalland I put an additional thingI just talked about the hp requestbut in androidand ioswe can get a cpu poweror some metricmemory or somethingusing their apisso I justI will publishthis side laterso if you'reinteresting in this please see thisI won'texplain about this this timetakeawaystodayI talked about thesomething happens behind the UIand theI talked about thecase studycapturing the hp requestbehind the UIand I also showone case how to capture thatusing the apium scriptand I will also showsome tipsto make the test targetconfiguredwe are up in capabilitiesthank you very muchyeah I think we have time for questionswhat I understood iswe are trying to capturethe logs rightso we are trying to capturewhat happens behind the appso that means we are trying to capturethe logs ofyesso in myrecent workin my recent work experienceso what we noticed iswhen we bring in a proxyfrom a device like Androidso from theit will stop workingthat's becauseandroidand it will become so strong in security nowthat they won't helloSo, as soon as we bring in proxy into the setting of Wi-Fi, they certain apps it won't even talk to the server, though we launch.So for this, the alternative thing what we did was we looked around, can we build a solution for this or not?前に私はどこに行ったのか確認しましたが、市販のためにどこに行ったのか確認しました。私の名前はチェックです。これは、このコードをプレゼントする必要があります。しかし、ハップは、ハップを使って、アップはデバックステートにしています。これは、アンドロイドです。後に、チェックを行うことができます。そして、このチェックを行うことができます。このチェックを行うことができます。このチェックのアクティブを制作する必要があります。このコードを、アルムクリエイジ、アクティブ�ィは、フラグメントを制作する必要があります。そして、モノグリーのコードをオンライトして、クロックシーに使える必要があります。今にもアップルを、将来スミザーの作業をしていくと感じることができます。他に、 patientの勉強にも、このようにダブル勉強にしようと。このように、シミザーの印刷を見ることができます。アップルをアップルにして、ソフトの名前は、私はサフトにして、コミュニケーションと呼ばれることをやめます。