Skip to content

Instantly share code, notes, and snippets.

@Kronifer
Last active February 24, 2021 17:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Kronifer/dd825e2c253a741efd1431788285b93f to your computer and use it in GitHub Desktop.
Save Kronifer/dd825e2c253a741efd1431788285b93f to your computer and use it in GitHub Desktop.
A GitHub actions tutorial for testing a flask server with MongoDB

An Action template for testing out a flask server with MongoDB

I recently wanted a way I could test out a Flask server with MongoDB using GitHub actions, so I started making one. Here is the finished project:

# This is a basic workflow to help you get started with Actions

name: Flask test

# Controls when the action will run. 
on:
  # Triggers the workflow on push or pull request events but only for the master branch
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
  # This workflow contains a single job called "build"
  build:
    # The type of runner that the job will run on
    runs-on: ubuntu-latest

    # Steps represent a sequence of tasks that will be executed as part of the job
    steps:
      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
      - uses: actions/checkout@v2



      # Runs a set of commands using the runners shell
      - name: Start and test server
        run: |
          pip install flask pymongo dnspython
          python main.py test

Lets walk through this, shall we?

First, it initializes on ubuntu, pulls the repo so it can be accessed, installs the dependancies and runs the server.

At the end of my main.py, I have these lines:

if __name__ == "__main__":
   if sys.argv[1] == 'test':
       main()
       time.sleep(3)
       os.system('curl http://localhost:8080/api/v1/data/get?title=dragonwatch')
       os.system("curl http://localhost:8080/admin/shutdown")
   elif sys.argv[1] == "run":
       main()

Basically, it only executes the test if I run it with the argument test. All the code is inside the main function, for testing purposes. Thanks for reading all the way down here!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment