Movatterモバイル変換


[0]ホーム

URL:


Switch to a new branch

Pull the latest frommain andcreate a new branchstep1

git checkout maingit pullgit checkout -b 'step1'

Add a calculator backend

Let's continue by adding in our calculator logic. Create the fileapi/calculator.py with the following contents:

class Calculator:    def add(x, y):        return x + y    def subtract(x, y):        return x - y    def multiply(x, y):        return x * y    def divide(x, y):        if y == 0:            return 'Cannot divide by 0'        return x * 1.0 / y

We are defining aCalculator class that canadd,subtract,multiply, anddivide. Next, we are going to create a simple Flask server to run our calculator app. Create a fileapi/app.py

from flask import (    Flask,    request,)from api.calculator import Calculatorapp = Flask(__name__)@app.route('/api/add', methods=['POST'])def add():    return operation('add', 2)@app.route('/api/subtract', methods=['POST'])def subtract():    return operation('subtract', 2)@app.route('/api/multiply', methods=['POST'])def multiply():    return operation('multiply', 2)@app.route('/api/divide', methods=['POST'])def divide():    return operation('divide', 2)def operation(method, num_factors):    factors = []    if num_factors == 2:        factors.append(float(request.json.get('x')))        factors.append(float(request.json.get('y')))    return str(getattr(Calculator, method)(*factors))

The server acceptsPOST requests to the/api/add,/api/subtract,/api/multiply, and/api/divide endpoints. It expects to receiveJSON valuesx andy as data.

Run the server

You can start the server by running

flask --app api/app run

You can test if the server is running by hitting one of the above endpoints. Try it by running the command below from a new terminal.

curl -d '{"x": 1, "y": 2}' -H 'Content-Type: application/json' http://127.0.0.1:5000/api/add

You can see that the server is adding1 and2 together and returning3.0

Add backend tests

Let's add some tests for our calculator. Create a new directorytests inapi and add a blank__init__.py file and atest_calculator.py file.

mkdir api/teststouch api/tests/__init__.pytouch api/tests/test_calculator.py

Add this totest_calculator.py.

from ..calculator import Calculatordef test_add():    assert Calculator.add(1, 2) == 3.0    assert Calculator.add(1.0, 2.0) == 3.0    assert Calculator.add(0, 2.0) == 2.0    assert Calculator.add(2.0, 0) == 2.0    assert Calculator.add(-4, 2.0) == -2.0def test_subtract():    assert Calculator.subtract(1, 2) == -1.0    assert Calculator.subtract(2, 1) == 1.0    assert Calculator.subtract(1.0, 2.0) == -1.0    assert Calculator.subtract(0, 2.0) == -2.0    assert Calculator.subtract(2.0, 0.0) == 2.0    assert Calculator.subtract(-4, 2.0) == -6.0def test_multiply():    assert Calculator.multiply(1, 2) == 2.0    assert Calculator.multiply(1.0, 2.0) == 2.0    assert Calculator.multiply(0, 2.0) == 0.0    assert Calculator.multiply(2.0, 0.0) == 0.0    assert Calculator.multiply(-4, 2.0) == -8.0def test_divide():    assert Calculator.divide(1, 2) == 0.5    assert Calculator.divide(1.0, 2.0) == 0.5    assert Calculator.divide(0, 2.0) == 0    assert Calculator.divide(-4, 2.0) == -2.0

Run the tests and collect code coverage

To run tests in a terminal:

pytest

However, we are more curious about the code coverage of ourcalculator class. We can use the command

pytest --cov api/

to show us coverage results. Doing this should give you a report that looks like

Name                           Stmts   Miss  Cover--------------------------------------------------api/__init__.py                    0      0   100%api/app.py                        22     22     0%api/calculator.py                 11      1    91%api/tests/__init__.py              0      0   100%api/tests/test_calculator.py      25      0   100%--------------------------------------------------TOTAL                             58     23    61%

Notice thatapi/app.py isn’t covered, as we haven’t tested the Flask application, but ourapi/calculator.py file is missing tests on one line of code.

Commit and merge your changes

You can commit this code by running

git add .git commit -m 'step1: add calculator backend and tests'git push origin step1

Create a merge request on GitLab and merge the changes.

When opening merge requests, be sure to select your own repository as the target branch, orset your project's default target branch

Updated 9 months ago



[8]ページ先頭

©2009-2025 Movatter.jp