Python 在django中设置卸载登录注销的正确方法

Python 在django中设置卸载登录注销的正确方法,python,django,testing,Python,Django,Testing,为了测试我使用django制作的轮询应用程序,投票/查看结果的先决条件是用户应该登录。我想创建一个testsuite,其中安装程序包括创建testuser,登录他,拆卸包括注销用户和删除用户 我遇到了setUp()和tearDown()方法,但知道它们在测试中针对每个方法都完成了。我希望在类级别上具有此功能,并看到django有setUpClass和tearDownClass,但由于它们是类方法,我无法对它们执行self.client.login、self.client.logout操作。然后我

为了测试我使用django制作的轮询应用程序,投票/查看结果的先决条件是用户应该登录。我想创建一个testsuite,其中安装程序包括创建testuser,登录他,拆卸包括注销用户和删除用户

我遇到了setUp()和tearDown()方法,但知道它们在测试中针对每个方法都完成了。我希望在类级别上具有此功能,并看到django有setUpClass和tearDownClass,但由于它们是类方法,我无法对它们执行self.client.login、self.client.logout操作。然后我创建了一个LoginMixin,其中包含setUp和tearDown方法

我想知道这两种方法中哪一种更适合python,是否有比每次测试前登录和注销更好的替代方法

  • 具有设置、拆卸方法:

    def setUp(self): self.user = utils.create_user() self.client.login(username='testuser', password='testpasswd') def tearDown(self): self.client.logout() utils.delete_user(self.user) def设置(自): self.user=utils.create\u user() self.client.login(用户名='testuser',密码='testpasswd') def拆卸(自): self.client.logout() utils.delete\u用户(self.user)
  • 拥有LoginMixin并让每个测试类从中派生:

    class LoginMixin(): def setUp(self): self.user = create_user() self.client.login(username='testuser', password='testpasswd') def tearDown(self): self.client.logout() class MyTest(LoginMixin, TestCase): .... .... 类LoginMixin(): def设置(自): self.user=create_user() self.client.login(用户名='testuser',密码='testpasswd') def拆卸(自): self.client.logout() 类MyTest(LoginMixin,TestCase): .... ....

  • 我使用django_nose作为测试运行程序。

    如果您不使用
    setUpClass
    classmethod的唯一原因是因为您没有访问默认客户机的权限,那么您可以创建自己的并参考该方法:

    from django.test.client import Client
    
    class LoginMixin():
        client = Client()
        # ...
    

    您使用什么应用程序/模块进行测试?WebTest?使用django_nose作为测试运行程序-测试是使用通常的django单元测试编写的,如本文所述-好吧,就像TestCase文档一样。创建一个名为
    Something(TestCase)
    的类。然后,对于这个类,创建
    setUp
    tearDown
    (每次调用
    Something
    类中的函数时都会调用它们。然后创建所需的函数测试(名称必须以
    test...
    开头。当然,安装程序和拆卸程序将执行登录/注销。按照最初的帖子,安装程序和拆卸程序已经完成了登录/注销。但是,每个方法都会调用安装程序,拆卸程序,我想实现的功能是在类级别登录/注销-登录-运行该类中的所有测试-注销。这些方法需要使用客户机对象-但他们不能,因为类方法将在类级别而不是对象级别登录。所以我想知道人们通常遵循的最佳实践是什么。