Using Docker Compose π³β
A sample url shortener app to test Keploy integration capabilities using Mux and MySQL.
Donβt have Keploy installed yet?
Before running this sample, make sure Keploy is installed on your system.
π Go to Installation GuideClone a sample URL shortener app π§ͺβ
git clone https://github.com/keploy/samples-go.git && cd samples-go/mux-mysql
go mod download
We will be using Docker compose to run the application as well as MySQL on Docker container.
Start MySQL Instanceβ
docker run -p 3306:3306 --rm --name mysql --network keploy-network -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:latest
Create Docker volume (optional)β
docker volume create --driver local --opt type=debugfs --opt device=debugfs debugfs
Capture the Testcasesβ
Build the Docker image of our application:
docker build -t url-short .
Once we have our Docker image ready, this command will start recording API calls using eBPF:
keploy record -c "docker run -p 8080:8080 --name urlshort --rm --network keploy-network url-short:latest"
Make API Calls using Postman or cURL command. Keploy with capture those calls to generate the test-suites containing testcases and data mocks.
Generate testcasesβ
To generate test cases we just need to make some API calls. You can use Postman or simply curl
.
Generate shortened urlβ
curl --request POST \
--url http://localhost:8080/create \
--header 'content-type: application/json' \
--data '{
"link": "https://github.com"
}'
this will return the shortened url. The ts would automatically be ignored during testing because it'll always be different.
{
"message":"Converted",
"link":"http://localhost:8080/links/1",
"status":true
}
Access all shortened URLsβ
curl --request GET --url http://localhost:8080/all
Now both these API calls were captured as editable testcases and written to keploy/tests
folder. The keploy directory would also have mocks
file that contains all the outputs of MySQL operations. Here's what the folder structure look like:
Now, let's see the magic! β¨π« Want to see if everything works as expected?
Run the test casesβ
Run the test mode (in the project directory, not the Keploy directory):
keploy test -c "docker run -p 8080:8080 --name urlshort --rm --network keploy-network url-short:latest" --delay 10
Output should look like this:
No need to set up fake databases/APIs like MySQL or write mocks manually. Keploy automatically mocks them and the application thinks it's talking to MySQL. π
Wrapping it up πβ
Congrats on the journey so far! You've seen Keploy's power, flexed your coding muscles, and had a bit of fun too! Now, go out there and keep exploring, innovating, and creating! Remember, with the right tools and a sprinkle of fun, anything's possible.ππ
Happy coding! β¨π©βπ»π¨βπ»β¨
Running App Locally on Linux/WSL π§β
A Sample url shortener app to test Keploy integration capabilities using Mux and MySql.
Donβt have Keploy installed yet?
Before running this sample, make sure Keploy is installed on your system.
π Go to Installation GuideClone a sample URL shortener app π§ͺβ
git clone https://github.com/keploy/samples-go.git && cd samples-go/mux-mysql
go mod download
We'll be running our sample application right on Linux, but just to make things a tad more thrilling, we'll have the database (MySQL) chill on Docker. Ready? Let's get the party started!π
To establish a network for your application using Keploy on Docker, follow these steps. If you're using a docker-compose network, replace keploy-network with your app's
docker_compose_network_name
below.
Start the MySQL instanceβ
docker run -p 3306:3306 --rm --name mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:latest
Now, we will create the binary of our application:-
export ConnectionString="root:my-secret-pw@tcp(localhost:3306)/mysql"
go build -o main
Capture the Testcasesβ
sudo -E PATH=$PATH keploy record -c "./main"
Generate testcasesβ
To generate test cases we just need to make some API calls. You can use Postman, Hoppscotch, or simply curl.
Generate shortened urlβ
curl --request POST \
--url http://localhost:8080/create \
--header 'content-type: application/json' \
--data '{
"link": "https://google.com"
}'
this will return the shortened url.
{
"message": "Converted",
"link": "http://localhost:8080/links/1",
"status": true
}
Redirect to original url from shortened urlβ
curl -request GET localhost:8080/links/1
Now, let's see the magic! πͺπ« Both these API calls were captured as a test case and should be visible on the Keploy CLI. You should see a keploy
folder with the test cases and data mocks created.
Run the captured test casesβ
Now that we have our test case captured, run the test file.
sudo -E PATH=$PATH keploy test -c "./main" --delay 10
No need to set up dependencies like MySQL or write mocks for your testing. The application thinks it's talking to MySQL. π
We will get output something like this:
Wrapping it up πβ
Congrats on the journey so far! You've seen Keploy's power, flexed your coding muscles, and had a bit of fun too! Now, go out there and keep exploring, innovating, and creating! Remember, with the right tools and a sprinkle of fun, anything's possible.ππ
Hope this helps you out, if you still have any questions, reach out to us .