Fakultas Ilmu Komputer UI

Commit 06fc25b5 authored by Yumna Pratista Tastaftian's avatar Yumna Pratista Tastaftian
Browse files

END OF EXERCISE 7

parent 9e6e57d4
stages:
- test
- deploy
- postdeploy
UnitTest:
image: python:3.6
stage: test
before_script:
- pip install -r requirements.txt
- python manage.py makemigrations
- python manage.py migrate
when: on_success
script:
- coverage run --omit='manage.py' manage.py test -p "unit_tests*.py"
- coverage report -m
Deployment:
image: ruby:2.4
stage: deploy
before_script:
- gem install dpl
- wget -qO- https://cli-assets.heroku.com/install-ubuntu.sh | sh
script:
- export HEROKU_API_KEY=$HEROKU_APIKEY
- dpl --provider=heroku --app=$HEROKU_APPNAME --api-key=$HEROKU_APIKEY
- heroku ps:scale web=1 migrate=1 --app $HEROKU_APPNAME
- heroku ps:restart --app=$HEROKU_APPNAME
environment:
name: production
url: $HEROKU_APP_HOST
FunctionalTest:
image: python:3.6
stage: postdeploy
before_script:
- wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
- echo "deb http://dl.google.com/linux/chrome/deb/ stable main" > /etc/apt/sources.list.d/google.list
- apt-get update -qq && apt-get install -y -qq unzip
- apt-get install -y google-chrome-stable
- export CHROME_BIN=/usr/bin/google-chrome
- apt-get install -y xvfb
- wget https://chromedriver.storage.googleapis.com/77.0.3865.40/chromedriver_linux64.zip
- unzip chromedriver_linux64.zip
- pip install -r requirements.txt
- python manage.py makemigrations
- python manage.py migrate
- python manage.py runserver 8000 &
when: on_success
script:
- python3 manage.py test functional_tests
stages:
- test
- deploy
- postdeploy
UnitTest:
image: python:3.6
stage: test
before_script:
- pip install -r requirements.txt
- python manage.py makemigrations
- python manage.py migrate
when: on_success
script:
- coverage run --omit='manage.py' manage.py test -p "unit_tests*.py"
- coverage report -m
Deployment:
image: ruby:2.4
stage: deploy
before_script:
- gem install dpl
- wget -qO- https://cli-assets.heroku.com/install-ubuntu.sh | sh
script:
- export HEROKU_API_KEY=$HEROKU_APIKEY
- dpl --provider=heroku --app=$HEROKU_APPNAME --api-key=$HEROKU_APIKEY
- heroku ps:scale web=1 migrate=1 --app $HEROKU_APPNAME
- heroku ps:restart --app=$HEROKU_APPNAME
environment:
name: production
url: $HEROKU_APP_HOST
FunctionalTest:
image: python:3.6
stage: postdeploy
before_script:
- wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
- echo "deb http://dl.google.com/linux/chrome/deb/ stable main" > /etc/apt/sources.list.d/google.list
- apt-get update -qq && apt-get install -y -qq unzip
- apt-get install -y google-chrome-stable
- export CHROME_BIN=/usr/bin/google-chrome
- apt-get install -y xvfb
- wget https://chromedriver.storage.googleapis.com/77.0.3865.40/chromedriver_linux64.zip
- unzip chromedriver_linux64.zip
- pip install -r requirements.txt
- python manage.py makemigrations
- python manage.py migrate
- python manage.py runserver 8000 &
when: on_success
script:
- python3 manage.py test functional_tests
migrate: bash deployment.sh
migrate: bash deployment.sh
web: gunicorn project01_homepage.wsgi --log-file -
\ No newline at end of file
# 1606836976-practice
HEROKU LINK : www.homepageyumna.herokuapp.com
1. Exercise 3 - Lab 6 (obey the testing goat)
Proses test isolation yang dilakukan :
* Pada exercise ini saya mengimplementasikan isolation test terutama pada functional test agar saat menjalankan test tersebut tidak mempengaruhi database aslinya.
* Hal ini dilakukan dengan cara mengimplementasikan LiveServerTestCase pada functional_test.
* Berikut ini adalah yang dilakukan oleh LiveServerTestCase :
1. Memiliki atribut live_server_url, yaitu url yang akan dikunjungi saat menjalankan functional_test
2. Menggunakan selenium dalam membuka web dengan url live_server_url
3. LiveServerTestCase akan membangun Django Server sehingga bisa membuka dan mengakses database yang terisolasi dari web aslinya
4. selenium akan membuka django server tersebut, melakukan fungsi sesuai dengan yang dispesifikasi pada functional_test dan menutupnya kembali setelah fungsi tersebut selesai di jalankan
* Perbedaan desain lama dan desain baru dari program yang dibentuk
1. Yang paling dominan dalam perubahan ini adalah implementasi dari LiveTesterTestCase
2. Yang berbeda dari desain lama adalah pemanggilan dan pengaksesan seleniumnya pada functional_test, dimana pada desain yang lama selenium memanggil web real dari web ini sehingga saat functional test berjalan pun web sebenernya juga berubah.
3. Untuk yang desain baru, disini dipanggil live_server_url pada saat menjalankan functional_test yang nantinya akan membentuk Django Server sendiri sehingga tidak menggunakan database dan web asli dari url yang sebenarnya.
# 1606836976-practice
HEROKU LINK : www.homepageyumna.herokuapp.com
1. Exercise 3 - Lab 6 (obey the testing goat)
Proses test isolation yang dilakukan :
* Pada exercise ini saya mengimplementasikan isolation test terutama pada functional test agar saat menjalankan test tersebut tidak mempengaruhi database aslinya.
* Hal ini dilakukan dengan cara mengimplementasikan LiveServerTestCase pada functional_test.
* Berikut ini adalah yang dilakukan oleh LiveServerTestCase :
1. Memiliki atribut live_server_url, yaitu url yang akan dikunjungi saat menjalankan functional_test
2. Menggunakan selenium dalam membuka web dengan url live_server_url
3. LiveServerTestCase akan membangun Django Server sehingga bisa membuka dan mengakses database yang terisolasi dari web aslinya
4. selenium akan membuka django server tersebut, melakukan fungsi sesuai dengan yang dispesifikasi pada functional_test dan menutupnya kembali setelah fungsi tersebut selesai di jalankan
* Perbedaan desain lama dan desain baru dari program yang dibentuk
1. Yang paling dominan dalam perubahan ini adalah implementasi dari LiveTesterTestCase
2. Yang berbeda dari desain lama adalah pemanggilan dan pengaksesan seleniumnya pada functional_test, dimana pada desain yang lama selenium memanggil web real dari web ini sehingga saat functional test berjalan pun web sebenernya juga berubah.
3. Untuk yang desain baru, disini dipanggil live_server_url pada saat menjalankan functional_test yang nantinya akan membentuk Django Server sendiri sehingga tidak menggunakan database dan web asli dari url yang sebenarnya.
4. time_sleep yang digunakan pun dirubah
\ No newline at end of file
from django.contrib import admin
# Register your models here.
from django.apps import AppConfig
class AccountsConfig(AppConfig):
name = 'accounts'
# Generated by Django 2.2.1 on 2019-11-14 06:15
from django.db import migrations, models
import uuid
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='User',
fields=[
('email', models.EmailField(max_length=254, primary_key=True, serialize=False)),
],
),
migrations.CreateModel(
name='Token',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('email', models.EmailField(max_length=254)),
('uid', models.CharField(default=uuid.uuid4, max_length=40)),
],
),
]
from django.db import models
import uuid
class User(models.Model):
email = models.EmailField(primary_key = True)
REQUIRED_FIELDS = []
USERNAME_FIELD = 'email'
is_anonymous = False
is_authenticated = True
class Token(models.Model):
email = models.EmailField()
uid = models.CharField(max_length = 40, default=uuid.uuid4)
from django.test import TestCase
from django.contrib.auth import get_user_model
User = get_user_model()
class UserModelTest(TestCase):
def test_user_is_valid_with_email_only(self):
user = User(email='a@b.com')
user.full_clean() # should not raise
\ No newline at end of file
from django.test import TestCase
from django.contrib.auth import get_user_model
from accounts.models import Token
User = get_user_model()
class UserModelTest(TestCase):
def test_user_is_valid_with_email_only(self):
user = User(email='a@b.com')
user.full_clean() # should not raise
def test_email_is_primary_key(self):
user = User(email='a@b.com')
self.assertEqual(user.pk, 'a@b.com')
class TokenModelTest(TestCase):
def test_links_user_with_auto_generated_uid(self):
token1 = Token.objects.create(email='a@b.com')
token2 = Token.objects.create(email='a@b.com')
self.assertNotEqual(token1.uid, token2.uid)
\ No newline at end of file
from django.shortcuts import render
# Create your views here.
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment