Na produkcji nie ruszają testy.

0

Na produkcji nie chca mi ruszyc testy.... lokalnie przechodza a na produkcji mam taki blad:

hubert@vps-31dff1d1:~/monkey-shop.pl$ make test
. venv/bin/activate && python3 manage.py test apps.monkeyShop
Traceback (most recent call last):
  File "/home/hubert/monkey-shop.pl/manage.py", line 22, in <module>
    main()
  File "/home/hubert/monkey-shop.pl/manage.py", line 18, in main
    execute_from_command_line(sys.argv)
  File "/home/hubert/.local/lib/python3.10/site-packages/django/core/management/__init__.py", line 446, in execute_from_command_line
    utility.execute()
  File "/home/hubert/.local/lib/python3.10/site-packages/django/core/management/__init__.py", line 440, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/home/hubert/.local/lib/python3.10/site-packages/django/core/management/commands/test.py", line 24, in run_from_argv
    super().run_from_argv(argv)
  File "/home/hubert/.local/lib/python3.10/site-packages/django/core/management/base.py", line 402, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/home/hubert/.local/lib/python3.10/site-packages/django/core/management/base.py", line 448, in execute
    output = self.handle(*args, **options)
  File "/home/hubert/.local/lib/python3.10/site-packages/django/core/management/commands/test.py", line 68, in handle
    failures = test_runner.run_tests(test_labels)
  File "/home/hubert/.local/lib/python3.10/site-packages/django/test/runner.py", line 1045, in run_tests
    suite = self.build_suite(test_labels, extra_tests)
  File "/home/hubert/.local/lib/python3.10/site-packages/django/test/runner.py", line 895, in build_suite
    tests = self.load_tests_for_label(label, discover_kwargs)
  File "/home/hubert/.local/lib/python3.10/site-packages/django/test/runner.py", line 869, in load_tests_for_label
    tests = self.test_loader.discover(start_dir=label, **kwargs)
  File "/usr/lib/python3.10/unittest/loader.py", line 306, in discover
    os.path.dirname((the_module.__file__)))
  File "/usr/lib/python3.10/posixpath.py", line 152, in dirname
    p = os.fspath(p)
TypeError: expected str, bytes or os.PathLike object, not NoneType
make: *** [Makefile:52: test] Error 1

W ogóle lokalnie działa mi formularz logowania , rejestracji. Uzytkownik pozostaje zalogowany do momentu nacisniecia logout a na produkcji od razu wylogowywuje... nie wiem co jest grane....

4

Bo nie testuje się na produkcji.

3
Spine napisał(a):

Bo nie testuje się na produkcji.

Jak to nie? Każdy wie, że testy na produkcji są najlepsze i najwięcej bugów klient znajduje xD

0

@hubertsuder: Zagdzam się z przedmówcami :D, może jednak w pipelinie, czy jakoś tak, a nie na produkcji? ;)

2

Nie ma sensu popadać w skrajność.

  • Oczywiście, należałoby ustalić czemu te testy się nie odpalają na produkcji. Z technicznego punktu widzenia - powinny. To że się nie odpalają, to jest jakiś błąd. Należałoby go znaleźć, zwłaszcza że nie wiemy czemu.
  • Ale jak już go znajdziesz, to nie odpalaj testów na produkcyjnej maszynie.

Co do samego problemu:

hubertsuder napisał(a):
  File "/home/hubert/.local/lib/python3.10/site-packages/django/test/runner.py", line 869, in load_tests_for_label
    tests = self.test_loader.discover(start_dir=label, **kwargs)
  File "/usr/lib/python3.10/unittest/loader.py", line 306, in discover
    os.path.dirname((the_module.__file__)))
  File "/usr/lib/python3.10/posixpath.py", line 152, in dirname
    p = os.fspath(p)
TypeError: expected str, bytes or os.PathLike object, not NoneType
make: *** [Makefile:52: test] Error 1

Błąd expected str, bytes or os.PathLike object, not NoneType jest dosyć enigmatyczny. Mówi tylko tyle, że spodziewano się dostać jakiś ciąg, a otrzymano None. Widzę że call jest przy os.path.dirname((the_module.__file__))) oraz p = os.fspath(p). Za pewne więc test runner próbuje odczytać coś związanego ze ścieżkami lub systemem operacyjnym i dostaje None. Ewentualnie, przez __file__, może chodzić o odpalanie testów jako plik vs moduł python x.py/python -m x. Ale raczej obstawiałbym to pierwsze.

To jest dla mnie jasny sygnał, że masz ustawione lokalnie coś związanego z OS'em, co jest używane przez test runner, ale nie ma tego na produkcji. Obstawiam jakąś zmienną środowiskową typu PYTHONPATH albo HOME. Sprawdź czy masz je ustawione na produkcji?

0

Raz, że testy sie nie opdalaja ... dwa ze aplikacja działa w nieprawidłowy sposob.... masakra jakas. Lokalnie wszystko dziala... a takie same zaleznosci instaluje w requirments i tez ubuntu ta sama wersja na produkcji.... wszystko takie same.

0

Ja sobie konfigurowałem django na hostingu mydevil i mi wszystko działało.
Przejrzyj ich wiki: https://wiki.mydevil.net/Django

0

To nie jest moj pierwszy projekt w django... na poprzednich projektach testy mi przechodza rowniez po stronie serwera i wszystko dziala prawidłowo...tylko teraz spotkałem sie z takim bugiem.... to jest jakas masakra

0
Spine napisał(a):

Bo nie testuje się na produkcji.

screenshot-20231114140904.png

1

Ruszyły testy po dodaniu w każdy folder pliku __init__.py

1
hubertsuder napisał(a):

Ruszyły testy po dodaniu w każdy folder pliku __init__.py

Oooo. Czyli trafiłem? :D

Riddle napisał(a):

Ewentualnie, przez __file__, może chodzić o odpalanie testów jako plik vs moduł python x.py/python -m x. Ale raczej obstawiałbym to pierwsze.

0

no na to wyglada... hehe testy ruszyly, przechodzą a aplikacja i tak działa inaczej.... to jest masakra. Testuje widoki i testy wskazuja ze wszystko jest ok, a aplikacja dziala inaczej. Nie utrzymuje uzytkownika zalogowanego w aplikacji, nie wyswietla messages .... nie dziala tak jak powinna

1
hubertsuder napisał(a):

no na to wyglada... hehe testy ruszyly, przechodzą a aplikacja i tak działa inaczej.... to jest masakra. Testuje widoki i testy wskazuja ze wszystko jest ok, a aplikacja dziala inaczej. Nie utrzymuje uzytkownika zalogowanego w aplikacji, nie wyswietla messages .... nie dziala tak jak powinna

Ja bym powiedział, że działa dokładnie tak jak ma działać. Widocznie masz na swoim lokalnym komputerze jakieś dodatkowe rzeczy i side efekty, które utrudniają Ci zobaczenie jak aplikacja na prawdę się zachowa po wdrożeniu.

Powiedziałbym że dodanie __init__.py do pakietów to jest absolutna konieczność, kto wie co jeszcze masz lokalnie porobion.

1 użytkowników online, w tym zalogowanych: 0, gości: 1