API Automation Test Dengan Mocha Chai

Ada banyak sekali framework API Automation Test yang dapat digunakan. Salah satunya adalah dengan menggunakan framework Mocha dan Chai.

Saya sudah menerapkan API Automation Test ini ke dalam pekerjaan saya dan selama ini sangat membantu.

Ketika beberapa API telah selesai dibuat maka tindakan selanjutnya adalah melakukan pengujian secara berkala untuk memastikan API selalu berjalan dengan baik.

Namun pada realitanya. Sebuah project dapat memiliki puluhan atau bahkan ratusan API. Untuk melakukan pengetesan secara manual dan berkala tentunya akan sangat menyita waktu. Oleh karena itu pengujian secara otomatis (automate test) sangat diperlukan.

Dengan menggunakan API Automation Test ini maka saya dapat menyingkat waktu dan effort untuk pengetesan sehingga saya dapat mengerjakan tugas lainnya.

Sebelum memulai membuat framework API Automation Test, pastikan komputer anda sudah terinstall node.js.

Menyiapkan Kerangka Testing

1. Buat Struktur Project API Automation Test

Buatlah struktur project yang berisi folder dan file seperti ini. Misal dalam contoh di bawah ini, saya menamai project saya dengan nama “qa_test”.

Tidak perlu pusing dengan isi folder dan file nya, karena semua masih kosongan.

2. Daftarkan Dependencies di File package.json

Setelah folder dan file yang masih kosong tadi dibuat, masukkan code di bawah ini ke dalam file package.json. Code ini berisi dependencies yang harus diinstall.

Dependencies merupakan segala sesuatu yang anda butuhkan agar kode anda berfungsi.

{
"name": "mocha-chai",
"version": "1.0.0",
"description": "API Testing Framework with Mocha and Chai",
"main": "index.js",
"scripts": {
"test-api": "node ./node_modules/mocha/bin/mocha ./api/test –recursive –reporter mochawesome –reporter-options reportDir=reports/mochawesome/ –timeout 180000",
"reports": "open 'reports/mochawesome/mochawesome.html'"
},
"author": "Laksana Adi",
"dependencies": {
"chai": "^4.1.2",
"dotenv": "^7.0.0",
"mocha": "^5.2.0",
"mochawesome": "^3.0.2",
"supertest": "^3.1.0"
}
}
view raw package.json hosted with ❤ by GitHub

Dependencies tersebut berisi :

`chai` sebagai assertion library
`dotenv` untuk mengambil environment variables dari file .env
`mocha` sebagai test framework
`mochawesome` sebagai reporter
`supertest` sebagai HTTP request agent untuk memanggil APIs

3. Install Dependencies

Setelah dependencies tersebut sudah anda daftarkan di file package.json. Langkah selanjutnya adalah menginstall dependencies tersebut supaya bisa digunakan.

Jalankan perintah berikut di terminal komputermu. Pastikan terminal anda sudah berada di dalam directory folder API Test.

Kalau directory folder API Test saya berada di qa_test/

npm install

Sesudah perintah tersebut dijalankan, folder node_modules dan file package-lock.json akan dibuat secara otomatis.

4. Siapkan Endpoint API nya

Struktur project sudah ada. Dependencies juga sudah terinstall semua. Lalu langkah selanjutnya adalah menyiapkan endpoint API nya.

Saya akan mengambil API dari website http://www.omdbapi.com/ sebagai percobaannya,

API nya adalah :

Method: GET 
Endpoint: http://www.omdbapi.com?apikey=cc99fc43&s=lord

Saya akan mencoba hit API ini dengan Postman.

response api di postman

Yak ternyata berfungsi pemirsa! Tinggal dibuat API Automation Test nya nih…

Membuat API Automation Test

Langkah-langkah untuk membuat API Automation Test sangatlah mudah. Saya akan mengurutkannya secara detail sehingga anda bisa mengikutinya dengan baik.

1. Setup Environment

Environment merupakan lingkungan di mana API itu akan bekerja. Sebagai contoh saya menggunakan API http://www.omdbapi.com?apikey=cc99fc43&s=lord

API tersebut menggunakan environment http://www.omdbapi.com

Lalu masukkan environment tersebut ke dalam file .env dengan format code seperti ini :

OMDB_BASE_URL=http://www.omdbapi.com

Anda bebas memberi nama variable environmentnya. Bisa BASE_URL, CORE_URL, atau lainnya. Yang penting ketika anda akan memanggil environment tersebut di file get_movie_list_page.js, nama variable nya sama.

2. Buat File di Folder Page

File di folder Page ini akan berisi tentang endpoint API yang akan anda panggil beserta dengan semua parameter yang dibutuhkan.

Saya akan menamai file ini dengan get_movie_list_page.js lalu saya menyimpannya di directory folder qa_test/api/page

const supertest = require('supertest');
const env = require('dotenv').config();
const api = supertest(process.env.OMDB_BASE_URL);
const getMovieList = (key, search) => api.get('')
.set('Content-Type', 'application/json')
.set('Accept', 'application/json')
.query({
apikey: key,
s: search
})
module.exports = {
getMovieList,
}

3. Buat File di Folder Test

Kalau file di folder Page merupakan kerangka API Automation nya. Nah file di folder Test ini merupakan skenario API Automation yang akan kita jalankan dalam berbagai bentuk test case.

Saya akan menamai file ini dengan get_movie_list_test.js lalu saya menyimpannya di directory folder qa_test/api/test

const assert = require('chai').expect;
const code = require('../../../qa_test/api/helper/reponse_code_message.json')
const data = require('../../../qa_test/api/data/get_movie_list_data.json')
const page = require('../../../qa_test/api/page/get_movie_list_page.js');
const testCase = {
"positive": {
"getList": "As a User, I want to be able to get OMDB Movie list",
},
"negative": {
"noSearch": "As a User, I should got error message when I send request without key of search",
"invalidApiKey": "As a User, I should got error 401 when I send request with invalid API Key"
}
}
describe(`OMDB Movie List`, () => {
it(`@get ${testCase.positive.getList}`, async () => {
const response = await page.getMovieList(data.apiKey, data.keySearch);
assert(response.status).to.equal(code.successOk, response.body.message);
}),
it(`@get ${testCase.negative.noSearch}`, async () => {
const response = await page.getMovieList(data.apiKey, '');
assert(response.status).to.equal(code.successOk, response.body.message);
assert(response.body.Response).to.equal('False');
assert(response.body.Error).to.equal('Incorrect IMDb ID.');
}),
it(`@get ${testCase.negative.invalidApiKey}`, async () => {
const response = await page.getMovieList(data.invalidApiKey, data.keySearch);
assert(response.status).to.equal(code.failedUnauthorized.codeNumber, response.body.message);
assert(response.body.Response).to.equal('False');
assert(response.body.Error).to.equal('Invalid API key!');
})
})

4. Buat File di Folder Data

File di folder Data ini akan menyimpan seluruh data yang digunakan untuk Automation Test nya. Di sini anda dapat menyimpan data user, data response, data parameter, dan sebagainya.

Saya akan menamai file ini dengan get-movie-list-data.json lalu saya menyimpannya di directory folder qa_test/api/data

{
"apiKey": "cc99fc43",
"invalidApiKey": "sdfsdf",
"keySearch": "lord"
}

Menjalankan API Automation Test

Semua persiapan sudah selesai, sekarang tinggal jalankan Test nya saja.

Run perintah ini di terminal anda. Pastikan terminal anda sudah berada di  dalam directory folder Test.

Kalau directory folder Test saya berada di qa_test/

npm run test-api

Perintah tersebut akan mengeksekusi seluruh Test. Namun anda juga bisa menjalankan spesifik Test dengan menggunakan tag ‘@’.

Misal di Test yang saya buat, saya menggunakan tag @getMovieList. Maka saya dapat menjalankan testnya dengan menggunakan perintah sebagai berikut :

npm run test-api -- --grep @getMovieList

Hasil test nya akan seperti ini :

Selamat! API Automation Test sukses dijalankan! Selanjutnya anda dapat mengimplementasikan test ini ke dalam real projectmu.

Report API Automation Test Dengan Mochawesome

Oh ya, saya lupa. Anda juga dapat menggunakan template report dari Mochawesome supaya lebih informatif.

Jalankan perintah ini di terminal :

npm run reports

Dari mana perintah tersebut didapatkan? Coba cek file dependencies di file package.json maka anda akan menemukan ada Mochawesome di sana.

Setelah perintah tersebut dijalankan, maka report akan ter-generate di dalam web browser.

Seru bukan? Terlihat lebih enak dilihat. Apalagi bila anda memiliki banyak sekali test case.

Anda bisa menggunakan report dari mochawesome ini untuk diintegrasikan ke dalam pipeline. Nanti saya akan membuatnya di artikel terpisah.

Penutup

Sekian step by step yang bisa saya jelaskan untuk membuat sebuah API Automation Test dengan Mocha Js. Semoga ini berguna untuk membantu pengetesan project yang sedang anda kerjakan ya.

Tinggalkan komentar