I spent some time building an app for end2end testing, and I build a simple iOS and Android Demo.the details as shown below:
## Description 1. I build a demo app whose home page is a TableView, and each Cell is a test case. 2. Each Cell will be bound to a URL link. Clicking on Cell will use a URL link to build the ViewController and pass it to the ViewController with an identifier. 3. At the end of the ViewController's viewdidLoad() function, start an asynchronous detection task with delay. 4. After the delay, the asynchronous detection task will be executed. Taking the UI test as an example, the View property will be compared with the View property when the test is correct to determine whether to pass the detection task. Since this operation is on the Native side, It's very easy. 5. Pass the message that the test is correct or failed to the front-end test framework. Because all of the Cells are ViewControllers built using URLs, we can share all of the test cases with a ViewController, which can perform different asynchronous detection tasks depending on the incoming identifier. ## How To Run The test will run as follows: 1. Appium framework controls JS click on Cell to enter test case 2. Once the Cell clicks, the ViewController will initialize and trigger an asynchronous detection task. 3. The Appium framework test case waits for a while and checks if the received message is "Success" or "Fail" to determine if the test is correct. 4. Take the next test. In the above scheme, the Appium framework is equivalent to controlling the entry into the test case, and the specific detection task is placed on the Native side. ## About Simulator And after investigation, SauceLab is in line with our requirements. First of all, they can provide free real machines, although the real iPhone only provides iPhone6, Android provide Samsung Galaxy S6(Android7.0),but in our case, it's enough! By the way, Android provides ARM simulator. ## TravisCI And SauceLab: 1. Configure the environment variables required by SauceLab in TravisCI 2. In Travis CI, we first build the project and then upload the app (iOS) or apk (Android) to the SauceLab server. 3. In Travis CI, start the Appium test and run the E2E test with the remote SauceLab simulator and app/apk. If you have any suggestions, please let me know. your suggestions are very helpful to me! Best Wishes Renmin Links: 1. How To Upload App/Apk:https://wiki.saucelabs.com/display/DOCS/Uploading+Your+App+to+Real+Device+Storage+with+the+REST+API 2. SauceLab Mobile Test Document: https://wiki.saucelabs.com/display/DOCS/Mobile+Application+Testing 3. Config the Appium Test With SauceLab: https://wiki.saucelabs.com/display/DOCS/Platform+Configurator#/ 4. Appium SauceLab Python Example: https://wiki.saucelabs.com/display/DOCS/Python+Example+Script+for+iOS+Mobile+Application+Tests 5. Supported Simulators:https://app.saucelabs.com/live/web-testing | | 王仁敏 | | [email protected] | 签名由网易邮箱大师定制 On 08/16/2019 17:04,York Shen<[email protected]> wrote: Some thoughts about End to End test on Weex Android. I spent some time this week coding for Android End to End test using the test framework Android itself provided. After all, any fancy test frameworks for Android is an encapsulation of Android Test framework. Here is what I got: If you run a test case without Android Emulator, all the Android API in a test case is actually mock APIs by a test framework, not provided by Android system, which means the behavior of mocks and Android system itself is different in some aspect. In the situation of Weex, I am stocked by loading and running shared library running on Android in test framework (Robolectric). It is very unlikely that we could load and run all of the 8 shared libraries built for Mobile x86 platform in Weex originally on Linux x86 platform when running test case, especially some of them dynamically links to shared libraries in Android system itself. If we are running test case with Android Emulator on Travis CI, we can get everything we get want by expanding a test framework called espresso[1]. The only problem here is Android emulator on Travis CI is really slow due to nested-virtualization problems of Travis-CI [2]. As this is caused by the KVM virtualization technology, I don’t think we can get over the emulator performance problem in a easy way. [1] https://developer.android.com/training/testing/espresso <https://developer.android.com/training/testing/espresso> [2] https://travis-ci.community/t/add-kvm-support/1406/10 <https://travis-ci.community/t/add-kvm-support/1406/10> 在 2019年8月12日,11:08,王仁敏 <[email protected]> 写道: I have recently designed a test framework with York, and we want to add some end-to-end test cases to improve the stability and robustness of Weex. Our expected testing framework want to verify basic properties of the View, instead of plain text(Because plain text verification has too many limitations) For all test cases, the following three processes are required: 1. Create UIViewController/Activity 2. Simulate user input 3. Check if the result is right We thought of several possible solutions: ## 1. Based on the pure Native testing framework. Weex provides the ability to load pages from a URL file. If you don't rely on the emulator, you need call some interface to convert the URL to a page (York said this process can't build success) ## 2. Based on the Detox(end-to-end framework) and simulator. - Create page: build the page based on the URL (the entire Android project is already running, so we can call the interface) - Simulate user input: (1) simulate user input via JS (2) simulate user click event using native code - Test result: on the Native Side, compare View's properties with the expected. If it is consistent, notify the JS the test case is succeeded, otherwise, notify the JS the test case is failed. But Android emulator has many limitations. According to our survey, the Travis CI Android emulator is slower, and the X86 emulator Google has not been updated for three years, and the ARM emulator is subject to the Travis CI architecture. @Jan, I learn about you have done some works about Cordova-testing-framework recently. How do you solve this problem? I will be very appreciated if anyone can help me, thanks very much! Best wished. Renmin
