We can categorize the mobile apps into three types based on technology that we used to code them

  • Native Apps
  • Web Apps
  • Hybrid Apps

Native Apps :

Native apps are developed specifically for mobile operating system(OS).It means, developing an app specific to Android plaform OR app specific to iOS plaform but not common for both platforms[Android & iOS].
In simple words,the code you create for one platform cannot be reused on another.

  • Some of the techologies used to build native apps are React,Swift,Java,Kotlin Objective C, C++ ..etc
  • Pros : Native apps are faster and more reliable interms of performance
  • Cons: Native apps are higher cost compared to other types of apps – due to the need of creating app duplicate for other platforms[OS], this required sepearte support, mainteince and platform specific developers

Web Apps :

The behaviour of the web apps are quite similar to native apps, but these are accessed via web browser on your mobile device.

  • Some of the techologies used to build web apps are HTML,CSS,JavaScript..etc
  • Pros : Though this can be accessed on browser, compare to native apps we require less device memory and no customized code w.r.t platfrom(OS) which diectly reduce developement cost
  • Cons: Web apps are dependent on browser and always require internet to access the URL on your device

Hybrid Apps :

Hybrid app is the app that combines elements of both native apps and web applications. Hybrid apps are popular because they allow developers to write common code for a mobile app that can be used on multiple platforms

  • The techology used to build hybrids apps are combination of web technologies and native APIs. Examples: Ionic, Angular, Java, HTML ..etc
  • Pros : Support mutiple platforms, fast and relatively easy to develop, low-cost maintenance
  • Cons: Hybrid apps lack in performance, speed and overall optimization in comparison to native apps

What is Git?

Git is the most commonly used version control system in software industry.It tracks the changes that you make to the files and also makes collaboration easier within the team.
Below are the list of basic git commands that everyone should understand.


git config

  • git config -global user.name "[give your name]"
  • git config -global user.email "[give your email]"
The above command sets the author name and email address to be used in git commits.

git init

  • git init "[repositoryName]"
The command used to create/start new git repository

git clone

  • git clone "[repositoryURL]"
The command used to fetch/obtain existing repository from git

git add

  • git add "[FilePath]"
  • git add *
The command used to add the specific file OR more files to staging area

git commit

  • git commit -m "Commit message...."
The command used to commit into git with user provided commit message

git status

  • git status
The command shows/lists all the modified files that have to be committed

git checkout

  • git checkout [branchName]
  • The command is used to switch from one branch to another.

  • git checkout -b [branchName]
  • The command is used to create new branch in git

git pull

  • git pull
  • The command is used to fetch latest changes on repository remote server to your working directory

git push

  • git push origin [branchName]
  • The command is used to push the committed changes into remote server of the git branch

git merge

  • git merge [branchName]
The command is used to merge the specified branch history into the current branch.

Gradle

  • Gradle is a advance build management system based on Groovy and Kotlin.
  • Supports automatic download and configuration of dependencies.
Gradle has notion of projects & tasks,
  • Gradle build consist one or more projects.
  • Each projects consists one or more tasks.(Task means a piece of work i.e Clean the folder, Compile the source code, Run the classes, SendReport after execution….so on)

About build.gradle file:

  • Every gradle project will have build.gradle file, which describes the build.
  • This file will located directly under root directory of the project.
  • build.gradle file defines the project and its tasks, user can add any type of task in this file.

Sample Task in build.gradle file for better understanding:

Before writing a sample task in gradle project, first install gradle in your machine Steps to Install here..
I installed in Mac machine by using HomeBrew command:

brew install -g gradle

Note: if you get brew command not found error by running above command, it means your machine doesn’t have HomeBrew software please install by following steps to install here

Step 1:

Create new Gradle Project in Eclipse by following this steps to create here

Step 2:

Open build.gradle file in created project and clear all the default text inside the file.

Step 3:

Add below task in your build.gradle file
    task printWelcome {
    doLast{
          println ‘Hello new user,Welcome to Gradle'
     }
   }

Step 4:

  • Open terminal, go to your gradle project root directory( Ex: cd /Users/durgaPrasad/Documents/WorkSpace/GradleProject)
  • Type "gradle printWelcome" by omitting double quotes.
Your O/p is: Hello new user, Welcome to Gradle

Lets us learn few more things in Gradle....


How to update Project name and description?

  • To update Project name, user can change/update the project name by creating settings.gradle file in root project which specifies the project name.

    rootProject.name="GradleDemoProject"

  • To update description, user can update/add description in your project in build.gradle file, open build.gradle file and below line at top of the file

    description="""
    Hello user, this project is to understand gradle key features
    Project Name : ${project.name}
    “""

How to apply plugin in build.gradle file?

  • Plugins is extension to your gradle project which adds some preconfigured tasks.
  • Add below statement in build.gradle file
  • Syntax: apply plugin : 'pluginname'

    Example: apply plugin : 'java'

How to add comments in Gradle file?

Similarly like Java, we can use single & multi line comments in gradle file. The syntax are below

Syntax:
//Single line comments use two back slash
/*
Multi
line
comments
*/

How to manage/add dependency in gradle?

User can add project dependencies in build gradle, For example, user add all third party jars in lib folder under root of your gradle project.

dependencies {
compile fileTree(dir: 'lib', include: ['*.jar’])
}

How to add Task dependencies?

task clean1 {
    doLast {
        println 'Executing the clean task'
    }
}
task compile {
    doLast {
        println 'Executing the compile task'
    }
}
task run {
    doLast {
        println "I am running script....."
    }
}
run.dependsOn clean1, compile
Note: In the above, run task is depends on clean1 & compile tasks. Its means if you run command like "gradle run" in command prompt/terminal.. before running run task both clean1, compile tasks will execute.

TestNG is a testing framework inspired from JUnit and NUnit. It introduce some new functionalities to overcome the drawbacks in JUnit and making TestNG  more user-friendly.

TestNG is designed in such way that can support all types of tests, like unit tests, end-to-end tests..etc.


Now question comes in our mind is, How TestNG is more powerful then JUnit and what are the advantages of testng.Let us see....


Well defined Annotations:

  TestNG annotations are defined very clearly and easy to understand the usage of it.

Test-case Priority:   User can run the tests (or) test cases in order based on the business logic Priority.

Multiple Browsers Support:
    TestNG allows user to run same tests in multiple browsers like Firefox, Chrome ..so on.


Support Data driven testing:
    By using @DataProvider concept, user can run same test with multiple set of test data.

HTML Report:
   TestNG will provide understandable HTML report by default after completion of execution.
   User can integrate other third party reporting plugin like Extent report, ATU report..so on.

Failed test execution:
  Generally in test automation we see some false failures like loading/sync issues, to minimize the false failures and filter valid failures in testng there is possibility to re-execute the failed tests cases.

Dependent methods for application:
  TestNG support the dependence method execution. Ex: if one method is dependent on another.(Home page verification method is dependent on successfully login method)

Allows Grouping:
  TestNG supports Grouping, user can group tests based on features or modules or type of testing(Sanity or Regression).

Support for parameters:   There will scenario where user want to parameterize test data, lets say user wants to pass Browser name dynamically.(this basic example to give the some idea on the feature)