Google sheets API integreren in katalon studio

8 aug. 2025 | by Ralph Van Der Horst

Google Sheets API integreren in Katalon Studio

Google Sheets API Integratie met Katalon Studio

Introductie

Bij geautomatiseerd testen wordt Katalon Studio erkend als een uitgebreid en robuust platform dat de integratie van verschillende services mogelijk maakt om testworkflows te verbeteren. Deze tutorial toont hoe je de Google Sheets API naadloos kunt integreren met Katalon Studio met behulp van een serviceaccount.

Deze integratie is bijzonder waardevol voor testers die:

  • Testdata uit spreadsheets willen gebruiken
  • Testresultaten naar Google Sheets willen schrijven
  • Dynamische testcases willen creëren op basis van spreadsheet-inhoud

Vereisten

Voordat je begint, zorg ervoor dat je het volgende hebt:

Software Vereisten

  • Google Cloud Account: Voor toegang tot de Google Sheets API
  • Katalon Studio: Geïnstalleerd en ingesteld op je systeem
  • Java Development Kit (JDK): Versie 8 of hoger

Benodigde Machtigingen

  • Beheerderrechten in Google Cloud Console (of samenwerking met een beheerder)
  • Toegang tot de Google Sheets die je wilt integreren

Stap-voor-stap Implementatie

Stap 1: Google Sheets API Inschakelen

  1. Navigeer naar Google Cloud Console

  2. API Inschakelen

    Google Cloud Console → API's & Services → Bibliotheek → Google Sheets API → Inschakelen
    
  3. Serviceaccount Aanmaken

    • Ga naar ‘API’s & Services’ → ‘Inloggegevens’
    • Klik op ‘Inloggegevens maken’ → ‘Serviceaccount’
    • Vul de serviceaccount details in
    • Download het JSON-sleutelbestand

⚠️ Belangrijk: Bewaar het JSON-sleutelbestand veilig en deel het nooit openbaar.

Stap 2: Google Sheet Configureren

  1. Sheet Delen

    • Open je Google Sheet
    • Klik op ‘Delen’ rechtsboven
    • Voeg het e-mailadres van je serviceaccount toe
    • Geef de juiste machtigingen (Lezer/Editor afhankelijk van je behoeften)
  2. Sheet ID Verkrijgen

    • Kopieer de Sheet ID uit de URL
    • Format: https://docs.google.com/spreadsheets/d/SHEET_ID_HIER/edit

Stap 3: Katalon Studio Project Configureren

3.1 Dependencies Toevoegen

Voeg de volgende dependencies toe aan je build.gradle bestand:

dependencies {
    compile 'com.google.apis:google-api-services-sheets:v4-rev581-1.25.0'
    compile 'com.google.api-client:google-api-client:1.30.9'
    compile 'com.google.oauth-client:google-oauth-client-jetty:1.30.6'
    compile 'com.google.auth:google-auth-library-oauth2-http:0.20.0'
}

3.2 JSON Sleutelbestand Toevoegen

  1. Plaats het JSON-sleutelbestand in je Katalon project directory
  2. Voeg het toe aan Include/data/ folder voor betere organisatie

Stap 4: Custom Keyword Implementeren

Maak een nieuw package com.katalon.keywords en voeg de volgende klasse toe:

package com.katalon.keywords

import com.google.api.client.googleapis.auth.oauth2.GoogleCredential
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport
import com.google.api.client.http.javanet.NetHttpTransport
import com.google.api.client.json.JsonFactory
import com.google.api.client.json.jackson2.JacksonFactory
import com.google.api.services.sheets.v4.Sheets
import com.google.api.services.sheets.v4.SheetsScopes
import com.google.api.services.sheets.v4.model.ValueRange
import com.kms.katalon.core.annotation.Keyword
import java.io.FileInputStream
import java.io.IOException
import java.security.GeneralSecurityException

public class GoogleSheetsKeywords {
    
    private static final String APPLICATION_NAME = "Katalon Studio Google Sheets Integration"
    private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance()
    private static final List<String> SCOPES = Collections.singletonList(SheetsScopes.SPREADSHEETS)
    
    /**
     * Authorisatie met serviceaccount
     */
    private static GoogleCredential getCredentials(String credentialsFilePath) throws IOException {
        FileInputStream serviceAccountStream = new FileInputStream(credentialsFilePath)
        GoogleCredential credential = GoogleCredential.fromStream(serviceAccountStream)
            .createScoped(SCOPES)
        return credential
    }
    
    /**
     * Google Sheets service bouwen
     */
    private static Sheets getSheetsService(String credentialsFilePath) throws IOException, GeneralSecurityException {
        final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport()
        GoogleCredential credential = getCredentials(credentialsFilePath)
        
        return new Sheets.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential)
            .setApplicationName(APPLICATION_NAME)
            .build()
    }
    
    /**
     * Data lezen uit Google Sheet
     * @param credentialsFilePath - Pad naar JSON credentials bestand
     * @param spreadsheetId - ID van de Google Sheet
     * @param range - Range om te lezen (bijv. "Sheet1!A1:D10")
     * @return List<List<Object>> - De gelezen data
     */
    @Keyword
    def readSheetData(String credentialsFilePath, String spreadsheetId, String range) {
        try {
            Sheets service = getSheetsService(credentialsFilePath)
            ValueRange response = service.spreadsheets().values()
                .get(spreadsheetId, range)
                .execute()
            
            List<List<Object>> values = response.getValues()
            
            if (values == null || values.isEmpty()) {
                println("Geen data gevonden.")
                return []
            } else {
                println("Data succesvol gelezen: ${values.size()} rijen")
                return values
            }
        } catch (Exception e) {
            println("Fout bij lezen van Sheet data: ${e.getMessage()}")
            throw e
        }
    }
    
    /**
     * Data schrijven naar Google Sheet
     * @param credentialsFilePath - Pad naar JSON credentials bestand
     * @param spreadsheetId - ID van de Google Sheet
     * @param range - Range om naar te schrijven
     * @param values - Data om te schrijven
     */
    @Keyword
    def writeSheetData(String credentialsFilePath, String spreadsheetId, String range, List<List<Object>> values) {
        try {
            Sheets service = getSheetsService(credentialsFilePath)
            
            ValueRange body = new ValueRange()
                .setValues(values)
            
            service.spreadsheets().values()
                .update(spreadsheetId, range, body)
                .setValueInputOption("RAW")
                .execute()
                
            println("Data succesvol geschreven naar Sheet")
            
        } catch (Exception e) {
            println("Fout bij schrijven naar Sheet: ${e.getMessage()}")
            throw e
        }
    }
    
    /**
     * Specifieke cel waarde ophalen
     * @param credentialsFilePath - Pad naar JSON credentials bestand
     * @param spreadsheetId - ID van de Google Sheet
     * @param cellAddress - Cel adres (bijv. "A1")
     * @return String - Cel waarde
     */
    @Keyword
    def getCellValue(String credentialsFilePath, String spreadsheetId, String cellAddress) {
        try {
            List<List<Object>> data = readSheetData(credentialsFilePath, spreadsheetId, cellAddress)
            if (data && data.size() > 0 && data[0].size() > 0) {
                return data[0][0].toString()
            }
            return ""
        } catch (Exception e) {
            println("Fout bij ophalen cel waarde: ${e.getMessage()}")
            return ""
        }
    }
}

Stap 5: Test Case Implementatie

Maak een nieuwe test case en gebruik de custom keywords:

import static com.kms.katalon.core.testcase.TestCaseFactory.findTestCase
import com.kms.katalon.core.webui.keyword.WebUiBuiltInKeywords as WebUI
import internal.GlobalVariable as GlobalVariable

// Configuratie
String credentialsPath = "Include/data/service-account-credentials.json"
String spreadsheetId = "1ABC123DEF456GHI789JKL_JOUW_SHEET_ID"
String testDataRange = "Sheet1!A2:D10"

// Test data lezen uit Google Sheet
def testData = CustomKeywords.'com.katalon.keywords.GoogleSheetsKeywords.readSheetData'(
    credentialsPath, 
    spreadsheetId, 
    testDataRange
)

// Itereren door de test data
for (int i = 0; i < testData.size(); i++) {
    def row = testData[i]
    
    // Gebruik de data in je test
    String username = row[0]?.toString() ?: ""
    String password = row[1]?.toString() ?: ""
    String expectedResult = row[2]?.toString() ?: ""
    
    // Voer je test uit met deze data
    WebUI.setText(findTestObject('Page_Login/input_username'), username)
    WebUI.setText(findTestObject('Page_Login/input_password'), password)
    WebUI.click(findTestObject('Page_Login/button_login'))
    
    // Verificatie en resultaat terugschrijven naar sheet
    boolean testPassed = WebUI.verifyTextPresent(expectedResult, false)
    String result = testPassed ? "PASSED" : "FAILED"
    
    // Resultaat terugschrijven (kolom D)
    String resultRange = "Sheet1!D${i + 2}"
    def resultData = [[result]]
    
    CustomKeywords.'com.katalon.keywords.GoogleSheetsKeywords.writeSheetData'(
        credentialsPath, 
        spreadsheetId, 
        resultRange, 
        resultData
    )
}

Stap 6: Global Variables Configureren

Voor betere configuratie, voeg Global Variables toe:

  1. Ga naar Profiles/default
  2. Voeg de volgende variabelen toe:
    • GOOGLE_CREDENTIALS_PATH
    • GOOGLE_SPREADSHEET_ID
    • TEST_DATA_RANGE

Praktische Tips en Best Practices

Foutafhandeling

@Keyword
def safeReadSheetData(String credentialsFilePath, String spreadsheetId, String range) {
    try {
        return readSheetData(credentialsFilePath, spreadsheetId, range)
    } catch (Exception e) {
        // Log de fout
        WebUI.comment("Google Sheets API fout: ${e.getMessage()}")
        
        // Fallback naar lokale testdata
        return getLocalFallbackData()
    }
}

Performance Optimalisatie

  • Cache de Sheets service instance voor hergebruik
  • Batch meerdere operaties samen
  • Gebruik alleen de benodigde ranges

Beveiliging

  • Bewaar credentials nooit in versiecontrole
  • Gebruik omgevingsvariabelen voor gevoelige informatie
  • Beperk serviceaccount machtigingen tot minimum vereiste

Troubleshooting

Veelvoorkomende Problemen

  1. 403 Forbidden Error

    • Controleer of de Sheet gedeeld is met het serviceaccount
    • Verificeer API machtigingen
  2. FileNotFoundException

    • Controleer het pad naar het credentials bestand
    • Zorg ervoor dat het bestand in de juiste directory staat
  3. Invalid Range

    • Controleer de range syntax (bijv. “Sheet1!A1:D10”)
    • Verifieer dat het sheet tab bestaat

Debug Tips

// Enable debug logging
System.setProperty("com.google.api.client.http.HttpTransport", "true")

Conclusie

Met deze integratie kun je:

  • Dynamische testdata uit Google Sheets gebruiken
  • Testresultaten automatisch rapporteren
  • Gedeelde testdata beheren met je team
  • Data-driven testing implementeren

Deze aanpak zorgt voor flexibele, onderhoudbare en collaboratieve test automation workflows.

by Ralph Van Der Horst

arrow right
back to blog

share this article

Relevant articles

Gratis cursus testautomatisering met katalon studio en salesforce

Gratis cursus over testen met Katalon Studio & Salesforce binnenkort beschikbaar! Als een trotse Katalon Ambassadeur, had ik eindelijk wat tijd om …

Read More

Stel de oauth2 client in voor salesforce dev env voor API testen met curl postman en katalon

Introductie Heb je je geen moment in het leven afgevraagd waarom je doet wat je doet? Waarom is testautomation nu echt nodig en wat is de werkelijke …

Read More

Serverless pact broker met postgre SQL op aws ecs fargate

Inleiding Deze handleiding beschrijft hoe je een serverless Pact Broker met PostgreSQL kunt opzetten op AWS ECS Fargate. Een partner vroeg me onlangs …

Read More