Kan vi bruke ChatGPT som QA-venn

Kan ChatGPT brukes til å hjelpe oss på vår QA-reise?

Wessel Braakman

Publisert:

17. mar. 2023

Trykk på taggene for å lese mer om hvor og hvordan vi benytter samme fag og teknologi

ChatGPT

Hele verden er overrasket av ChatGPT. Måten du kan samhandle med denne AI på er langt mer intuitiv enn å stille et spørsmål og få en uendelig liste over nettsteder som resultat. Selvfølgelig skal den besvarte informasjonen aldri sees på som sannhet uten en faktasjekk, men det samme gjelder alle de menneskene som åpenlyst anvender brukerskapt Wikipedia-innhold som om dette var akademisk akkreditert fakta. Presentasjonen av GPT4, med litt live action om hva den forbedrede AI kan gjøre, medfører økt påvirkning av hvordan vi anvender AI. Men jeg personlig synes det er mest interessant å se om vi kan bruke et verktøy som ChatGPT i vårt daglige arbeid. Å se det som en lagkamerat med uendelig kunnskap, dog ikke alltid den mest praktiske lagkameraten når det kommer til tolkning og gjennomføring.

Kan det lage testcases?

Jeg laget et forretningskrav og ba ChatGPT om å gi meg et sett med testcaser. Jeg prøvde dette med både ChatGPT3.5 og ChatGPT4 (den siste beste). Svarene finner du nedenfor:

Model: Default (GPT-3.5)

"""Me: Business requirement: only logged in users above the age of 18 are allowed to open a new bank account
Please create a set of testcases to test this requirement"""
Sure, here's a set of test cases that can be used to test the business requirement:
  1. Test Case Name: Valid Login & Age Test Steps:
    • Pre-condition: User is registered on the website and above 18 years of age.
    • Action: User logs in with valid credentials.
    • Expected Result: User is able to open a new bank account.
  1. Test Case Name: Invalid Login Credentials Test Steps:
    • Pre-condition: User is registered on the website but the provided login credentials are invalid.
    • Action: User attempts to log in with invalid credentials.
    • Expected Result: User is not able to log in and is prevented from opening a new bank account.
  1. Test Case Name: Underage User Test Steps:
    • Pre-condition: User is registered on the website but is under 18 years of age.
    • Action: User attempts to open a new bank account.
    • Expected Result: User is prevented from opening a new bank account.
  1. Test Case Name: Logout and Login Again Test Steps:
    • Pre-condition: User is logged in and above 18 years of age.
    • Action: User logs out and logs in again.
    • Expected Result: User is still able to open a new bank account.
  1. Test Case Name: Non-Logged-in User Test Steps:
    • Pre-condition: User is not logged in.
    • Action: User attempts to open a new bank account.
    • Expected Result: User is prompted to log in and is prevented from opening a new bank account until they have logged in
      and meet the age requirement.
  1. Test Case Name: Edge Case Testing Test Steps:
    • Pre-condition: User is registered on the website and is exactly 18 years of age.
    • Action: User attempts to open a new bank account.
    • Expected Result: User is able to open a new bank account since they meet the age requirement.
These test cases can be executed manually or automated with a BDD framework like Cucumber or Behave to ensure that the business requirement is
met and the application behaves as expected.

Model: GPT-4

"""Me: Business requirement: only logged in users above the age of 18 are allowed to open a new bank account
Please create a set of testcases to test this requirement"""
To test this business requirement, you can create various test cases to validate different aspects of the functionality.
Here's a list of suggested test cases:

Test Case 1: Valid User
  1. Login with a valid user who is above the age of 18
  2. Attempt to open a new bank account
  3. Verify that the new bank account is successfully created
Test Case 2: Underage User
  1. Login with a valid user who is under the age of 18
  2. Attempt to open a new bank account
  3. Verify that the system denies the account creation and displays an appropriate error message
Test Case 3: Not Logged In
  1. Attempt to open a new bank account without logging in
  2. Verify that the system prompts the user to log in before proceeding
Test Case 4: Invalid User Credentials
  1. Attempt to log in with invalid user credentials
  2. Verify that the user is unable to log in and cannot proceed to open a new bank account
Test Case 5: User Age Border Cases
  1. Login with a valid user who is exactly 18 years old
  2. Attempt to open a new bank account
  3. Verify that the new bank account is successfully created
Test Case 6: Account Creation Data Validation
  1. Login with a valid user who is above the age of 18
  2. Attempt to open a new bank account with invalid or incomplete information
  3. Verify that the system denies the account creation and displays appropriate error messages
Test Case 7: Multiple Accounts
  1. Login with a valid user who is above the age of 18
  2. Open a new bank account successfully
  3. Attempt to open another new bank account
  4. Verify that the system allows multiple account creations for eligible users
Test Case 8: Logout and New Account Attempt
  1. Login with a valid user who is above the age of 18
  2. Logout from the system
  3. Attempt to open a new bank account without logging in again
  4. Verify that the system prompts the user to log in before proceeding

Som QA-konsulent selv stilte jeg åpenbart ChatGPT det samme spørsmålet to ganger for å se om jeg ville få de samme resultatene to ganger, noe jeg med glede kan si at jeg gjorde. Hurra for det.

Så, med informasjonen vi har tilgjengelig, kan ChatGPT ikke bare gi oss 6 eller 8 unike testtilfeller. Disse testcaser inneholder også en beskrivelse av hva vi tester, og et sett med testtrinn som vi kan gjengi.

Er disse resultatene brukbare?

Er dette betydelig nok til å bli sett på som et "komplett" testsett? Det er noe vi som QA-konsulenter bør se nærmere på. For eksempel, når en bruker er mindreårig, oppgir ChatGPT at "Brukeren er forhindret fra å opprette en ny bankkonto". Imidlertid vet vi kanskje at i dette tilfellet bør brukeren se en spesifikk pop-up eller melding på skjermen som vi kan sjekke for å oppfylle scenariet. Utover dette har heller ikke ChatGPT noen annen informasjon om systemet tilgjengelig (og vi har heller ikke gitt det slik informasjon). For eksempel, hvis systemet tillater det, kan aldersparameteren være tom, noe som muligens kan resultere i en feil eller alternativ flyt.

Men hvis du er alene på et oppdrag, og ønsker å ha et forsprang, kan det virkelig hjelpe å ha noe å diskutere og bygge videre på. Det kan også hjelpe deg med å avgjøre om selve kravet er klart nok til å brukes for testcasene dine.

Og hva med automatisering?

Hva skjer når vi ber ChatGPT om å hjelpe oss med å komme i gang med automatisering? Som forventet gir den oss en trinn-for-trinn veiledning for å automatisere testcaser ovenfor! Er dette idiotsikkert? Jeg vil personlig gjøre denne sjekken ved å følge trinnene ChatGPT gir.

Jeg spurte ganske enkelt ChatGPT4 om å hjelpe meg med å komme i gang med automatisere testcasene. Jeg spurte spesifikt om en kombinasjon av Selenium og Cucumber, fordi jeg har jobbet med disse verktøyene tidligere.

Model: GPT-4

"""Me: Can you help me get started on automating these tests with cucumber and selenium?"""
Sure! Cucumber and Selenium are great tools for automating tests.
Cucumber is a tool for behavior-driven development (BDD), allowing you to write tests in a natural language format,
while Selenium is a powerful web testing framework that lets you interact with web elements.

Here's a brief outline of the steps to get started with Cucumber and Selenium:
  1. Install the necessary tools and libraries
  2. Set up your project structure
  3. Write feature files for your test cases
  4. Write step definitions to implement the test logic
  5. Configure and execute the tests
Here's a more detailed walkthrough of each step:
  1. Install the necessary tools and libraries
    • Ensure you have the following installed: Java, Maven, and a Java IDE (like IntelliJ IDEA or Eclipse)
    • Add the following dependencies to your Maven pom.xml file:
1 xml code.png
pom.xml code generated by ChatGPT
  1. Set up your project structure
    • Create a new Maven project in your IDE
    • Organize your project into the following directories:
2 structure.png
structure of the maven project files
  1. Write feature files for your test cases
    • In the features directory, create a new file named bank_account_creation.feature
    • Write your test scenarios using the Gherkin syntax. Here's an example for the valid user test case:
3 feature file.png
feature file generated by ChatGPT
  1. Write step definitions to implement the test logic
    • In the step_definitions directory, create a new Java class named BankAccountCreationSteps
    • Use the Cucumber annotations and Selenium WebDriver to implement the test steps.
      Here's an example for the valid user test case:
4 step definition.png
stepdefinition file generated by ChatGPT

Som jeg nevnte, vil jeg prøve dette selv på min egen PC. Ettersom at jeg er kjent med verktøyene jeg ba ChatGPT om å bruke, legger jeg merke til at noen trinn ikke er helt tydelige. For eksempel er mappene kalt "runner" og "step_definitions" i "test\java"-mappen pakker. Det er mindre detaljer, men man kan velge ChatGPT for å avklare disse trinnene enkelt. Det som mangler nå er hvordan jeg kjører disse testene på maskinen min, siden dette kun er oppsettet av rammeverket vårt.

Model: GPT-4

"""Me: And how will I run these tests?"""
To run the tests, you'll need to create a test runner class and configure it to execute the Cucumber tests.
Then, you can run the tests using your IDE or a build tool like Maven.

Follow these steps to set up and run your tests:
  1. Create a test runner class
    • In the runner directory, create a new Java class named BankAccountCreationTestRunner
    • Annotate the class with @RunWith(Cucumber.class) to tell JUnit to run the tests using Cucumber
    • Use the @CucumberOptions annotation to specify the location of your feature files and step definitions. Here's an example:
5 runner.png
runner class generated by ChatGPT
  • The features attribute points to the location of your feature files
  • The glue attribute points to the package containing your step definitions
  • The plugin attribute configures the output format for your test results
  • The monochrome attribute makes the console output more readable
  1. Run the tests using your IDE
    • In your IDE, right-click on the BankAccountCreationTestRunner class and choose "Run" or "Run As JUnit Test" (depending on your IDE)
  2. Run the tests using Maven
    • Add the following Maven Surefire Plugin configuration to your Maven pom.xml file:
6 add surefire to pom.png
adding surefire to pom.xml
  • Open a terminal or command prompt, navigate to your project's root directory, and run the following command:
7 run test.png
mvn test command
  • This command will execute your tests and generate an HTML report in the target/cucumber-reports directory
By following these steps, you can run your Cucumber and Selenium tests using your IDE or Maven,
and review the test results in a readable format.

Jeg får en feil nesten umiddelbart. Jeg la ikke merke til det først, men step_definitions-filen vår er ufullstendig. Den har blitt brått kuttet av på et visst tidspunkt, noe som gjør dokumentet ugyldig. Jeg ber ChatGPT om å gi meg en ny, komplett step_definitions-fil.

"""Me: Can you create a proper step_definitions file for the tests?"""
Certainly! Here's a sample BankAccountCreationSteps.java file that provides step definitions for some of the test cases mentioned earlier.
Note that this example assumes you have a specific structure and element IDs or names for your web application.
You'll need to replace these with the actual elements from your application.
new stepdef merged.png
new step_definition file generated by ChatGPT
Keep in mind that this is just a starting point for your step definitions.
You'll need to adapt the code to match the specifics of your web application,
such as element IDs, names, and the structure of the web pages.

Jeg forsøkte å kjøre testene fra både IDE-en min (IntelliJ), og fra kommandolinjen med kommandoen "mvn test". I begge tilfeller ble testen utløst! Jeg fikk mange feil, selvfølgelig, fordi ChatGPT ikke kan forutsi hvordan en applikasjon eller nettside ser ut, med hvilke elementer og hvilken layout. Men testen ble utført, mislyktes, og jeg fikk meldingene om at jeg skulle jobbe med trinndefinisjonsfilen fordi den nåværende implementeringen ikke gir noen fungerende tester.

9 ide run.png
running the test in IntelliJ IDE
10 cmd run 1.png
running the test from commandline
11 build failure.png
test result from commandline is the same as in the IDE

Igjen, bør vi åpenlyst kopiere og lime inn det ChatGPT svarer? Nei, det burde vi ikke. Men jeg gikk fra ingenting til en fungerende testløper med et rammeverk som jeg bare trenger å fylle ut og justere, i løpet av minutter. Jeg må si at det sannsynligvis hjelper å ha litt kunnskap om verktøyene på forhånd, men igjen, jeg kunne også ha bedt ChatGPT om å sette meg opp med en annen verktøystabel enn Java/Selenium/Cucumber.

Konklusjon

Alt i alt er jeg mest imponert over hva ChatGPT kan gjøre på så kort tid. Det er langt fra perfekt, og det bør ikke brukes som en enkelt informasjonsskilde. Eller som en hvilken som helst kilde til fakta, for den saks skyld.

ChatGPT har milliarder av tekstlinjer som den bruker til å svare på spørsmål og lære nye ferdigheter. Som jeg sa i begynnelsen, tror jeg vi kan se ChatGPT som en QA-kompis med en nesten uendelig pool av kunnskap. Men at vi alltid bør stille spørsmål ved dens tolkninger og implementeringer. Jeg har hatt glede av dette korte eksperimentet med dette verktøyet. For de som er interessert, tok det omtrent 30 til 60 minutter fra ingenting til et "fungerende" rammeverk, og det inkluderer å skrive notater for denne bloggen.

Bruk ChatGPT (og andre AI-baserte verktøy) klokt, og bruk dem smart. Og mest av alt, lek med det og nyt reisen!

Artikkel av:

Wessel Braakman
IT-konsulent
Test og Kvalitetssikring