Estou usando selênio para testes ponta a ponta e não consigo descobrir como usar setup_class
e teardown_class
métodos.
Preciso configurar o navegador no setup_class
método, realizar vários testes definidos como métodos de classe e, finalmente, sair do navegador no teardown_class
método.
Mas logicamente parece uma solução ruim, pois na verdade meus testes não funcionarão com classe, mas com objeto. Eu passo o self
param dentro de cada método de teste, para poder acessar os vars dos objetos:
class TestClass:
def setup_class(cls):
pass
def test_buttons(self, data):
# self.$attribute can be used, but not cls.$attribute?
pass
def test_buttons2(self, data):
# self.$attribute can be used, but not cls.$attribute?
pass
def teardown_class(cls):
pass
E até parece não ser correto criar instância de navegador para classe .. Deve ser criado para cada objeto separadamente, certo?
Portanto, preciso usar os métodos __init__
e em __del__
vez de setup_class
e teardown_class
?
resource
parâmetro emtest_that_depends_on_resource(self, resource)
Quando você escreve "testes definidos como métodos de classe" , você realmente quer dizer métodos de classe (métodos que recebem sua classe como primeiro parâmetro) ou apenas métodos regulares (métodos que recebem uma instância como primeiro parâmetro)?
Como seu exemplo usa
self
para os métodos de teste, estou assumindo o último, então você só precisa usarsetup_method
:A instância do método de teste é passada para
setup_method
eteardown_method
, mas pode ser ignorada se seu código de configuração / desmontagem não precisar conhecer o contexto de teste. Mais informações podem ser encontradas aqui .Também recomendo que você se familiarize com os acessórios do py.test , pois são um conceito mais poderoso.
fonte
setup_class
com métodos simulados e semelhantes precisavam ser modernizados.setup_class(self, foo, bar)
->setup_method(self,function,foo,bar)
Isso pode ajudar http://docs.pytest.org/en/latest/xunit_setup.html
Em minha suíte de teste, eu agrupo meus casos de teste em classes. Para a configuração e a desmontagem de que preciso para todos os casos de teste dessa classe, uso os métodos de classe
setup_class(cls)
eteardown_class(cls)
.E para a configuração e desmontagem que preciso para cada caso de teste, uso o
setup_method(method)
eteardown_method(methods)
Exemplo:
Agora quando eu executo meus testes, quando a execução do TestClass está começando, ele registra os detalhes de quando está começando a execução, quando está terminando a execução e o mesmo para os métodos.
Você pode adicionar outras etapas de configuração e desmontagem que possa ter nos respectivos locais.
Espero que ajude!
fonte
setup_class
vssetup_method
?<setup/teardown>_class
para toda a classe. Aqui, podem ser coisas como definir o link para o banco de dados ou carregar o arquivo de dados. E então, cada caso de teste pode ter sua própria configuração na forma de<setup/teardown>_method
. As coisas estão muito claras agora. Muito obrigado!Como @Bruno sugeriu, usar fixtures pytest é outra solução acessível para ambas as classes de teste ou mesmo apenas funções de teste simples. Aqui está um exemplo de teste de funções python2.7 :
Portanto, a execução
test_1...
produz:Observe que
stuff_i_setup
é referenciado no fixture, permitindo que esse objeto sejasetup
etorn down
para o teste com o qual está interagindo. Você pode imaginar que isso pode ser útil para um objeto persistente, como um banco de dados hipotético ou alguma conexão, que deve ser limpo antes de cada teste ser executado para mantê-los isolados.fonte
Seu código deve funcionar exatamente como você espera se adicionar
@classmethod
decoradores.Consulte http://pythontesting.net/framework/pytest/pytest-xunit-style-fixtures/
fonte
self
é usado para métodos de instância, onde o primeiro argumento é a instância do objeto específico no qual a operação do método está ocorrendo, enquantocls
é usado para@classmethod
s, que estão vinculados a a classe e não uma instância da classe (ou seja, um objeto).