Search by labels

Sunday, January 3, 2021

Automated Test for Measuring a Website's Performance using Google PageSpeed Insights

PageSpeed Insights and Lighthouse are two free Google tools that we can use to measure a website's performance. Although with a common purpose, they are different by the fact that Lighthouse uses lab data only and measures more than performance data, while PageSpeed Insights focuses on performance metrics by analysing both lab and real-world data (the lab data being actually provided by Lighthouse).

This article will present an automated test built with Maven and two Java libraries - JUnit and RestAssured, that audits the performance of websites by using the features of the PageSpeed Insights tool.

First of all, PageSpeed Insights can also be used manually, simply go to its' homepage and check the metrics for your desired website:








The scores come also with a detailed explanation, a summary being:


The metrics scores and the perf score are colored according to these ranges:
  • 0 to 49 (red): Poor
  • 50 to 89 (orange): Needs Improvement
  • 90 to 100 (green): Good
To provide a good user experience, sites should strive to have a good score (90-100). A "perfect" score of 100 is extremely challenging to achieve and not expected. For example, taking a score from 99 to 100 needs about the same amount of metric improvement that would take a 90 to 94.


For the automated test we will use the PageSpeed Insights API which returns the audit results as a JSON object. To check it, simply: 

curl https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=${desiredWebsite}


With the general performance score being displayed in the categories section of the returned JSON:
"categories": {
      "performance": {
        "id": "performance",
        "title": "Performance",
        "score": 0.85

The implementation of the automated test can be found here, with:

  • JUnit being used to execute the tests, perform the @before and @after steps and load the websites list as a .csv file;
  • RestAssured performing the GET request and parsing the returned JSON;
  • And the actual test method asserting that the performance score is greater than or equal to 90 being:

@ParameterizedTest

@CsvFileSource(resources = "/pagespeedonline/websites.csv")

void testWebsite(String website) {

    RestAssured.baseURI = "https://www.googleapis.com";

    Double performanceScore;

    Response response = given().log().uri().

    when().get("/pagespeedonline/v5/runPagespeed?url=" + website).

    then().extract().response();

    assertThat(website, response.getStatusCode(), equalTo(200));

    performanceScore = Double.valueOf(response.

path("lighthouseResult.categories.performance.score")

.toString());

    websiteScores.put(website, performanceScore);

    assertThat(performanceScore, greaterThanOrEqualTo(0.9));

}


Being Java project built with Maven, this test can be easily added in a Jenkins job and executed periodically as a performance healthcheck.

Thursday, December 31, 2020

Leading in a VUCA World

Leading in a volatile, uncertain, complex and ambiguous (VUCA) world is not a straightforward job with predefined success recipes.

Wednesday, December 30, 2020

Code quality analysis with SonarQube setup locally in a Docker container

SonarQube is a leading tool for continuously inspecting the Code Quality and Security of codebases and guiding development teams during Code Reviews.

This tutorial will cover the steps for setting up a SonarQube instance in a Docker container on your local machine and performing an analysis of a test automation project developed in Java and built with Maven.


1. Install Docker and get the SonarQube image

Depending on the machine's OS, Docker is installed in different ways. In the case of this tutorial, the operating system was MacOS so Docker Desktop was initially installed.

Run in terminal: docker pull sonarqube


2. Start the SonarQube instance

Run in terminal: docker run -d --name SonarQube -p 9000:9000 sonarqube

Access the SonarQube instance at http://localhost:9000/ and login with username admin and password admin.


3. Create and configure a new SonarQube project

4. Run the SonarQube analysis of the Java project

Run in terminal in the project's folder (where the pom.xml file is located) the following command, shown also in the previous step:

mvn sonar:sonar \

  -Dsonar.projectKey=automation-project \

  -Dsonar.host.url=http://localhost:9000 \

  -Dsonar.login=${token}

5. Check the results of the analysis

The issues discovered come with detailed explanations and with the steps for fixing them.

As seen in this tutorial, it's free and simple to check the code quality of development projects regardless of their complexity, but the true power of SonarQube is unleashed when using the enterprise version and in a remote setup available for entire teams.

Tuesday, December 29, 2020

Thursday, October 22, 2020

5 Ways To Listen Better - TED Talk by Julian Treasure

Without listening there is no understanding. And without understanding there can be no progress.

Saturday, March 14, 2020

The Myers Briggs (MBTI) Personality Quiz

Ever heard someone describing himself as an ENTJ or an INFP? Check out the below video to see what it means:




Wednesday, February 26, 2020

Monday, February 17, 2020

Crew Resource Management

A methodology developed by the Aviation industry, currently being adopted by Emergency Medical Services and which could also bring significant benefits if implemented in the business world.

 

Monday, February 10, 2020

The Change Curve

A theoretical model on how people emotionally experience a major disruption.

Monday, February 3, 2020

A Just Culture

Or why we should learn from mistakes and not punish the ones doing them - an important leadership lesson from the aviation world.