Pytest-django: ์‹ ์ œํ’ˆ?

์— ๋งŒ๋“  2017๋…„ 04์›” 06์ผ  ยท  22์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: pytest-dev/pytest-django

์œ ์ง€ ๊ด€๋ฆฌ์ž๋Š” ๋‹ค์Œ ๋ฆด๋ฆฌ์Šค๋ฅผ ์ค„์ผ ๊ณ„ํš์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚ด ์ง์žฅ์—์„œ ๋ช‡ ๊ฐ€์ง€ ํ”„๋กœ์ ํŠธ๋Š” django_assert_num_queries ์™€ ๊ฐ™์€ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค.

ํ•ด์ œํ•  ์ฐจ๋‹จ๊ธฐ๊ฐ€ ์žˆ์œผ๋ฉด ๊ธฐ๊บผ์ด ๋„์™€๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ด์— ๋Œ€ํ•œ ๊ณ„ํš์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์ด ํŒจํ‚ค์ง€๊ฐ€ PyPI์— ๋งˆ์ง€๋ง‰์œผ๋กœ ํ‘ธ์‹œ๋œ ์ดํ›„ ๋‘ ๊ฐ€์ง€ ์ฃผ์š” Django ๋ฆด๋ฆฌ์Šค๊ฐ€ ์žˆ์—ˆ๊ณ  Django 2 ์ง€์›์„ ์œ„ํ•ด git์—์„œ ์ง์ ‘ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  22 ๋Œ“๊ธ€

1.11 ๊ธฐ๋ฐ˜ ์ƒˆ ๋ฆด๋ฆฌ์Šค๋Š” @blueyed ์—์„œ ๋ฆด๋ฆฌ์Šค๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@ํŽ ๋ฉ”
๋ฌด์Šจ ๋ง์„ ํ•ฉ๋‹ˆ๊นŒ?
๋ฆด๋ฆฌ์Šค๋ฅผ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์ด ์žˆ๋Š”์ง€์กฐ์ฐจ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์— ๋Œ€ํ•œ ์†Œ์‹์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋˜ํ•œ ๋„์›€์ด ๋˜์–ด์„œ ๊ธฐ์ฉ๋‹ˆ๋‹ค.

๋˜ ๋‹ค๋ฅธ ๋ฌธ์ œ๋Š” Python 3.6์ด ๋ฏธ์ถœ์‹œ ๋ฒ„์ „์—์„œ๋งŒ ์ง€์›๋˜๋Š” ๊ฒƒ์œผ๋กœ ์ง€์ •๋˜์–ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์—…๋ฐ์ดํŠธ๋œ ๋ณ€๊ฒฝ ๋กœ๊ทธ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ค€๋น„ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ํฐ ๋„์›€์ด ๋  ๊ฒƒ์ด๊ณ  ๊ฐ€๋Šฅํ•œ ํ•œ ๋นจ๋ฆฌ ๋ฆด๋ฆฌ์Šค๋ฅผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” PyPI์˜ ๊ด€๋ฆฌ์ž๋กœ @blueyed ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๊ทธ๊ฐ€ ํŒจํ‚ค์ง€๋„ ์—…๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค!

๋” ์ž์ฃผ ๋ฆด๋ฆฌ์Šคํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ช‡ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ํ†ตํ•ด ๋„์›€์„ ์ฃผ์‹œ๋ฉด ๋งค์šฐ ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. โค๏ธ:

  • ๋ฆด๋ฆฌ์Šค ํ”„๋กœ์„ธ์Šค๋Š” ์ด์ œ ์•ฝ๊ฐ„ ์ˆ˜๋™์ž…๋‹ˆ๋‹ค(ํƒœ๊น…, Github์— ํƒœ๊ทธ ํ‘ธ์‹œ, sdist+wheel ๋นŒ๋“œ, PyPI์— ์—…๋กœ๋“œ). ์ด๊ฒƒ์€ ์Šคํฌ๋ฆฝํŠธ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๋ฒ„์ „ ๋ฒˆํ˜ธ๋ฅผ ์ธ์ˆ˜๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ„๋‹จํ•œ ์Šคํฌ๋ฆฝํŠธ์—์„œ ํ•ด๋‹น ๋‹จ๊ณ„๋ฅผ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๋˜ํ•œ ๋ฌธ์„œํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ณ€๊ฒฝ ๋กœ๊ทธ ๊ด€๋ฆฌ๋Š” ์•ฝ๊ฐ„ ๊ณ ํ†ต์Šค๋Ÿฝ๊ณ  ๋นˆ๋ฒˆํ•œ ๋ฆด๋ฆฌ์Šค๋ฅผ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์œ„์˜ ์Šคํฌ๋ฆฝํŠธ์™€ ํ†ตํ•ฉ๋œ towncrier์™€ ๊ฐ™์€ ๊ฒƒ์ด ๋งค์šฐ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • ๋ฆด๋ฆฌ์Šค ์ž‘์—…์„ ๋•์Šต๋‹ˆ๋‹ค. ์ด๋ฏธ pytest-django github ์œ ์ง€ ๊ด€๋ฆฌ์ž์ด๊ฑฐ๋‚˜ pytest ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ์–ด๋–ค ์ข…๋ฅ˜์˜ ์‹ค์ ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. PyPI ์‚ฌ์šฉ์ž ์ด๋ฆ„์„ ์•Œ๋ ค์ฃผ์‹œ๋ฉด ๊ด€๋ฆฌ์ž๋กœ ์ถ”๊ฐ€ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. :)

@p-himik ์งœ์ฆ๋‚˜์ง€๋งŒ ๋ถ„๋ช…ํžˆ ํ•˜์ž๋ฉด, ํ˜„์žฌ ๋ฆด๋ฆฌ์Šค๋Š” Python 3.6์—์„œ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค(์ €๋Š” ๋งค์ผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค).

@pelme๋‹˜ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ข‹์€ ์•„์ด๋””์–ด์ž…๋‹ˆ๋‹ค. towncrier ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์˜๋ฏธ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ๋ฆด๋ฆฌ์Šค๋‹น ํ•œ ๋ฒˆ ์ˆ˜๋™์œผ๋กœ git ๋กœ๊ทธ๋ฅผ ํ›‘์–ด๋ณด๋Š” ๊ฒƒ๋ณด๋‹ค ์‹ค์ œ๋กœ ๋” ๋‚˜์€์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. pytest ์ž์ฒด์—์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์ง€๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœ ๋” ๋งŽ์€ ์ผ์ด ์ง„ํ–‰๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋ณ€๊ฒฝ ๋กœ๊ทธ๋ฅผ ํ›‘์–ด๋ณด๋Š” ๋ฐ ๋„ˆ๋ฌด ์˜ค๋žœ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ์ง€๋Š” ์•Š์ง€๋งŒ (์ € ์ž์‹ ์„ ์œ„ํ•ด) ์ž‘์€ ๋‹จ๊ณ„๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋ฆด๋ฆฌ์Šค๋ฅผ ์ž๋™ํ™”ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๊ณ  ์•„๋งˆ๋„ ๋” ์ž์ฃผ ๋ฆด๋ฆฌ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด์ƒ์ ์œผ๋กœ๋Š” ๊ฑฐ์˜ ๊ฐ๊ฐ์˜ ๋ณ‘ํ•ฉ๋œ bugfix PR๊ณผ ํ•จ๊ป˜ bugfix ๋ฆด๋ฆฌ์Šค๋ฅผ ๋‚ด๋†“๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. bugfix ๋ฆด๋ฆฌ์Šค๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฒƒ์€ ์งœ์ฆ๋‚ฉ๋‹ˆ๋‹ค. :)

ํœด๊ฐ€์—์„œ ๋Œ์•„์˜ค๋Š” ์ฆ‰์‹œ ๋ฆด๋ฆฌ์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ tox ๊ตฌ์„ฑ ์ž‘์—…์„ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@pelme ์ง€๊ธˆ ์ƒˆ ๋ฆด๋ฆฌ์Šค๋Š” ์–ด๋–ป์Šต๋‹ˆ๊นŒ? :)

@pelme ์ง€๊ธˆ ์ƒˆ ๋ฆด๋ฆฌ์Šค๋Š” ์–ด๋–ป์Šต๋‹ˆ๊นŒ? :)

์˜ˆ, PyPi ํŒจํ‚ค์ง€๋Š” ๋งค์šฐ ์˜ค๋ž˜๋˜์—ˆ๊ณ  django 1.11์„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ฆด๋ฆฌ์Šค ํ”„๋กœ์„ธ์Šค๋Š” ์ด์ œ ์•ฝ๊ฐ„ ์ˆ˜๋™์ž…๋‹ˆ๋‹ค(ํƒœ๊น…, Github์— ํƒœ๊ทธ ํ‘ธ์‹œ, sdist+wheel ๋นŒ๋“œ, PyPI์— ์—…๋กœ๋“œ). ์ด๊ฒƒ์€ ์Šคํฌ๋ฆฝํŠธ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๋ฒ„์ „ ๋ฒˆํ˜ธ๋ฅผ ์ธ์ˆ˜๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ„๋‹จํ•œ ์Šคํฌ๋ฆฝํŠธ์—์„œ ํ•ด๋‹น ๋‹จ๊ณ„๋ฅผ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๋˜ํ•œ ๋ฌธ์„œํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ./setup.py publish ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. https://github.com/jedie/python-code-snippets/blob/master/CodeSnippets/setup_publish.py

์‹ค์ œ ์†”๋ฃจ์…˜์€ https://github.com/zestsoftware/zest.releaser ...์™€ ๊ฐ™์€ ๊ฒƒ์ด์ง€๋งŒ ํ‰๊ฐ€ํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์„ ํˆฌ์žํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค ;)

๋ฆด๋ฆฌ์Šค ํ”„๋กœ์„ธ์Šค๋Š” ์ด์ œ ์•ฝ๊ฐ„ ์ˆ˜๋™์ž…๋‹ˆ๋‹ค(ํƒœ๊น…, Github์— ํƒœ๊ทธ ํ‘ธ์‹œ, sdist+wheel ๋นŒ๋“œ, PyPI์— ์—…๋กœ๋“œ). ์ด๊ฒƒ์€ ์Šคํฌ๋ฆฝํŠธ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๋ฒ„์ „ ๋ฒˆํ˜ธ๋ฅผ ์ธ์ˆ˜๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ„๋‹จํ•œ ์Šคํฌ๋ฆฝํŠธ์—์„œ ํ•ด๋‹น ๋‹จ๊ณ„๋ฅผ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๋˜ํ•œ ๋ฌธ์„œํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ./setup.py๋ฅผ ๊ฒŒ์‹œํ•ฉ๋‹ˆ๋‹ค. https://github.com/jedie/python-code-snippets/blob/master/CodeSnippets/setup_publish.py

Travis Build Stages ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•œ ๋‹จ๊ณ„ ๋” ์ž๋™ํ™”ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฆด๋ฆฌ์Šค ํ”„๋กœ์„ธ์Šค๊ฐ€ ํƒœ๊ทธ ์ง€์ • ๋ฐ ํ‘ธ์‹œ๋กœ ๋‹จ์ˆœํ™”๋ฉ๋‹ˆ๋‹ค. PyPI ๋ฆด๋ฆฌ์Šค๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•œ ํ›„ ์ž๋™์œผ๋กœ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋งŽ์€ ํ”„๋กœ์ ํŠธ์—์„œ ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ํ›Œ๋ฅญํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐํšŒ๊ฐ€ ๋˜๋ฉด ์ด๊ฒƒ์„ ์„ค์ •ํ•œ PR์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ ์ง€ ๊ด€๋ฆฌ์ž๋Š” PyPI ์‚ฌ์šฉ์ž ์ด๋ฆ„๊ณผ ์•”ํ˜ธํ™”๋œ ์•”ํ˜ธ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ, PyPi ํŒจํ‚ค์ง€๋Š” ๋งค์šฐ ์˜ค๋ž˜๋˜์—ˆ๊ณ  django 1.11์„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์€ AFAIK ์•Š์Šต๋‹ˆ๋‹ค?!

@sloria
์ข‹์€ IMHO๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
AFAIK ์ €๋Š” PyPI์— ๋ฆด๋ฆฌ์Šคํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ @pelme ๊ฐ€ ์ง์ ‘ ํ•  ๊ธฐํšŒ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์— ๋Œ€๋น„ํ•˜์—ฌ ๊ฒฐ๊ตญ ๋‚ด ์ž๊ฒฉ ์ฆ๋ช…์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(๋˜๋Š” ๋ณ„๋„์˜ ์‚ฌ์šฉ์ž๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๋” ๋‚ซ์Šต๋‹ˆ๊นŒ?).

๋ฆด๋ฆฌ์Šค ํ”„๋กœ์„ธ์Šค๋Š” ์ด์ œ ์•ฝ๊ฐ„ ์ˆ˜๋™์ž…๋‹ˆ๋‹ค(ํƒœ๊น…, Github์— ํƒœ๊ทธ ํ‘ธ์‹œ, sdist+wheel ๋นŒ๋“œ, PyPI์— ์—…๋กœ๋“œ).

๋ญ, ๋‚˜์˜์ง€ ์•Š์•„! :) ์ž๋™ํ™”๋Š” ๋งค์šฐ ํ›Œ๋ฅญํ•˜์ง€๋งŒ ๊ทธ ๋™์•ˆ ์ด๋Ÿฌํ•œ ์ˆ˜๋™ ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์— ๋Œ€ํ•œ ๊ณ„ํš์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์ด ํŒจํ‚ค์ง€๊ฐ€ PyPI์— ๋งˆ์ง€๋ง‰์œผ๋กœ ํ‘ธ์‹œ๋œ ์ดํ›„ ๋‘ ๊ฐ€์ง€ ์ฃผ์š” Django ๋ฆด๋ฆฌ์Šค๊ฐ€ ์žˆ์—ˆ๊ณ  Django 2 ์ง€์›์„ ์œ„ํ•ด git์—์„œ ์ง์ ‘ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์•„์ง ์‹ ์ œํ’ˆ์ด ์ถœ์‹œ๋˜์ง€ ์•Š์•˜๋‚˜์š”? :(

๋งˆ์ง€๋ง‰ ๋ฆด๋ฆฌ์Šค ์ดํ›„ 81๊ฐœ์˜ ์ปค๋ฐ‹๊ณผ 504์ผ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

https://travis-ci.org/pytest-dev/pytest-django/jobs/366444792 ๊ฐ€ PyPI์— ์—…๋กœ๋“œํ•  ๋•Œ ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์•„์ง pypi๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

https://github.com/pytest-dev/pytest-django/pull/590 / a96931e๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

3.2.1(50063c4)๋กœ ์ˆ˜์ •๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

https://pypi.python.org/pypi/pytest-django :๋ถˆ๊ฝƒ๋†€์ด:

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰

๊ด€๋ จ ๋ฌธ์ œ

tolomea picture tolomea  ยท  4์ฝ”๋ฉ˜ํŠธ

ryankask picture ryankask  ยท  5์ฝ”๋ฉ˜ํŠธ

ojake picture ojake  ยท  6์ฝ”๋ฉ˜ํŠธ

AndreaCrotti picture AndreaCrotti  ยท  5์ฝ”๋ฉ˜ํŠธ

clintonb picture clintonb  ยท  4์ฝ”๋ฉ˜ํŠธ