#python #xml #multithreading #pytest
#python #xml #многопоточность #pytest
Вопрос:
XML-файл не обновляется, когда утверждение завершается ошибкой в потоке.
- Версия Pytest — 5.2.1
- Среда- Ubuntu 18.04
Привет, я написал скрипт, который проверяет, является ли утверждение истинным каждые 10 секунд и завершается ошибкой через минуту (намеренно). Сценарий выглядит следующим образом :
import datetime
import time
from threading import Thread, Condition
DURATION = 1 # 1 minute
START_TIME = 0
class Monitoring(Thread):
def __init__(self):
super(Monitoring, self).__init__()
def run(self):
global DURATION
while True:
if (datetime.datetime.now() - START_TIME).seconds <= DURATION*60:
assert 1 2 == 3, "No"
time.sleep(10)
else:
assert 1 3 == 5, "oh no"
break
def test_thread():
global START_TIME
START_TIME = datetime.datetime.now()
Monitoring().start()
Сохраните этот скрипт под именем test_for_thread.py .
Также выполните этот скрипт следующим образом
python3 -m pytest --junit-xml=error_report.xml test_for_thread.py
Вот что я получаю
- generated xml file: /home/deepanshu/notebooks/error_report.xml -
============================== 1 passed in 0.01s ===============================
Exception in thread Thread-1:
Traceback (most recent call last):
File "/home/deepanshu/anaconda3/lib/python3.7/threading.py", line 926, in _bootstrap_inner
self.run()
File "/home/deepanshu/foglamp_workspace/csv_plugins/notebooks/test_for_thread.py", line 18, in run
assert 1 3 == 5, "oh no"
AssertionError: oh no
assert (1 3) == 5
Я хотел error_report.xml должна должна быть информация о сбое. Файл создан, но в нем ничего нет. Я подозреваю, что pytest завершается, но поток продолжает выполняться. Есть ли какой-либо способ убедиться, что информация об ошибке отражена в файле xml, или, возможно, заставить pytest не завершать работу.
Приветствуется любая помощь. Заранее спасибо.
Комментарии:
1. Это не сработает. Во-первых, вы должны
join
дождаться завершения вашего потока. Но тогда ваши утверждения выполняются не в самом тесте, а в другом потоке — поэтому, хотя утверждение может завершиться ошибкой, ваш тест все равно пройдет. Если возможно, протестируйте логику в потоке отдельно.2. Хорошо, спасибо @MrBeanBremen . Я использовал join, я смог получить ошибку в xml-файле, но тест показал, что пройден. Вариант использования фактически не поддерживается. Для ссылки на кого-то другого я также создал проблему на github .