February 3rd, 2016

404

pytest & multithreading

Всё ещё хуже, чем кажется.

app/::test_cycle <- ../test_app.py [MainThread] 2016-02-03 19:00:02,829 INFO: Starting thread [0]
[MainThread] 2016-02-03 19:00:02,829 INFO: Starting thread [0]
[MainThread] 2016-02-03 19:00:02,829 INFO: Starting thread [1]
[MainThread] 2016-02-03 19:00:02,829 INFO: Starting thread [1]
[MainThread] 2016-02-03 19:00:02,830 INFO: Waiting for thread [0]
[MainThread] 2016-02-03 19:00:02,830 INFO: Waiting for thread [0]
Exception in thread [ 0]:
Traceback (most recent call last):
File "/usr/lib/python2.7/threading.py", line 801, in __bootstrap_inner
self.run()
File "/usr/lib/python2.7/threading.py", line 754, in run
self.__target(*self.__args, **self.__kwargs)
File "/home/amarao/git/app/app/app.py", line 19, in job
lock_manager.accure()
AttributeError: 'thread.lock' object has no attribute 'accure'

[MainThread] 2016-02-03 19:00:02,831 INFO: Thread [0] terminated
Exception in thread [ 1]:
Traceback (most recent call last):
File "/usr/lib/python2.7/threading.py", line 801, in __bootstrap_inner
self.run()
File "/usr/lib/python2.7/threading.py", line 754, in run
self.__target(*self.__args, **self.__kwargs)
File "/home/amarao/git/app/app/app.py", line 19, in job
lock_manager.accure()
AttributeError: 'thread.lock' object has no attribute 'accure'
[MainThread] 2016-02-03 19:00:02,831 INFO: Thread [0] terminated

[MainThread] 2016-02-03 19:00:02,832 INFO: Waiting for thread [1]
[MainThread] 2016-02-03 19:00:02,832 INFO: Waiting for thread [1]
[MainThread] 2016-02-03 19:00:02,832 INFO: Thread [1] terminated
[MainThread] 2016-02-03 19:00:02,832 INFO: Thread [1] terminated
PASSED

То есть код в треде трейсится, а pytest думает, что всё зашибись.
404

infinite loops & pytest

Дано:

def main():
   while True:
     do_something()
     wait_next()


Задача - покрыть тестом. Желательно, с прогоном больше одного цикла.

Решение:

with with mock.patch.object(mymodule, 'wait_next') as wait_next:
    wait_next.side_effect = [None, None, SystemExit]
    mymodule.main()
    assert wait_next.call_count = 3
404

success?

Две недели писал, ни разу не запускал на чём-то похожем на реальный мир - только моки.

Имеем:

325 строк программа.
854 строки тесты (57 шт).

100% покрытие тестами.

Сейчас буду писать setup.py и пакетирование, и буду запускать на всё-ещё-не-продакшене первый раз.

Ваши ставки? Заработает с первого раза или нет? (кроме багов пакетирования, что я принимаю за данность и буду фиксить пока не заработает).