Συζήτηση
Γεια χαρά, Επισκέπτης
Όνομα χρήστη: Κωδικός: Να με θυμάσαι
  • Σελίδα:
  • 1
  • 2

ΘΕΜΑ: django testing url

django testing url 6 Χρόνια 9 Μήνες πριν #4947

  • xristosss20
  • Το Άβαταρ του/της xristosss20
  • Αποσυνδεμένος
  • pyt___
  • Δημοσιεύσεις: 53
καλησπέρα έχω κάνει ένα απλό project σε django κυρίως για λόγους εξοικείωσης και να αποκτήσω περισσότερες γνώσεις.

αυτό που μαθαίνω τώρα είναι το testing σε django.

έχω δημιουργήσει κάποια απλά τεστ

test.py
from django.test import Client, TestCase
class User_Form_Test(TestCase):
    def test_logged_user_get_details(self):
        response = self.client.get('/details/', follow=True)
        self.assertEqual(response.status_code, 200)
 
    def test_logged_user_get_details_images(self):
        response = self.client.get('/details-images/', follow=True)
        self.assertEqual(response.status_code, 200)
urls.py
url(r'^details/(?P<id>\d+)/$', views.details, name='details'),
url(r'^details-images/(?P<slug>[^\.]+)/$', views.details_images, name='details_images')


τα παραπάνω τεστ μου εμφανίζουν κωδικό 200 οπότε όλα δουλεύουν σωστά,αλλά αυτό που δεν έχω καταλάβει είναι πως μπορώ(αν μπορώ) να κάνω testing oλα τα πιθανά url που μπορεί να προκύψουν είτε στο details είστε στο details-images ?
δεδομένο ότι τα details και details-images εμφανίζουν δυναμικά url.

Happy coding year
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

django testing url 6 Χρόνια 9 Μήνες πριν #4948

  • Theo
  • Το Άβαταρ του/της Theo
  • Αποσυνδεμένος
  • pytho_
  • Δημοσιεύσεις: 249
  • Ληφθείσες Ευχαριστίες 70
Γειά Χρίστο

Έριξα μια ματιά στο documentation

Αυτό που έγραψες τεστάρει μάλλον μόνο ότι δουλεύουν τα urls details kai details-images
Δεν ξέρω γιατί αλλά δουλεύουν αν και δεν βλέπω να είναι προεραιτικά τα id και slug

Λογικά θα πρέπει να δημιουργήσεις ένα χρήστη να τον κάνεις login και μετά να επισκεφτείς την details και details-images
όλα αυτά μέσα στο test.py
from django.test import Client, TestCase
from django.contrib.auth.models import User
 
class User_Form_Test(TestCase):
    def setUp(self):
        User.objects.create_user('john', 'lennon@thebeatles.com', 'johnpassword')
 
    def test_logged_user_get_details(self):
        self.client=Client() 
	response1 = self.client.post('/login/', {'username': 'john', 'password': 'johnpassword'})
        #ή το αντίστοιχο url που έχεις το login
        response2 = self.client.get('/details/', follow=True)
        self.assertEqual(response2.status_code, 200)
	response3 = self.client.get('/details-images/', follow=True)
        self.assertEqual(response3.status_code, 200)
 
Αν και πιστεύω πρέπει να τεστάρεις κάτι περισσότερο από το staus_code
Τελευταία διόρθωση: 6 Χρόνια 9 Μήνες πριν από Theo. Αιτία: Διώρθωση στον κώδικα
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Οι ακόλουθοι χρήστες είπαν "Σε Ευχαριστώ": xristosss20

django testing url 6 Χρόνια 9 Μήνες πριν #4949

  • xristosss20
  • Το Άβαταρ του/της xristosss20
  • Αποσυνδεμένος
  • pyt___
  • Δημοσιεύσεις: 53
γεια σου Theo

το ξέρω αυτό με το user και το ligin το έχω πραγματοποιηση στα τεστ μου.

Αυτό που με μπερδεύει τελείως είναι ότι στην ουσία δεν υπάρχει κάποιο url της μορφής
http://localhost/details/
ή
http://localhost/details/details-images/


όλα συνοδεύονται από κάποιο id και slug αντίστοιχα .

πχ
http://localhost/details/1
http://localhost/details-images/my-slug

οπότε δεν ξέρω ακριβώς τι ελέγχει πραγματικά ...εγώ χρειάζομαι ένα τεστ που να μπορεί να ελέγχει όλα τα url του project.


τι περισσότερο θα πρότεινες να τεστάρω παραπάνω από το status code ?
Τελευταία διόρθωση: 6 Χρόνια 9 Μήνες πριν από xristosss20.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

django testing url 6 Χρόνια 9 Μήνες πριν #4950

  • Αποστόλης
  • Το Άβαταρ του/της Αποστόλης
  • Αποσυνδεμένος
  • pytho_
  • Δημοσιεύσεις: 148
  • Ληφθείσες Ευχαριστίες 24
Για να ελέγχεις τα url's σε γενικότερο επίπεδο θα πρέπει να αφαιρέσεις τα
/(?P<id>\d+)
και
/(?P<slug>[^\.]+)
στο url.py

Βέβαια έτσι δύσκολα θα κρατήσεις σε τάξη τα url's και για να σου παίζουν τα link's με ?id=κάποιο_νούμερο θα ανοίξεις μια τεράστια τρύπα στο πρόγραμμα.
Σε testing συνθήκες μπορείς να το κάνεις, σε πραγματικό περιβάλλον απλά το ξεχνάς.
Καλό λοιπόν είναι να θεωρήσεις οτι στήνεις σε πραγματικό περιβάλλον, ώστε όταν έρθει η ώρα να ξέρεις τι να κάνεις.

Αυτό σημαίνει οτι θα πρέπει να γράψεις test για κάθε ένα url ξεχωριστά αν θέλεις να κάνεις σωστή δουλειά.
Τελευταία διόρθωση: 6 Χρόνια 9 Μήνες πριν από Αποστόλης.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

django testing url 6 Χρόνια 9 Μήνες πριν #4951

  • Theo
  • Το Άβαταρ του/της Theo
  • Αποσυνδεμένος
  • pytho_
  • Δημοσιεύσεις: 249
  • Ληφθείσες Ευχαριστίες 70
Θα με βοηθούσε να δώ views.details καθώς και το Model για το οποίο επιστρέφεται η σελίδα
Εγώ κατάλαβα ότι αναφέρεται σε Users

Γενικά παντώς γιατί να τσεκάρεις όλα τα id που έχεις.
Έστω ότι η σελίδα σου γίνεται amazon και έχεις 3000000 προιόντα και 5000000 users :lol: Θές ένα test να ελέγχει όλα αυτά;

Μπορείς να τσεκάρεις random 10 σελίδες
from app.models import Kati
 
class Form_Test(TestCase):
    def test_details(self):
        self.client=Client() 
        url='/details/'
	for i in range(10)
	   id = random.randint(1, kati.objects.count())
	   response = self.client.get('/details/'+str(id), follow=True)
           self.assertEqual(response.status_code, 200)
 

Σε περίπτωση όμως που μιλάμε για users και η σελίδα είναι προσωποποιημένη ένας client έχει πρόσβαση μόνο στο δικό του details/id οπότε θα πρέπει να κάνεις 10 clients :(

Όταν λέω μην ελέγχεις μόνο το status_code εννοώ εφόσον είναι μια προσωποποιημένη σελίδα καλό θα είναι να βάλεις πχ
self.assertContains(response, Kati.objects.get(pk=id).name)
για να δεις ότι έχει προσωποποιημένα στοιχεία που πρέπει να έχει
Τελευταία διόρθωση: 6 Χρόνια 9 Μήνες πριν από Theo.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

django testing url 6 Χρόνια 9 Μήνες πριν #4952

  • Αποστόλης
  • Το Άβαταρ του/της Αποστόλης
  • Αποσυνδεμένος
  • pytho_
  • Δημοσιεύσεις: 148
  • Ληφθείσες Ευχαριστίες 24
Theo, μη σε μπερδεύει το id.
Δεν ελέγχεται κάθε id ξεχωριστά αλλά το ότι στη σελίδα details εκχωρείται οπωσδήποτε ένας int.
Ο έλεγχος για το αν υφίσταται το id ή όχι, είναι θέμα query στη βάση.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

django testing url 6 Χρόνια 9 Μήνες πριν #4953

  • xristosss20
  • Το Άβαταρ του/της xristosss20
  • Αποσυνδεμένος
  • pyt___
  • Δημοσιεύσεις: 53
άρα από ότι κατάλαβα θα πρέπει να κάνω ερώτημα στην βάση να πάρω όλα τα πιθανά id και με ένα loop να τα κάνω έλεγχο μέσα στο test.py και αν μιλάμε για users πρέπει να γίνει ένα διπλό loop.
Δεν είναι προφανώς ότι ποιο εύκολα αλλά όχι και ακατόρθωτο.

όμως αν βάλω ένα url που υπάρχει πχ :
response = self.client.get('/details-images/my-slug-url/', follow=True)
self.assertEqual(response.status_code, 200)
τότε παίρνω 404 error γιατί όμως?
Τελευταία διόρθωση: 6 Χρόνια 9 Μήνες πριν από xristosss20.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

django testing url 6 Χρόνια 9 Μήνες πριν #4954

  • Theo
  • Το Άβαταρ του/της Theo
  • Αποσυνδεμένος
  • pytho_
  • Δημοσιεύσεις: 249
  • Ληφθείσες Ευχαριστίες 70
xristosss20 έγραψε:
άρα από ότι κατάλαβα θα πρέπει να κάνω ερώτημα στην βάση να πάρω όλα τα πιθανά id και με ένα loop να τα κάνω έλεγχο μέσα στο test.py και αν μιλάμε για users πρέπει να γίνει ένα διπλό loop.
Δεν είναι προφανώς ότι ποιο εύκολα αλλά όχι και ακατόρθωτο.

όμως αν βάλω ένα url που υπάρχει πχ :
response = self.client.get('/details-images/my-slug-url/', follow=True)
self.assertEqual(response3.status_code, 200)
τότε παίρνω 404 error γιατί όμως?
Δεν χρειάζεται να κάνεις αυτή την δουλεία
Το test ελέγχει τον κώδικά σου
Ο κώδικας σου παράγει μια σελίδα στο id του User
Το test θα ελέγξει αυτή τη διαδικασία όχι ότι δημιουργήθηκαν 1000 σελίδες για 1000 ids
Απλά ότι δουλεύει
Όταν κάποια στιγμή στο μέλλον γίνουν κάποιες αλλάγές στον κώδικα ή κάτι δεν πάει καλά θα τρέξεις το test να δεις πιο κομμάτι του κώδικά σου έχει σφάλμα
Στον κώδικα που έχεις σφάλμα πιθανώς φταίει ότι το response3 με το response είναι διαφορετικά.
Τελευταία διόρθωση: 6 Χρόνια 9 Μήνες πριν από Theo.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Οι ακόλουθοι χρήστες είπαν "Σε Ευχαριστώ": xristosss20

django testing url 6 Χρόνια 9 Μήνες πριν #4955

  • xristosss20
  • Το Άβαταρ του/της xristosss20
  • Αποσυνδεμένος
  • pyt___
  • Δημοσιεύσεις: 53
εκ παραδρομής έκανα λάθος στο rensponse αλλά πάλι το ίδιο αποτέλεσμα έχω και να το διορθώσω .
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

django testing url 6 Χρόνια 9 Μήνες πριν #4956

  • Theo
  • Το Άβαταρ του/της Theo
  • Αποσυνδεμένος
  • pytho_
  • Δημοσιεύσεις: 249
  • Ληφθείσες Ευχαριστίες 70
Πως ξέρεις ότι δουλεύει το url
Αν το πληκτρολογήσεις στο browser
127.0.0.1:8000/details-images/my-slug-url/ λειτουργεί;
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Οι ακόλουθοι χρήστες είπαν "Σε Ευχαριστώ": xristosss20

django testing url 6 Χρόνια 9 Μήνες πριν #4957

  • xristosss20
  • Το Άβαταρ του/της xristosss20
  • Αποσυνδεμένος
  • pyt___
  • Δημοσιεύσεις: 53
ακριβως αυτο λειτουργει κανονικα ...επισης και αλλο url να εισαγω που λειτουργει κανονικα
πχ
127.0.0.1:8000/details-images/my-slug-url-1/
παλι μου εμφανιζει 404 σφαλμα
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

django testing url 6 Χρόνια 9 Μήνες πριν #4958

  • Theo
  • Το Άβαταρ του/της Theo
  • Αποσυνδεμένος
  • pytho_
  • Δημοσιεύσεις: 249
  • Ληφθείσες Ευχαριστίες 70
Εκτιμώ ή ο client δεν έχει πρόσβαση ή κάτι παίζει με το redirect που κάνεις στο follow=True
Δύσκολο όμως χωρίς να βλέπω τον κώδικα πρέπει να μαντεύω :(
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

django testing url 6 Χρόνια 9 Μήνες πριν #4959

  • xristosss20
  • Το Άβαταρ του/της xristosss20
  • Αποσυνδεμένος
  • pyt___
  • Δημοσιεύσεις: 53
ακριβός αυτό χρησιμοποιώ

from django.test import Client, TestCase
class User_Form_Test(TestCase):
    def setUp(self):
        self.client = Client()
        self.user = User.objects.create_user('test_user', 'user@test.gr', 'secret')
        self.user.save()
        self.client.login(username='test_user', password='secret')
    def test_logged_user_get_details_images_slug(self):
        response = self.client.get('/details-images/my-slug', follow=True)
        self.assertEqual(response.status_code, 200)

και χωρις follow=True το ιδιο λαθος εχω
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

django testing url 6 Χρόνια 9 Μήνες πριν #4960

  • Theo
  • Το Άβαταρ του/της Theo
  • Αποσυνδεμένος
  • pytho_
  • Δημοσιεύσεις: 249
  • Ληφθείσες Ευχαριστίες 70
Δοκίμασέ το έτσι
from django.test import Client, TestCase
class User_Form_Test(TestCase):
    def test_logged_user_get_details_images_slug(self):
        response = self.client.get('/details-images/my-slug', follow=True)
        self.assertEqual(response.status_code, 200)
χωρίς setUp δηλαδή
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

django testing url 6 Χρόνια 9 Μήνες πριν #4961

  • Αποστόλης
  • Το Άβαταρ του/της Αποστόλης
  • Αποσυνδεμένος
  • pytho_
  • Δημοσιεύσεις: 148
  • Ληφθείσες Ευχαριστίες 24
Γράψε τον κώδικά σου με try - except μήπως σου βγάλει ακριβώς το πρόβλημα.
Πάντως να ξέρεις οτι το rewrite των url's είναι ευαίσθητο στα δεδομένα που τους στέλνεις.
Άλλο το /details-images/my-slug κι άλλο το /details-images/my-slug/
Τελευταία διόρθωση: 6 Χρόνια 9 Μήνες πριν από Αποστόλης.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
  • Σελίδα:
  • 1
  • 2
Συντονιστές: pmav99
Χρόνος δημιουργίας σελίδας: 0.392 δευτερόλεπτα

Μοιράσου το!

Powered by CoalaWeb

Λίστα Ταχυδρομείου