Django测试:增加testsRun计数器

Django测试:增加testsRun计数器,django,django-testing,Django,Django Testing,在一些Django测试中,我有循环来测试很多东西。 最终结果显示为: 以3.456s运行了1次测试 我想增加每个循环的计数器,我怎么做? 它正在使用subTest(),但这不会更新计数器(我相信这是一个参数testsRun) 我的测试是这样的 class MyTestCase(TestCase): def test_auth_pages(self): pages = ['homepage', 'dashboard', 'profile'] for page in

在一些Django测试中,我有循环来测试很多东西。 最终结果显示为:

以3.456s运行了1次测试

我想增加每个循环的计数器,我怎么做? 它正在使用
subTest()
,但这不会更新计数器(我相信这是一个参数
testsRun

我的测试是这样的

class MyTestCase(TestCase):

   def test_auth_pages(self):
      pages = ['homepage', 'dashboard', 'profile']

      for page in pages:
         with self.subTest():
            # ....testsRun  += 1 
            self.c.login(username='test', password='test')
            response = self.c.get(reverse_lazy(page))
            self.assertEqual(200, response.status_code, msg=page)
            self.c.logout()
            response = self.c.get(reverse_lazy(page))
            self.assertEqual(302, response.status_code, msg=page) 

您可以使用不同的测试套件来实现这一点

从包裹中签出

def test_evens():
对于范围(0,5)内的i:
收益率检查_偶数,i,i*3#这会生成5个不同的测试
def检查偶数(n,nn):
断言n%2==0或nn%2==0

< /代码> 如果您不介意更改测试框架,请考虑<代码> PyTestDjango 包。您可以使用
@pytest.mark.parametrize
轻松地参数化测试:

导入pytest
@pytest.mark.parametize(“页面名称”[“主页”、“仪表板”、“概要文件”])
def测试部分页面(页面名称,客户端):
client.login(用户名='test',密码='test')
response=client.get(反向_lazy(第页))
assert response.status_code==200
client.logout()
response=client.get(反向_lazy(第页))
assert response.status_code==302
如果没有,您可以创建一个测试函数工厂,该工厂将接受页面名称并返回该页面的测试函数:

类MyTestCase(TestCase):
定义创建页面测试(页面名称):
def测试_功能(自身):
self.c.login(用户名='test',密码='test')
response=self.c.get(反向(页面名称))
self.assertEqual(200,response.status\u代码,msg=page\u名称)
self.c.注销()
response=self.c.get(反向(页面名称))
self.assertEqual(302,response.status\u code,msg=page\u name)
返回测试函数
测试\主页=\创建\页面\测试(“主页”)
测试\仪表板=\创建\页面\测试(“仪表板”)
测试\配置文件=\创建\页面\测试(“配置文件”)

这些更改的附加好处是每个页面都有一个独立的测试,独立于其他页面。这使得调试更容易。

可能是@BearBrown的副本否,它工作正常,并且正在使用
self.subTest()
aleady。我只想增加计数器。根据答案,您应该得到
在0.006s中运行了3个测试
我将在我的本地机器上测试它,或者我不明白您为什么不只编写三个测试?如果您需要运行大量测试,您可以随时编写一个脚本来为您编写tests.py。当然,您可以将测试计数器设置为您想要的任何值,例如
self.\u output.result.testsRun+=len(pages)
(您甚至可以引入自己的上下文管理器
countedSubTest
或其他相关内容),但是为什么呢?子测试不是单独的测试实体,在任何地方都不被视为单独的测试实体;它只是一个工具,在失败时不停止测试。