Hotwire Tech Blog

Scribes from Hotwire Engineering

GOAL

If you are already using Jenkins for continuous integration you can easily adopt for iOS as well. You can use all the features of creating jobs like build, unit tests, smoke, and regression as well as creating pipelines. This blog helps you to get started with setting up iOS CI and also running tests in parallel on multiple computers.

1. BUILD JOB CONFIGURATION:

Discard Old Builds

Discard Old Builds controls how long we would like to keep the build records such as console output, artifacts, reports. This can be achieved by one of two criteria

Goal

Having a good automation framework is fundamental for a quality app. There are several tools available for mobile test automation but not any framework which ties them all together. At Hotwire we wanted to create a test automation framework for Mobile Native apps which will help us to scale & maintain tests as we add more features to the apps. We came up with following requirements for the frameworks:

  1. Test scenarios should be written in plain English so that it is easy to maintain & most importantly tests should reflect end user perspective.
  2. Tests should scale. Able to slice and dice tests based on features set & level of testing like…

    Read more...

Overview


Our Android application originally started out using AsyncTask to make our api calls. This tightly coupled the networking calls to our Activity lifecycle. Any configuration change would force the Activity to be restarted, and by extension the AsyncTask would be restarted. At Hotwire we wanted to change how we were making and handling our api calls and decouple this from the Activity lifecycle. During the change to a more robust and thought-out architecture for handling our data we wanted to ensure that we built in client-side caching, made the new framework easily expandable to new requirements, abstract away where the source of data was originating, and…

Read more...

Introduction

Typically, when users search for content using Google Search on their mobile devices, they are directed to the corresponding mobile web page or in some cases the actual web page itself.

This often leads to a sub-optimal user experience mainly because mobile users are limited by screen size and processing power. Also web pages have multiple scripts executing on load which sometimes render the screen inactive for intermittent periods of time.

App indexing on the other hand, gets the app into search results. If the app is already installed on the user’s phone, the app is directly launched from the search results or in cases where the user does not have the app,…

Read more...

Overview

 

Our Android app had grown at a rapid pace, and more growth was on the way. Our UI widgets were defined in the same classes as our API response handlers. Some of our activities were over two thousand lines of code. Activities and Fragments that had originally seemed short, succinct, and well organized had grown into an unrecognizable thicket of Java. We needed to tame this wild growth before our code base became another spaghetti code behemoth. Enter MVP.

As anyone involved in the Android development community is likely aware, the Model View Presenter (MVP) architecture has gained a lot of traction in the past few years…

Read more...

Goal

Speed of deployment has always been an important metric used to judge how often and efficiently an app release can be. As we’ve mentioned in our previous post iOS Continuous Deployment , here at Hotwire, we spend a lot of time figuring out ways to reduce release regression time. Two pockets of opportunities are – reduce the test writing/execution time and another is to reduce test framework maintenance time. In the past, it has been a challenge to keep our functional testing framework robust enough with every iOS release considering third party tools(in our…

Read more...

Problem

There are many test case management tools available out there but if the automation team does not select the right tool, they could face one or more of the below limitations:

  • Cannot update test case execution results automatically.
  • Cannot easily integrate with our defect tracking tool.
  • Cannot create custom reports.
  • Cannot notify test results to interested parties automatically.

Evolvement

The Android team has used various tools for managing test cases ranging from simple ones like Word, Excel to full blown ones like TestLink. With Word, Excel etc. we can just list the…

Read more...

Goal

At Hotwire one of our goals is to create processes and tools that help deploy new features in iOS apps as often as possible with high quality. In other words, we want continuous deployment for iOS apps. To get there we have two main challenges – one is regression time and another is deployment time. In this blog we will focus on how we reduced deployment time to App store from hours to minutes with the help of Fastlane & Jenkins. It took hours because there are several sub tasks involved like creating a release build, uploading to iTunesConnect, uploading binary & dSYM to Fabric (Crashlytics) for crash…

Read more...

The purchase path in any m-commerce app needs least resistance and must be devoid of errors. Credit card entry is a very important component of the purchase path, and in our initial versions of the app this particular component was powered by a third-party open source library. The decision to use that library was purely based on time-to-market.

Why write our own?

Throughout the months that the Hotwire android app was in the play store, there were a significant numbers of errors attributed to this library which exposed deficiencies, especially in the following areas.

Read more...

Our partners give us access to their unsold inventory – empty seats on flights, empty hotel rooms, and extra cars on the lot – at big savings. By showing the name of our travel partner after customers book, Hotwire can get travel deals that are significantly below published prices.

Because we can’t disclose a lot of detailed information about the hotel, showing the general location of the hotel via neighborhood polygons on a map becomes a very important feature for our app.

The initial versions of our Android application had only…

Read more...