Replies: 23 comments 60 replies
-
Lyft currently has:
|
Beta Was this translation helpful? Give feedback.
-
We (Spotify) have a lot of unit and integration tests (32k at the time of writing, not including the tests in our shared C++ codebase). A lot of them still run in app-hosted test bundles for legacy reasons, which we're slowly fixing. These tests are hard to cache for that reason. We're also playing around with snapshot testing. It's been super helpful for validating views in different rendering modes (dynamic font sizing, RTL layout, etc). It's currently only in our shared UI toolkit library and we're storing them in We have ~500 XCUI tests that are mostly automated replacements for what would otherwise be manual end-to-end testing. Mostly non-blocking except for a very small suite of stable smoke tests that verify that the UI testing framework is happy pre-submit. |
Beta Was this translation helpful? Give feedback.
-
As of Oct 2020 (when I left), Uber had:
|
Beta Was this translation helpful? Give feedback.
-
At Robinhood
Before each release we run the full test suite + have a much larger manual QA regression test plan. We have a small time working on rethinking our testing strategy and find a more scalable way to automate more of our manual QA tests. I'll definitely have a lot more to share here over the next few months, especially around E2E and hermetic UI testing |
Beta Was this translation helpful? Give feedback.
-
Nordstrom:
In a perfect world, I would like to see much faster UI test runs, which is somewhat achievable in unit test land when we use KIF. It should be easy to create and maintain UI tests. Having some type of flow diagram of the entire app to understand which tests are affected by a change you make in the UI would greatly increase our productivity. For example, when you make a change in a VC it would highlight the parts of the flow that are affected. Lastly, a better testing grammar that is easy to read, write, organize, provides facilities to configure the app launch by test (feature flags, configuring signed in user, etc.), and doesn't require several seconds to initialize before a test can be ran. |
Beta Was this translation helpful? Give feedback.
-
Shopify Mobile (Android):
Our main pain points have been how long it takes CI to run (~11 minutes to build APK and ~15 minutes of testing) as well as failure of our BuildKite testing infrastructure in general (timeouts, network errors, etc). These infrastructure issues, the few flaky orientation tests, and legitimate failures bring our master stability down to 85%, which we'd like to improve. |
Beta Was this translation helpful? Give feedback.
-
At Ford for our FordPass/Lincoln Way iOS apps:
Challenges we've had and are looking to improve:
|
Beta Was this translation helpful? Give feedback.
-
Target
|
Beta Was this translation helpful? Give feedback.
-
Snapshot tests were critical for Dynamic Type adoption when I worked at Airbnb. Months before enabling the feature on the App Store I added a variant to our Happo pipeline and developers started fixing large font issues in their features. This was much more scalable than when I was manually testing the app and asking feature developers to fix UI components. I’m sure the team will have more to say about this at the upcoming mobile tech talk. Manual regression testing on release builds was also helpful to catch any remaining features that didn’t have screenshot coverage. I asked the QA team to test larger font sizes ~30% of the time, since that was the percentage of users with a larger than default size. I’m also a fan of build products testing. Things like verifying that all the linked libraries are correct, size of files make sense, and all the right data is included (bitcode, extensions, entitlements). I did this manually at Airbnb when we were transitioning build systems. Once we shipped an update that was accidentally built with the wrong version of Xcode causing some major issues. I definitely wished we had build product tests automated then! Haven’t heard about a company doing this on a large scale yet, but it looks like Jerry Marino had a similar idea: http://jerrymarino.com/2018/09/22/ios-build-validation.html I’m also adding some of these features into Emerge. |
Beta Was this translation helpful? Give feedback.
-
Airbnb (iOS) as of today (March 2021) has (building on what Noah mentioned):
|
Beta Was this translation helpful? Give feedback.
-
At Circle K (Android) we develop many apps and approach to tests was changing over time. So our legacy projects are a little bit less "tested" and requires more manual tests before releases. But general approach in projects is:
|
Beta Was this translation helpful? Give feedback.
-
at Avito (ios)
We would be glad to encourage you to try out our tools to extend your testing strategies beyond the traditional ways of doing them. |
Beta Was this translation helpful? Give feedback.
-
Hi all! I'm Pedro Gómez a Spanish Software Engineer working from Spain for a company named Karumi 😃 I can't share the specific numbers of our latest projects because I work on a software development studio where we develop different apps and I can't be counting all the tests of the different projects were I've been working on for Android and iOS. However, I can share our testing approach and tools in case it is useful for you. 🛠 Android Tools
🛠 iOS Tools
🗺 Testing approach Our team splits our app into different layers in order to use different testing strategies:
We do not add unit tests for our view models or presenters when using MVP or MVVM. That's an implementation detail of our UI layer. This UI testing strategy let us change any implementation detail in our UI layer and we think it is very convenient. We only add a "unit" or "integration" test to the view model or the presenter when there is a specific detail we want to test we can't cover with the already mentioned strategy.
Sometimes, when we start working on an already implemented app there is no place for unit tests because the code is not testable at all so we use XCTest and Espresso + screenshots and OHTTPStubs or MockWebServer instead of plain old mocks. This allows us to add coverage to the feature before modifying any part of the existing code. 🕋 Testing pyramid? In our apps, most of the business logic is implemented on server-side. That's why our domain is mostly a bunch of lines of code requesting data from the network layer and returning this information to the UI. However, our UI is complex and contains a lot of details we should check from our automated tests. That's why we think the testing pyramid is the best model for our needs. The amount of tests we write per feature is equivalent to the number of different states we have on the UI layer, the number of decisions we make on the domain layer, and the way we request and save data from different datasources. More than a pyramid, we would be talking about a cuboid or a cylinder. 😢 Pain points The main pain points we are facing right now are:
🌟 Wish list We are a small studio, most of the QA teams in some of the companies mentioned here are bigger than our team so there are some nice to have I'd like to implement in future projects if we have resources available:
➕ Extra resources For years, we've been working on open-source repositories we use in our training to show the way we write every type of test using different testing strategies. This is a list of some of the most interesting ones: |
Beta Was this translation helpful? Give feedback.
-
At XING we do a lot of unit, Espresso, Snapshot, but also a lot of e2e tests. As was noted several times in this thread, achieving a working e2e suite is quite hard, but we did not give up :) We have around 3000 tests on both iOS and Android and they run partially in each pull request + fully on a daily basis. We had to build a lot of tooling around it to measure instability, parallel the test runs in a way that each chunk has equal size, "smart" re-run strategies, where when developers need to re-run tests in the PR it will re-run only failing from the past run if the commit did not change. All the measures we took, help us to have a more or less healthy suite but we still trying to improve the monitoring that should say our developers and testers of what is broken and why faster, so they can react and unblock their PRs quicker. |
Beta Was this translation helpful? Give feedback.
-
Instabug has:
|
Beta Was this translation helpful? Give feedback.
-
Halodoc
|
Beta Was this translation helpful? Give feedback.
-
Hi! I wonder how are you saving snapshots? We used |
Beta Was this translation helpful? Give feedback.
-
It seems like getting UITests to be effective at scale is quite the challenge. Can anybody speak to their physical device device testing strategy? Have you found it useful to execute UITests over a representative sample of physical devices or does the simulator suffice? |
Beta Was this translation helpful? Give feedback.
-
At Snap/Snapchat: We have evolved quite a bit in our testing strategies over the years: Around 2014-2017, we invested heavily in UI tests as a way to provide coverage that's close to the customer experience. We adopted a platform-agnostic solution with Calabash to cover all the UI testing needs with the goal of having test owners write the test once, and it'll work on both iOS and Android. This tool was mostly adopted by QA engineers to write and expand the tests, but as the feature sets on Snapchat grow with the engineering workforce, we faced scalability challenges, especially when iOS and Android feature sets diverged (some features shipped on iOS first, vice versa), maintainability/onboarding new engineers became a problem as well since calabash is written in Ruby and is not native to the development environment. In the recent years (2018 onwards), we've shifted from Calabash to native frameworks (XCUITest for iOS and Espresso/UIAutomator for Android), as we gradually shift quality/test ownership from QA to Devs. This change really helped to exponentially scale the number of contributors and test writers. We've also beefed up our internal device lab to support all the internal testing needs on real devices. However, the investment here is still very top heavy (focusing on end-to-end UI tests), and getting coverage as early as possible (in the CI pipeline), and we've continuously battled against unreliable/flaky tests in the system as well as keeping CI pipeline fast and reliable. To combat these challenges, in 2020, we started a program to re-shape our testing strategy to be more of like Test Pyramid shape than a Test Hourglass (yes, we're very top heavy currently), here's the rough breakdown for both iOS and Android code bases:
Our goal is to detect bugs as early as possible and block these bugs from merging into main branch. This puts a lot of pressure on making sure the CI pipeline has both the right amount of coverage & is able to execute fast. Happy to discuss more and learn from you all on the best practices around testing strategies 😃 |
Beta Was this translation helpful? Give feedback.
-
I would like to open a discussion related to e2e tests. On which environment are you running them? Closely to the production environment would be the best, but is it an environment dedicated for testing or is it an environment also used by developers, stakeholder, etc..? If you are running e2e tests on an existing environment (let's say preprod or dev), how can you ensure that you will not break that environment or making it unusable due to performance issues for example? Let's say you have a test in charge of creating a new item. The assertion will be to see it in the catalog : Will you remove the item at the end of the test? Otherwise your database will just increase every time the tests are run. |
Beta Was this translation helpful? Give feedback.
-
@ NatWest BanklineMobile ( IOS )
|
Beta Was this translation helpful? Give feedback.
-
Here is a blogpost on how Reddit test their iOS and Android apps - https://www.reddit.com/r/RedditEng/comments/14gd9gc/ios_ui_testing_strategy_and_tooling/ |
Beta Was this translation helpful? Give feedback.
-
Hey everyone! Thank you for all contributions about this topic. I just wanted to throw in my two cents based on some cool stuff I found out while working on my latest research. So, I’ve been digging into whether snapshot testing really holds up as a solid strategy for web and mobile testing, and let me tell you, it’s been quite the ride. I put together a research paper called “Snapshot testing in practice: Benefits and drawbacks” and it’s been eye-opening. If you’re curious, I’d love for you to check out my work here. I hope this research helps on the case of adopting (or not) snapshot testing in practice, specially in mobile apps. Happy coding! |
Beta Was this translation helpful? Give feedback.
-
I'm curious to hear from folks about their general testing strategies, automated or manual, and what has been the most useful over time for your apps.
Beta Was this translation helpful? Give feedback.
All reactions