pythonclub / pythonclub.github.io

Blog colaborativo sobre tecnologias que envolvam a linguagem Python
http://pythonclub.com.br/
207 stars 109 forks source link

[NEW] Python com Unittest, Travis CI, Coveralls e Landscape (Parte 3 de 4) #268

Closed mstuttgart closed 8 years ago

luzfcb commented 8 years ago

@mstuttgart valeu novamente.

Ah, não sei se vc vai falar, mais uma funcionalidade útil de travis é a possibilidade de você explicitamente falar para o travis não rodar os testes em um commit ou merge

para isso, basta colocar na mensagem de commit ou merge o texto: [ci skip]

https://docs.travis-ci.com/user/customizing-the-build/#Skipping-a-build

mstuttgart commented 8 years ago

@luzfcb por nada. Eu que agradeço a oportunidade!

Sobre a sua dica, muito bacana! Eu não sabia que era possível excluir um commit específico. Essa dica é daquele tipo de ajuste que você percorre a net toda pra achar e não encontra.

Tem uma configuração que descobri recentemente, que é muito útil para quando você deseja rodar o Travis CI em uma aplicação contruída em PyQt/PySide. Sem ela os testes dão errado.

https://github.com/pynocchio/pynocchio-comic-reader/blob/develop/.travis.yml#L16

Nos tutoriais que estou enviando, meu objetivo é deixar o uso dos serviços o mais simples possível, para quem nunca os usou não se perder. Futuramente, pretendo fazer um post com essas dicas de configuração do Travis CI, Coveralls e Landscape e , se você não se importar, gostaria de adicionar a sua dica (com os devidos créditos, é claro).

luzfcb commented 8 years ago

Nas minhas aplicações Django, para resolver esse mesmo problema eu uso PyVirtualDisplay

implementação PyVirtualDisplay + Splinter + StaticLiveServerTestCase

# -*- coding: utf-8 -*-
from django.contrib.staticfiles.testing import StaticLiveServerTestCase
from pyvirtualdisplay import Display
from splinter.browser import Browser

class SplinterStaticLiveServerTestCase(StaticLiveServerTestCase):
    splinter_driver = 'firefox'
    virtual_display_size = (1024, 768)
    use_virtual_display = True

    @classmethod
    def setUpClass(cls):
        super(SplinterStaticLiveServerTestCase, cls).setUpClass()
        if cls.use_virtual_display:
            cls.virtual_display = Display(visible=0, size=cls.virtual_display_size)
            cls.virtual_display.start()
        cls.browser = Browser(cls.splinter_driver)
        cls.browser.driver.maximize_window()

    @classmethod
    def tearDownClass(cls):
        super(SplinterStaticLiveServerTestCase, cls).tearDownClass()
        cls.browser.quit()
        if cls.use_virtual_display:
            cls.virtual_display.stop()

a versão para unittest puro, fica assim

# -*- coding: utf-8 -*-

class TestCaseWithVirtualDisplay(unittest.TestCase):
    virtual_display_size = (1024, 768)
    use_virtual_display = True

    @classmethod
    def setUpClass(cls):
        super(TestCaseWithVirtualDisplay, cls).setUpClass()
        if cls.use_virtual_display:
            cls.virtual_display = Display(visible=0, size=cls.virtual_display_size)
            cls.virtual_display.start()

    @classmethod
    def tearDownClass(cls):
        if cls.use_virtual_display:
            cls.virtual_display.stop()
mstuttgart commented 8 years ago

@luzfcb show de bola! Vou dar uma estudada no PyVirtualDisplay!.

luzfcb commented 8 years ago

depois de instalar o pacote PyVirtualDisplay, a unica preocupação que tenho é ter certeza que xvfb está instalado.

sobre serviços uteis, eu também gosto do https://requires.io . Ele me ajuda bastante quando tenho que atualizar as versões das dependências do https://github.com/pydanny/cookiecutter-django

um outro cara que promete é o https://pyup.io/ : https://github.com/pyupio/pyup (ainda está em beta fechado)

Ele manda um pull-request automagicamente contendo a atualização da biblioteca e o change log... veja um exemplo: https://github.com/pyupio/pyup/pull/45

Se um pull-request de atualização da mesma biblioteca foi mandado anteriormente, ele fecha o pull-request anterior em favor do novo...

mstuttgart commented 8 years ago

Bacana, não conhecia esses serviços. Vou usar o requires.io nos meus projetos. Vale até a pena fazer um mini tutorial sobre eles.