{"title":"Avancerade testämnen","version":"5.2","locale":"sv","docname":"topics/testing/advanced","url":"/sv/5.2/topics/testing/advanced/","canonical":"https://djangodocs.dev/sv/5.2/topics/testing/advanced/","summary":"Klassen:~django.test.RequestFactory delar samma API som testklienten. Men istället för att bete sig som en webbläsare ger RequestFactory ett sätt att…","html":"<h1>Avancerade testämnen<a class=\"heading-anchor\" href=\"#advanced-testing-topics\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<section id=\"the-request-factory\">\n<h2>Förfrågningsfabriken<a class=\"heading-anchor\" href=\"#the-request-factory\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.test.RequestFactory\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">RequestFactory</span><a class=\"heading-anchor\" href=\"#django.test.RequestFactory\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Klassen:~django.test.RequestFactory delar samma API som testklienten. Men istället för att bete sig som en webbläsare ger RequestFactory ett sätt att generera en begärandeinstans som kan användas som det första argumentet för alla vyer. Detta innebär att du kan testa en vyfunktion på samma sätt som du skulle testa vilken annan funktion som helst - som en svart låda, med exakt kända ingångar, och testa för specifika utgångar.</p>\n<p>API:et för <a class=\"reference internal\" href=\"#django.test.RequestFactory\" title=\"django.test.RequestFactory\"><code class=\"xref py py-class docutils literal notranslate\">RequestFactory</code></a> är en något begränsad delmängd av testklientens API:</p>\n<ul class=\"simple\">\n<li><p>Den har endast tillgång till HTTP-metoderna <a class=\"reference internal\" href=\"/sv/5.2/topics/testing/tools/#django.test.Client.get\" title=\"django.test.Client.get\"><code class=\"xref py py-meth docutils literal notranslate\">get()</code></a>, <a class=\"reference internal\" href=\"/sv/5.2/topics/testing/tools/#django.test.Client.post\" title=\"django.test.Client.post\"><code class=\"xref py py-meth docutils literal notranslate\">post()</code></a>, <a class=\"reference internal\" href=\"/sv/5.2/topics/testing/tools/#django.test.Client.put\" title=\"django.test.Client.put\"><code class=\"xref py py-meth docutils literal notranslate\">put()</code></a>, <a class=\"reference internal\" href=\"/sv/5.2/topics/testing/tools/#django.test.Client.delete\" title=\"django.test.Client.delete\"><code class=\"xref py py-meth docutils literal notranslate\">delete()</code></a>, <a class=\"reference internal\" href=\"/sv/5.2/topics/testing/tools/#django.test.Client.head\" title=\"django.test.Client.head\"><code class=\"xref py py-meth docutils literal notranslate\">head()</code></a>, <a class=\"reference internal\" href=\"/sv/5.2/topics/testing/tools/#django.test.Client.options\" title=\"django.test.Client.options\"><code class=\"xref py py-meth docutils literal notranslate\">options()</code></a> och <a class=\"reference internal\" href=\"/sv/5.2/topics/testing/tools/#django.test.Client.trace\" title=\"django.test.Client.trace\"><code class=\"xref py py-meth docutils literal notranslate\">trace()</code></a>.</p></li>\n<li><p>Dessa metoder accepterar alla samma argument <em>undantaget</em> för <code class=\"docutils literal notranslate\">follow</code>. Eftersom detta bara är en fabrik för att producera förfrågningar är det upp till dig att hantera svaret.</p></li>\n<li><p>Den stöder inte middleware. Sessions- och autentiseringsattribut måste tillhandahållas av testet självt om det krävs för att vyn ska fungera korrekt.</p></li>\n</ul>\n<aside class=\"version-note version-changed\" data-version=\"5.1\" role=\"note\">\n<p class=\"version-note-title\">Changed in Django 5.1</p><p>Parametern <code class=\"docutils literal notranslate\">query_params</code> har lagts till.</p>\n</aside>\n<section id=\"example\">\n<h3>Exempel<a class=\"heading-anchor\" href=\"#example\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Följande är ett enhetstest som använder request factory:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth.models</span> <span class=\"kn\">import</span> AnonymousUser<span class=\"p\">,</span> User\n<span class=\"kn\">from</span> <span class=\"nn\">django.test</span> <span class=\"kn\">import</span> RequestFactory<span class=\"p\">,</span> TestCase\n\n<span class=\"kn\">from</span> <span class=\"nn\">.views</span> <span class=\"kn\">import</span> MyView<span class=\"p\">,</span> my_view\n\n\n<span class=\"k\">class</span> <span class=\"nc\">SimpleTest</span><span class=\"p\">(</span>TestCase<span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">setUp</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Every test needs access to the request factory.</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span>factory <span class=\"o\">=</span> RequestFactory<span class=\"p\">()</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span>user <span class=\"o\">=</span> User<span class=\"o\">.</span>objects<span class=\"o\">.</span>create_user<span class=\"p\">(</span>\n            username<span class=\"o\">=</span><span class=\"s2\">&quot;jacob&quot;</span><span class=\"p\">,</span> email<span class=\"o\">=</span><span class=\"s2\">&quot;jacob@…&quot;</span><span class=\"p\">,</span> password<span class=\"o\">=</span><span class=\"s2\">&quot;top_secret&quot;</span>\n        <span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">test_details</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Create an instance of a GET request.</span>\n        request <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span>factory<span class=\"o\">.</span>get<span class=\"p\">(</span><span class=\"s2\">&quot;/customer/details&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Recall that middleware are not supported. You can simulate a</span>\n        <span class=\"c1\"># logged-in user by setting request.user manually.</span>\n        request<span class=\"o\">.</span>user <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span>user\n\n        <span class=\"c1\"># Or you can simulate an anonymous user by setting request.user to</span>\n        <span class=\"c1\"># an AnonymousUser instance.</span>\n        request<span class=\"o\">.</span>user <span class=\"o\">=</span> AnonymousUser<span class=\"p\">()</span>\n\n        <span class=\"c1\"># Test my_view() as if it were deployed at /customer/details</span>\n        response <span class=\"o\">=</span> my_view<span class=\"p\">(</span>request<span class=\"p\">)</span>\n        <span class=\"c1\"># Use this syntax for class-based views.</span>\n        response <span class=\"o\">=</span> MyView<span class=\"o\">.</span>as_view<span class=\"p\">()(</span>request<span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span>assertEqual<span class=\"p\">(</span>response<span class=\"o\">.</span>status_code<span class=\"p\">,</span> <span class=\"mi\">200</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"asyncrequestfactory\">\n<h3>AsyncRequestFactory<a class=\"heading-anchor\" href=\"#asyncrequestfactory\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.test.AsyncRequestFactory\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">AsyncRequestFactory</span><a class=\"heading-anchor\" href=\"#django.test.AsyncRequestFactory\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p><code class=\"docutils literal notranslate\">RequestFactory</code> skapar WSGI-liknande förfrågningar. Om du vill skapa ASGI-liknande förfrågningar, inklusive att ha ett korrekt ASGI <code class=\"docutils literal notranslate\">scope</code>, kan du istället använda <code class=\"docutils literal notranslate\">django.test.AsyncRequestFactory</code>.</p>\n<p>Den här klassen är direkt API-kompatibel med <code class=\"docutils literal notranslate\">RequestFactory</code>, med den enda skillnaden att den returnerar <code class=\"docutils literal notranslate\">ASGIRequest</code>-instanser i stället för <code class=\"docutils literal notranslate\">WSGIRequest</code>-instanser. Alla dess metoder är fortfarande synkrona callables.</p>\n<p>Godtyckliga nyckelordsargument i <code class=\"docutils literal notranslate\">defaults</code> läggs till direkt i ASGI-omfånget.</p>\n<aside class=\"version-note version-changed\" data-version=\"5.1\" role=\"note\">\n<p class=\"version-note-title\">Changed in Django 5.1</p><p>Parametern <code class=\"docutils literal notranslate\">query_params</code> har lagts till.</p>\n</aside>\n</section>\n</section>\n<section id=\"testing-class-based-views\">\n<h2>Testning av klassbaserade vyer<a class=\"heading-anchor\" href=\"#testing-class-based-views\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>För att kunna testa klassbaserade vyer utanför request/response-cykeln måste du se till att de är korrekt konfigurerade genom att anropa <a class=\"reference internal\" href=\"/sv/5.2/ref/class-based-views/base/#django.views.generic.base.View.setup\" title=\"django.views.generic.base.View.setup\"><code class=\"xref py py-meth docutils literal notranslate\">setup()</code></a> efter instantiering.</p>\n<p>Anta till exempel följande klassbaserade vy:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\">Vyer.py</code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.views.generic</span> <span class=\"kn\">import</span> TemplateView\n\n\n<span class=\"k\">class</span> <span class=\"nc\">HomeView</span><span class=\"p\">(</span>TemplateView<span class=\"p\">):</span>\n    template_name <span class=\"o\">=</span> <span class=\"s2\">&quot;myapp/home.html&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_context_data</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">**</span>kwargs<span class=\"p\">):</span>\n        kwargs<span class=\"p\">[</span><span class=\"s2\">&quot;environment&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;Production&quot;</span>\n        <span class=\"k\">return</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span>get_context_data<span class=\"p\">(</span><span class=\"o\">**</span>kwargs<span class=\"p\">)</span>\n</code></pre></figure>\n<p>Du kan testa metoden <code class=\"docutils literal notranslate\">get_context_data()</code> direkt genom att först instansiera vyn och sedan skicka en <code class=\"docutils literal notranslate\">request</code> till <code class=\"docutils literal notranslate\">setup()</code>, innan du fortsätter med testkoden:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\">tests.py</code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.test</span> <span class=\"kn\">import</span> RequestFactory<span class=\"p\">,</span> TestCase\n<span class=\"kn\">from</span> <span class=\"nn\">.views</span> <span class=\"kn\">import</span> HomeView\n\n\n<span class=\"k\">class</span> <span class=\"nc\">HomePageTest</span><span class=\"p\">(</span>TestCase<span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">test_environment_set_in_context</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        request <span class=\"o\">=</span> RequestFactory<span class=\"p\">()</span><span class=\"o\">.</span>get<span class=\"p\">(</span><span class=\"s2\">&quot;/&quot;</span><span class=\"p\">)</span>\n        view <span class=\"o\">=</span> HomeView<span class=\"p\">()</span>\n        view<span class=\"o\">.</span>setup<span class=\"p\">(</span>request<span class=\"p\">)</span>\n\n        context <span class=\"o\">=</span> view<span class=\"o\">.</span>get_context_data<span class=\"p\">()</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span>assertIn<span class=\"p\">(</span><span class=\"s2\">&quot;environment&quot;</span><span class=\"p\">,</span> context<span class=\"p\">)</span>\n</code></pre></figure>\n</section>\n<section id=\"tests-and-multiple-host-names\">\n<span id=\"topics-testing-advanced-multiple-hosts\"></span><h2>Tester och flera värdnamn<a class=\"heading-anchor\" href=\"#tests-and-multiple-host-names\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Inställningen <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-ALLOWED_HOSTS\"><code class=\"xref std std-setting docutils literal notranslate\">ALLOWED_HOSTS</code></a> valideras när tester körs. Detta gör att testklienten kan skilja mellan interna och externa webbadresser.</p>\n<p>Projekt som stöder multitenancy eller på annat sätt ändrar affärslogik baserat på begärans värd och använder anpassade värdnamn i tester måste inkludera dessa värdar i <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-ALLOWED_HOSTS\"><code class=\"xref std std-setting docutils literal notranslate\">ALLOWED_HOSTS</code></a>.</p>\n<p>Det första alternativet är att lägga till värdarna i din inställningsfil. Till exempel innehåller testsviten för docs.djangoproject.com följande:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.test</span> <span class=\"kn\">import</span> TestCase\n\n\n<span class=\"k\">class</span> <span class=\"nc\">SearchFormTestCase</span><span class=\"p\">(</span>TestCase<span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">test_empty_get</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        response <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span>client<span class=\"o\">.</span>get<span class=\"p\">(</span>\n            <span class=\"s2\">&quot;/en/dev/search/&quot;</span><span class=\"p\">,</span>\n            headers<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;host&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;docs.djangoproject.dev:8000&quot;</span><span class=\"p\">},</span>\n        <span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span>assertEqual<span class=\"p\">(</span>response<span class=\"o\">.</span>status_code<span class=\"p\">,</span> <span class=\"mi\">200</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>och inställningsfilen innehåller en lista över de domäner som stöds av projektet:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>ALLOWED_HOSTS <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;www.djangoproject.dev&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;docs.djangoproject.dev&quot;</span><span class=\"p\">,</span> <span class=\"o\">...</span><span class=\"p\">]</span>\n</code></pre></div>\n<p>Ett annat alternativ är att lägga till de värdar som krävs i <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-ALLOWED_HOSTS\"><code class=\"xref std std-setting docutils literal notranslate\">ALLOWED_HOSTS</code></a> med <a class=\"reference internal\" href=\"/sv/5.2/topics/testing/tools/#django.test.override_settings\" title=\"django.test.override_settings\"><code class=\"xref py py-meth docutils literal notranslate\">override_settings()</code></a> eller <a class=\"reference internal\" href=\"/sv/5.2/topics/testing/tools/#django.test.SimpleTestCase.modify_settings\" title=\"django.test.SimpleTestCase.modify_settings\"><code class=\"xref py py-attr docutils literal notranslate\">modify_settings()</code></a>. Det här alternativet kan vara att föredra i fristående appar som inte kan paketera sin egen inställningsfil eller för projekt där listan över domäner inte är statisk (t.ex. underdomäner för multitenancy). Du kan t.ex. skriva ett test för domänen <code class=\"docutils literal notranslate\">http://otherserver/</code> enligt följande:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.test</span> <span class=\"kn\">import</span> TestCase<span class=\"p\">,</span> override_settings\n\n\n<span class=\"k\">class</span> <span class=\"nc\">MultiDomainTestCase</span><span class=\"p\">(</span>TestCase<span class=\"p\">):</span>\n    <span class=\"nd\">@override_settings</span><span class=\"p\">(</span>ALLOWED_HOSTS<span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;otherserver&quot;</span><span class=\"p\">])</span>\n    <span class=\"k\">def</span> <span class=\"nf\">test_other_domain</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        response <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span>client<span class=\"o\">.</span>get<span class=\"p\">(</span><span class=\"s2\">&quot;http://otherserver/foo/bar/&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Om du avaktiverar <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-ALLOWED_HOSTS\"><code class=\"xref std std-setting docutils literal notranslate\">ALLOWED_HOSTS</code></a>-kontrollen (<code class=\"docutils literal notranslate\">ALLOWED_HOSTS = ['*']</code>) när du kör tester förhindrar du att testklienten ger ett användbart felmeddelande om du följer en omdirigering till en extern URL.</p>\n</section>\n<section id=\"tests-and-multiple-databases\">\n<span id=\"topics-testing-advanced-multidb\"></span><h2>Tester och flera databaser<a class=\"heading-anchor\" href=\"#tests-and-multiple-databases\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"testing-primary-replica-configurations\">\n<span id=\"topics-testing-primaryreplica\"></span><h3>Test av primär/replikakonfigurationer<a class=\"heading-anchor\" href=\"#testing-primary-replica-configurations\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Om du testar en konfiguration med flera databaser med replikering av primär/replika (kallas master/slave av vissa databaser), utgör denna strategi för att skapa testdatabaser ett problem. När testdatabaserna skapas kommer det inte att finnas någon replikering, och som ett resultat kommer data som skapats på den primära inte att ses på repliken.</p>\n<p>För att kompensera för detta tillåter Django dig att definiera att en databas är en <em>testspegel</em>. Tänk på följande (förenklade) exempel på databaskonfiguration:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>DATABASES <span class=\"o\">=</span> <span class=\"p\">{</span>\n    <span class=\"s2\">&quot;default&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;ENGINE&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.db.backends.mysql&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;NAME&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;myproject&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;HOST&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;dbprimary&quot;</span><span class=\"p\">,</span>\n        <span class=\"c1\"># ... plus some other settings</span>\n    <span class=\"p\">},</span>\n    <span class=\"s2\">&quot;replica&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;ENGINE&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.db.backends.mysql&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;NAME&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;myproject&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;HOST&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;dbreplica&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;TEST&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;MIRROR&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;default&quot;</span><span class=\"p\">,</span>\n        <span class=\"p\">},</span>\n        <span class=\"c1\"># ... plus some other settings</span>\n    <span class=\"p\">},</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n<p>I den här installationen har vi två databasservrar: <code class=\"docutils literal notranslate\">dbprimary</code>, som beskrivs av databasaliaset <code class=\"docutils literal notranslate\">default</code>, och <code class=\"docutils literal notranslate\">dbreplica</code> som beskrivs av aliaset <code class=\"docutils literal notranslate\">replica</code>. Som du kanske förväntar dig har <code class=\"docutils literal notranslate\">dbreplica</code> konfigurerats av databasadministratören som en läskopia av <code class=\"docutils literal notranslate\">dbprimary</code>, så under normal aktivitet kommer alla skrivningar till <code class=\"docutils literal notranslate\">default</code> att visas på <code class=\"docutils literal notranslate\">replica</code>.</p>\n<p>Om Django skapade två oberoende testdatabaser skulle detta bryta alla tester som förväntade sig att replikering skulle ske. Databasen <code class=\"docutils literal notranslate\">replica</code> har dock konfigurerats som en testspegel (med hjälp av testinställningen <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-TEST_MIRROR\"><code class=\"xref std std-setting docutils literal notranslate\">MIRROR</code></a>), vilket indikerar att <code class=\"docutils literal notranslate\">replica</code> under testning bör behandlas som en spegel av <code class=\"docutils literal notranslate\">default</code>.</p>\n<p>När testmiljön är konfigurerad kommer en testversion av <code class=\"docutils literal notranslate\">replica</code> <em>inte</em> att skapas. Istället kommer anslutningen till <code class=\"docutils literal notranslate\">replica</code> att omdirigeras så att den pekar på <code class=\"docutils literal notranslate\">default</code>. Som ett resultat kommer skrivningar till <code class=\"docutils literal notranslate\">default</code> att visas på <code class=\"docutils literal notranslate\">replica</code> - men eftersom de faktiskt är samma databas, inte för att det finns datareplikering mellan de två databaserna. Eftersom detta är beroende av transaktioner måste testerna använda <a class=\"reference internal\" href=\"/sv/5.2/topics/testing/tools/#django.test.TransactionTestCase\" title=\"django.test.TransactionTestCase\"><code class=\"xref py py-class docutils literal notranslate\">TransactionTestCase</code></a> istället för <a class=\"reference internal\" href=\"/sv/5.2/topics/testing/tools/#django.test.TestCase\" title=\"django.test.TestCase\"><code class=\"xref py py-class docutils literal notranslate\">TestCase</code></a>.</p>\n</section>\n<section id=\"controlling-creation-order-for-test-databases\">\n<span id=\"topics-testing-creation-dependencies\"></span><h3>Kontroll av skapandeordning för testdatabaser<a class=\"heading-anchor\" href=\"#controlling-creation-order-for-test-databases\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Som standard kommer Django att anta att alla databaser är beroende av <code class=\"docutils literal notranslate\">default</code>-databasen och därför alltid skapa <code class=\"docutils literal notranslate\">default</code>-databasen först. Det finns dock inga garantier för i vilken ordning andra databaser i din testkonfiguration skapas.</p>\n<p>Om din databaskonfiguration kräver en viss skapandeordning kan du ange vilka beroenden som finns med hjälp av testinställningen <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-TEST_DEPENDENCIES\"><code class=\"xref std std-setting docutils literal notranslate\">DEPENDENCIES</code></a>. Tänk på följande (förenklade) exempel på databaskonfiguration:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>DATABASES <span class=\"o\">=</span> <span class=\"p\">{</span>\n    <span class=\"s2\">&quot;default&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n        <span class=\"c1\"># ... db settings</span>\n        <span class=\"s2\">&quot;TEST&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;DEPENDENCIES&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;diamonds&quot;</span><span class=\"p\">],</span>\n        <span class=\"p\">},</span>\n    <span class=\"p\">},</span>\n    <span class=\"s2\">&quot;diamonds&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n        <span class=\"c1\"># ... db settings</span>\n        <span class=\"s2\">&quot;TEST&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;DEPENDENCIES&quot;</span><span class=\"p\">:</span> <span class=\"p\">[],</span>\n        <span class=\"p\">},</span>\n    <span class=\"p\">},</span>\n    <span class=\"s2\">&quot;clubs&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n        <span class=\"c1\"># ... db settings</span>\n        <span class=\"s2\">&quot;TEST&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;DEPENDENCIES&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;diamonds&quot;</span><span class=\"p\">],</span>\n        <span class=\"p\">},</span>\n    <span class=\"p\">},</span>\n    <span class=\"s2\">&quot;spades&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n        <span class=\"c1\"># ... db settings</span>\n        <span class=\"s2\">&quot;TEST&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;DEPENDENCIES&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;diamonds&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;hearts&quot;</span><span class=\"p\">],</span>\n        <span class=\"p\">},</span>\n    <span class=\"p\">},</span>\n    <span class=\"s2\">&quot;hearts&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n        <span class=\"c1\"># ... db settings</span>\n        <span class=\"s2\">&quot;TEST&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;DEPENDENCIES&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;diamonds&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;clubs&quot;</span><span class=\"p\">],</span>\n        <span class=\"p\">},</span>\n    <span class=\"p\">},</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n<p>I den här konfigurationen kommer databasen <code class=\"docutils literal notranslate\">diamonds</code> att skapas först, eftersom det är det enda databasaliaset utan beroenden. Aliasen <code class=\"docutils literal notranslate\">default</code> och <code class=\"docutils literal notranslate\">clubs</code> skapas därefter (även om ordningen för skapandet av detta par inte är garanterad), sedan <code class=\"docutils literal notranslate\">hearts</code> och slutligen <code class=\"docutils literal notranslate\">spades</code>.</p>\n<p>Om det finns några cirkulära beroenden i <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-TEST_DEPENDENCIES\"><code class=\"xref std std-setting docutils literal notranslate\">DEPENDENCIES</code></a>-definitionen, kommer ett <a class=\"reference internal\" href=\"/sv/5.2/ref/exceptions/#django.core.exceptions.ImproperlyConfigured\" title=\"django.core.exceptions.ImproperlyConfigured\"><code class=\"xref py py-exc docutils literal notranslate\">ImproperlyConfigured</code></a>-undantag att uppstå.</p>\n</section>\n</section>\n<section id=\"advanced-features-of-transactiontestcase\">\n<h2>Avancerade funktioner i <code class=\"docutils literal notranslate\">TransactionTestCase</code><a class=\"heading-anchor\" href=\"#advanced-features-of-transactiontestcase\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.test.TransactionTestCase.available_apps\">\n<span class=\"sig-prename descclassname\">TransactionTestCase.</span><span class=\"sig-name descname\">available_apps</span><a class=\"heading-anchor\" href=\"#django.test.TransactionTestCase.available_apps\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Varning</p>\n<p>Detta attribut är ett privat API. Det kan komma att ändras eller tas bort i framtiden utan en avvecklingsperiod, t.ex. för att tillgodose förändringar i applikationsladdning.</p>\n<p>Den används för att optimera Djangos egen testsvit, som innehåller hundratals modeller men inga relationer mellan modeller i olika applikationer.</p>\n</aside>\n<p>Som standard är <code class=\"docutils literal notranslate\">available_apps</code> inställd på <code class=\"docutils literal notranslate\">None</code>. Efter varje test anropar Django <a class=\"reference internal\" href=\"/sv/5.2/ref/django-admin/#django-admin-flush\"><code class=\"xref std std-djadmin docutils literal notranslate\">flush</code></a> för att återställa databastillståndet. Detta tömmer alla tabeller och sänder ut <a class=\"reference internal\" href=\"/sv/5.2/ref/signals/#django.db.models.signals.post_migrate\" title=\"django.db.models.signals.post_migrate\"><code class=\"xref py py-data docutils literal notranslate\">post_migrate</code></a>-signalen, som återskapar en innehållstyp och fyra behörigheter för varje modell. Denna operation blir dyr proportionellt mot antalet modeller.</p>\n<p>Om du ställer in <code class=\"docutils literal notranslate\">available_apps</code> till en lista över applikationer instrueras Django att bete sig som om endast modellerna från dessa applikationer var tillgängliga. Beteendet för <code class=\"docutils literal notranslate\">TransactionTestCase</code> ändras enligt följande:</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"/sv/5.2/ref/signals/#django.db.models.signals.post_migrate\" title=\"django.db.models.signals.post_migrate\"><code class=\"xref py py-data docutils literal notranslate\">post_migrate</code></a> avfyras före varje test för att skapa innehållstyper och behörigheter för varje modell i tillgängliga appar, ifall de saknas.</p></li>\n<li><p>Efter varje test tömmer Django endast tabeller som motsvarar modeller i tillgängliga appar. På databasnivå kan trunkering dock kaskadera till relaterade modeller i otillgängliga appar. Dessutom <a class=\"reference internal\" href=\"/sv/5.2/ref/signals/#django.db.models.signals.post_migrate\" title=\"django.db.models.signals.post_migrate\"><code class=\"xref py py-data docutils literal notranslate\">post_migrate</code></a> avfyras inte; det kommer att avfyras av nästa <code class=\"docutils literal notranslate\">TransactionTestCase</code>, efter att rätt uppsättning applikationer har valts.</p></li>\n</ul>\n<p>Eftersom databasen inte är helt tömd, om ett test skapar instanser av modeller som inte ingår i <code class=\"docutils literal notranslate\">available_apps</code>, kommer de att läcka och de kan orsaka att orelaterade tester misslyckas. Var försiktig med tester som använder sessioner; standardsessionsmotorn lagrar dem i databasen.</p>\n<p>Eftersom <a class=\"reference internal\" href=\"/sv/5.2/ref/signals/#django.db.models.signals.post_migrate\" title=\"django.db.models.signals.post_migrate\"><code class=\"xref py py-data docutils literal notranslate\">post_migrate</code></a> inte skickas ut efter rensning av databasen, är dess tillstånd efter ett <code class=\"docutils literal notranslate\">TransactionTestCase</code> inte detsamma som efter ett <code class=\"docutils literal notranslate\">TestCase</code>: det saknar de rader som skapats av lyssnare till <a class=\"reference internal\" href=\"/sv/5.2/ref/signals/#django.db.models.signals.post_migrate\" title=\"django.db.models.signals.post_migrate\"><code class=\"xref py py-data docutils literal notranslate\">post_migrate</code></a>. Med tanke på <a class=\"reference internal\" href=\"/sv/5.2/topics/testing/overview/#order-of-tests\"><span class=\"std std-ref\">ordningen i vilken tester utförs</span></a> är detta inte ett problem, förutsatt att antingen alla <code class=\"docutils literal notranslate\">TransactionTestCase</code> i en given testsvit deklarerar <code class=\"docutils literal notranslate\">available_apps</code>, eller ingen av dem.</p>\n<p><code class=\"docutils literal notranslate\">available_apps</code> är obligatoriskt i Djangos egen testsvit.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.test.TransactionTestCase.reset_sequences\">\n<span class=\"sig-prename descclassname\">TransactionTestCase.</span><span class=\"sig-name descname\">reset_sequences</span><a class=\"heading-anchor\" href=\"#django.test.TransactionTestCase.reset_sequences\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Om du ställer in <code class=\"docutils literal notranslate\">reset_sequences = True</code> på ett <code class=\"docutils literal notranslate\">TransactionTestCase</code> ser du till att sekvenserna alltid återställs innan testet körs:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">TestsThatDependsOnPrimaryKeySequences</span><span class=\"p\">(</span>TransactionTestCase<span class=\"p\">):</span>\n    reset_sequences <span class=\"o\">=</span> <span class=\"kc\">True</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">test_animal_pk</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        lion <span class=\"o\">=</span> Animal<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;lion&quot;</span><span class=\"p\">,</span> sound<span class=\"o\">=</span><span class=\"s2\">&quot;roar&quot;</span><span class=\"p\">)</span>\n        <span class=\"c1\"># lion.pk is guaranteed to always be 1</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span>assertEqual<span class=\"p\">(</span>lion<span class=\"o\">.</span>pk<span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Om du inte uttryckligen testar sekvensnummer för primärnycklar rekommenderas det att du inte hårdkodar värden för primärnycklar i tester.</p>\n<p>Om du använder <code class=\"docutils literal notranslate\">reset_sequences = True</code> kommer testet att gå långsammare, eftersom återställningen av primärnyckeln är en relativt dyr databasoperation.</p>\n</dd></dl>\n\n</section>\n<section id=\"enforce-running-test-classes-sequentially\">\n<span id=\"topics-testing-enforce-run-sequentially\"></span><h2>Genomför sekventiell körning av testklasser<a class=\"heading-anchor\" href=\"#enforce-running-test-classes-sequentially\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Om du har testklasser som inte kan köras parallellt (t.ex. för att de delar en gemensam resurs) kan du använda <code class=\"docutils literal notranslate\">django.test.testcases.SerializeMixin</code> för att köra dem sekventiellt. Denna mixin använder ett filsystem <code class=\"docutils literal notranslate\">lockfile</code>.</p>\n<p>Du kan t.ex. använda <code class=\"docutils literal notranslate\">__file__</code> för att bestämma att alla testklasser i samma fil som ärver från <code class=\"docutils literal notranslate\">SerializeMixin</code> ska köras sekventiellt:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">import</span> <span class=\"nn\">os</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">django.test</span> <span class=\"kn\">import</span> TestCase\n<span class=\"kn\">from</span> <span class=\"nn\">django.test.testcases</span> <span class=\"kn\">import</span> SerializeMixin\n\n\n<span class=\"k\">class</span> <span class=\"nc\">ImageTestCaseMixin</span><span class=\"p\">(</span>SerializeMixin<span class=\"p\">):</span>\n    lockfile <span class=\"o\">=</span> <span class=\"vm\">__file__</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">setUp</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span>filename <span class=\"o\">=</span> os<span class=\"o\">.</span>path<span class=\"o\">.</span>join<span class=\"p\">(</span>temp_storage_dir<span class=\"p\">,</span> <span class=\"s2\">&quot;my_file.png&quot;</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span>file <span class=\"o\">=</span> create_file<span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span>filename<span class=\"p\">)</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">RemoveImageTests</span><span class=\"p\">(</span>ImageTestCaseMixin<span class=\"p\">,</span> TestCase<span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">test_remove_image</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        os<span class=\"o\">.</span>remove<span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span>filename<span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span>assertFalse<span class=\"p\">(</span>os<span class=\"o\">.</span>path<span class=\"o\">.</span>exists<span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span>filename<span class=\"p\">))</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">ResizeImageTests</span><span class=\"p\">(</span>ImageTestCaseMixin<span class=\"p\">,</span> TestCase<span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">test_resize_image</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        resize_image<span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span>file<span class=\"p\">,</span> <span class=\"p\">(</span><span class=\"mi\">48</span><span class=\"p\">,</span> <span class=\"mi\">48</span><span class=\"p\">))</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span>assertEqual<span class=\"p\">(</span>get_image_size<span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span>file<span class=\"p\">),</span> <span class=\"p\">(</span><span class=\"mi\">48</span><span class=\"p\">,</span> <span class=\"mi\">48</span><span class=\"p\">))</span>\n</code></pre></div>\n</section>\n<section id=\"using-the-django-test-runner-to-test-reusable-applications\">\n<span id=\"testing-reusable-applications\"></span><h2>Använda Django Test Runner för att testa återanvändbara applikationer<a class=\"heading-anchor\" href=\"#using-the-django-test-runner-to-test-reusable-applications\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Om du skriver en <a class=\"reference internal\" href=\"/sv/5.2/intro/reusable-apps/\"><span class=\"doc\">återanvändbar applikation</span></a> kanske du vill använda Django test runner för att köra din egen testsvit och därmed dra nytta av Djangos testinfrastruktur.</p>\n<p>En vanlig metod är en <em>tests</em>-katalog bredvid applikationskoden, med följande struktur:</p>\n<div class=\"code-block\" data-language=\"text\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Text</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Text code\"><code>runtests.py\npolls/\n    __init__.py\n    models.py\n    ...\ntests/\n    __init__.py\n    models.py\n    test_settings.py\n    tests.py\n</code></pre></div>\n<p>Låt oss ta en titt på några av dessa filer:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\">runtests.py</code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"ch\">#!/usr/bin/env python</span>\n<span class=\"kn\">import</span> <span class=\"nn\">os</span>\n<span class=\"kn\">import</span> <span class=\"nn\">sys</span>\n\n<span class=\"kn\">import</span> <span class=\"nn\">django</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.conf</span> <span class=\"kn\">import</span> settings\n<span class=\"kn\">from</span> <span class=\"nn\">django.test.utils</span> <span class=\"kn\">import</span> get_runner\n\n<span class=\"k\">if</span> <span class=\"vm\">__name__</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;__main__&quot;</span><span class=\"p\">:</span>\n    os<span class=\"o\">.</span>environ<span class=\"p\">[</span><span class=\"s2\">&quot;DJANGO_SETTINGS_MODULE&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;tests.test_settings&quot;</span>\n    django<span class=\"o\">.</span>setup<span class=\"p\">()</span>\n    TestRunner <span class=\"o\">=</span> get_runner<span class=\"p\">(</span>settings<span class=\"p\">)</span>\n    test_runner <span class=\"o\">=</span> TestRunner<span class=\"p\">()</span>\n    failures <span class=\"o\">=</span> test_runner<span class=\"o\">.</span>run_tests<span class=\"p\">([</span><span class=\"s2\">&quot;tests&quot;</span><span class=\"p\">])</span>\n    sys<span class=\"o\">.</span>exit<span class=\"p\">(</span><span class=\"nb\">bool</span><span class=\"p\">(</span>failures<span class=\"p\">))</span>\n</code></pre></figure>\n<p>Detta är det skript som du anropar för att köra testsviten. Det ställer in Django-miljön, skapar testdatabasen och kör testerna.</p>\n<p>För tydlighetens skull innehåller detta exempel endast det absolut nödvändiga för att använda Djangos testlöpare. Du kanske vill lägga till kommandoradsalternativ för att kontrollera ordrikedom, skicka in specifika testetiketter som ska köras etc.</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\">tester/tester_settings.py</code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code>SECRET_KEY <span class=\"o\">=</span> <span class=\"s2\">&quot;fake-key&quot;</span>\nINSTALLED_APPS <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"s2\">&quot;tests&quot;</span><span class=\"p\">,</span>\n<span class=\"p\">]</span>\n</code></pre></figure>\n<p>Den här filen innehåller de <a class=\"reference internal\" href=\"/sv/5.2/topics/settings/\"><span class=\"doc\">Django-inställningar</span></a> som krävs för att köra appens tester.</p>\n<p>Även detta är ett minimalt exempel; dina tester kan kräva ytterligare inställningar för att köras.</p>\n<p>Eftersom paketet <em>tests</em> ingår i <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\">INSTALLED_APPS</code></a> när du kör dina tester, kan du definiera modeller som endast gäller tester i dess fil <code class=\"docutils literal notranslate\">models.py</code>.</p>\n</section>\n<section id=\"using-different-testing-frameworks\">\n<span id=\"other-testing-frameworks\"></span><h2>Användning av olika testramverk<a class=\"heading-anchor\" href=\"#using-different-testing-frameworks\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Det är uppenbart att <a class=\"reference external\" href=\"https://docs.python.org/3/library/unittest.html#module-unittest\" title=\"(in Python v3.14)\"><code class=\"xref py py-mod docutils literal notranslate\">unittest</code></a> inte är det enda testramverket i Python. Även om Django inte ger uttryckligt stöd för alternativa ramverk, ger det ett sätt att anropa tester som är konstruerade för ett alternativt ramverk som om de vore vanliga Django-tester.</p>\n<p>När du kör <code class=\"docutils literal notranslate\">./manage.py test</code> tittar Django på inställningen <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-TEST_RUNNER\"><code class=\"xref std std-setting docutils literal notranslate\">TEST_RUNNER</code></a> för att avgöra vad som ska göras. Som standard pekar <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-TEST_RUNNER\"><code class=\"xref std std-setting docutils literal notranslate\">TEST_RUNNER</code></a> på <code class=\"docutils literal notranslate\">'django.test.runner.DiscoverRunner'</code>. Den här klassen definierar Djangos standardtestbeteende. Detta beteende innebär:</p>\n<ol class=\"arabic simple\">\n<li><p>Utföra global förtestinställning.</p></li>\n<li><p>Letar efter tester i alla filer under den aktuella katalogen vars namn matchar mönstret <code class=\"docutils literal notranslate\">test*.py</code>.</p></li>\n<li><p>Skapa testdatabaserna.</p></li>\n<li><p>Kör <code class=\"docutils literal notranslate\">migrate</code> för att installera modeller och initialdata i testdatabaserna.</p></li>\n<li><p>Kör <a class=\"reference internal\" href=\"/sv/5.2/topics/checks/\"><span class=\"doc\">systemkontroller</span></a>.</p></li>\n<li><p>Kör de tester som hittades.</p></li>\n<li><p>Förstöring av testdatabaserna.</p></li>\n<li><p>Utföra global nedmontering efter test.</p></li>\n</ol>\n<p>Om du definierar din egen testlöparklass och pekar <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-TEST_RUNNER\"><code class=\"xref std std-setting docutils literal notranslate\">TEST_RUNNER</code></a> på den klassen, kommer Django att köra din testlöpare när du kör <code class=\"docutils literal notranslate\">./manage.py test</code>. På så sätt är det möjligt att använda valfritt testramverk som kan köras från Python-kod, eller att modifiera Djangos testkörningsprocess för att uppfylla de testkrav du kan ha.</p>\n<section id=\"defining-a-test-runner\">\n<span id=\"topics-testing-test-runner\"></span><h3>Definiera en testlöpare<a class=\"heading-anchor\" href=\"#defining-a-test-runner\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>En testlöpare är en klass som definierar en metod <code class=\"docutils literal notranslate\">run_tests()</code>. Django levereras med en <code class=\"docutils literal notranslate\">DiscoverRunner</code>-klass som definierar standardtestbeteendet för Django. Denna klass definierar ingångspunkten <code class=\"docutils literal notranslate\">run_tests()</code>, plus ett urval av andra metoder som används av <code class=\"docutils literal notranslate\">run_tests()</code> för att ställa in, köra och riva ner testsviten.</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.test.runner.DiscoverRunner\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">DiscoverRunner</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">pattern<span class=\"o\">=</span><span class=\"default_value\">'test*.py'</span></em>, <em class=\"sig-param\">top_level<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">verbosity<span class=\"o\">=</span><span class=\"default_value\">1</span></em>, <em class=\"sig-param\">interactive<span class=\"o\">=</span><span class=\"default_value\">True</span></em>, <em class=\"sig-param\">failfast<span class=\"o\">=</span><span class=\"default_value\">False</span></em>, <em class=\"sig-param\">keepdb<span class=\"o\">=</span><span class=\"default_value\">False</span></em>, <em class=\"sig-param\">reverse<span class=\"o\">=</span><span class=\"default_value\">False</span></em>, <em class=\"sig-param\">debug_mode<span class=\"o\">=</span><span class=\"default_value\">False</span></em>, <em class=\"sig-param\">debug_sql<span class=\"o\">=</span><span class=\"default_value\">False</span></em>, <em class=\"sig-param\">parallel<span class=\"o\">=</span><span class=\"default_value\">0</span></em>, <em class=\"sig-param\">tags<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">exclude_tags<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">test_name_patterns<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">pdb<span class=\"o\">=</span><span class=\"default_value\">False</span></em>, <em class=\"sig-param\">buffer<span class=\"o\">=</span><span class=\"default_value\">False</span></em>, <em class=\"sig-param\">enable_faulthandler<span class=\"o\">=</span><span class=\"default_value\">True</span></em>, <em class=\"sig-param\">timing<span class=\"o\">=</span><span class=\"default_value\">True</span></em>, <em class=\"sig-param\">shuffle<span class=\"o\">=</span><span class=\"default_value\">False</span></em>, <em class=\"sig-param\">logger<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">durations<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.runner.DiscoverRunner\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><code class=\"docutils literal notranslate\">DiscoverRunner</code> kommer att söka efter tester i alla filer som matchar <code class=\"docutils literal notranslate\">mönstret</code>.</p>\n<p><code class=\"docutils literal notranslate\">top_level</code> kan användas för att ange den katalog som innehåller dina Python-moduler på högsta nivå. Vanligtvis kan Django räkna ut detta automatiskt, så det är inte nödvändigt att ange detta alternativ. Om det anges bör det i allmänhet vara den katalog som innehåller din <code class=\"docutils literal notranslate\">manage.py</code>-fil.</p>\n<p><code class=\"docutils literal notranslate\">verbosity</code> bestämmer hur mycket meddelande- och felsökningsinformation som ska skrivas ut till konsolen; <code class=\"docutils literal notranslate\">0</code> är ingen utdata, <code class=\"docutils literal notranslate\">1</code> är normal utdata och <code class=\"docutils literal notranslate\">2</code> är verbose utdata.</p>\n<p>Om <code class=\"docutils literal notranslate\">interactive</code> är <code class=\"docutils literal notranslate\">True</code> har testsviten behörighet att be användaren om instruktioner när testsviten körs. Ett exempel på detta beteende är att be om tillstånd att ta bort en befintlig testdatabas. Om <code class=\"docutils literal notranslate\">interactive</code> är <code class=\"docutils literal notranslate\">False</code> måste testsviten kunna köras utan någon manuell inblandning.</p>\n<p>Om <code class=\"docutils literal notranslate\">failfast</code> är <code class=\"docutils literal notranslate\">True</code> kommer testsviten att sluta köras efter att det första testfelet har upptäckts.</p>\n<p>Om <code class=\"docutils literal notranslate\">keepdb</code> är <code class=\"docutils literal notranslate\">True</code> kommer testsviten att använda den befintliga databasen, eller skapa en om det behövs. Om <code class=\"docutils literal notranslate\">False</code> kommer en ny databas att skapas och användaren uppmanas att ta bort den befintliga databasen, om en sådan finns.</p>\n<p>Om <code class=\"docutils literal notranslate\">reverse</code> är <code class=\"docutils literal notranslate\">True</code> kommer testfallen att exekveras i motsatt ordning. Detta kan vara användbart för att felsöka tester som inte är ordentligt isolerade och som har bieffekter. <a class=\"reference internal\" href=\"/sv/5.2/topics/testing/overview/#order-of-tests\"><span class=\"std std-ref\">Gruppering efter testklass</span></a> bevaras när detta alternativ används. Det här alternativet kan användas tillsammans med <code class=\"docutils literal notranslate\">--shuffle</code> för att vända ordningen för ett visst slumpmässigt frö.</p>\n<p><code class=\"docutils literal notranslate\">debug_mode</code> anger vad inställningen <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\">DEBUG</code></a> ska vara inställd på innan tester körs.</p>\n<p><code class=\"docutils literal notranslate\">parallel</code> anger antalet processer.  Om <code class=\"docutils literal notranslate\">parallel</code> är större än <code class=\"docutils literal notranslate\">1</code> kommer testsviten att köras i <code class=\"docutils literal notranslate\">parallella</code> processer. Om det finns färre testfallsklasser än konfigurerade processer, kommer Django att minska antalet processer i enlighet med detta. Varje process får sin egen databas. Detta alternativ kräver tredjeparts <code class=\"docutils literal notranslate\">tblib</code>-paketet för att visa spårningar korrekt.</p>\n<p><code class=\"docutils literal notranslate\">tags</code> kan användas för att ange en uppsättning <a class=\"reference internal\" href=\"/sv/5.2/topics/testing/tools/#topics-tagging-tests\"><span class=\"std std-ref\">tags för filtrering av tester</span></a>. Kan kombineras med <code class=\"docutils literal notranslate\">exclude_tags</code>.</p>\n<p><code class=\"docutils literal notranslate\">exclude_tags</code> kan användas för att ange en uppsättning <a class=\"reference internal\" href=\"/sv/5.2/topics/testing/tools/#topics-tagging-tests\"><span class=\"std std-ref\">taggar för att utesluta tester</span></a>. Kan kombineras med <code class=\"docutils literal notranslate\">tags</code>.</p>\n<p>Om <code class=\"docutils literal notranslate\">debug_sql</code> är <code class=\"docutils literal notranslate\">True</code>, kommer misslyckade testfall att mata ut SQL-frågor som loggas till <a class=\"reference internal\" href=\"/sv/5.2/ref/logging/#django-db-logger\"><span class=\"std std-ref\">django.db.backends logger</span></a> samt spårningen. Om <code class=\"docutils literal notranslate\">verbosity</code> är <code class=\"docutils literal notranslate\">2</code>, kommer frågor i alla tester att matas ut.</p>\n<p><code class=\"docutils literal notranslate\">test_name_patterns</code> kan användas för att ange en uppsättning mönster för att filtrera testmetoder och klasser efter deras namn.</p>\n<p>Om <code class=\"docutils literal notranslate\">pdb</code> är <code class=\"docutils literal notranslate\">True</code> kommer en debugger (<code class=\"docutils literal notranslate\">pdb</code> eller <code class=\"docutils literal notranslate\">ipdb</code>) att startas vid varje fel eller misslyckande i testet.</p>\n<p>Om <code class=\"docutils literal notranslate\">buffer</code> är <code class=\"docutils literal notranslate\">True</code>, kommer utdata från godkända tester att kasseras.</p>\n<p>Om <code class=\"docutils literal notranslate\">enable_faulthandler</code> är <code class=\"docutils literal notranslate\">True</code>, kommer <a class=\"reference external\" href=\"https://docs.python.org/3/library/faulthandler.html#module-faulthandler\" title=\"(in Python v3.14)\"><code class=\"xref py py-mod docutils literal notranslate\">faulthandler</code></a> att aktiveras.</p>\n<p>Om <code class=\"docutils literal notranslate\">timing</code> är <code class=\"docutils literal notranslate\">True</code> visas testtider, inklusive databasinstallation och total körtid.</p>\n<p>Om <code class=\"docutils literal notranslate\">shuffle</code> är ett heltal kommer testfallen att blandas i en slumpmässig ordning före exekvering, med heltalet som slumpmässigt frö. Om <code class=\"docutils literal notranslate\">shuffle</code> är <code class=\"docutils literal notranslate\">None</code> kommer fröet att genereras slumpmässigt. I båda fallen kommer fröet att loggas och sättas till <code class=\"docutils literal notranslate\">self.shuffle_seed</code> innan testerna körs. Detta alternativ kan användas för att hjälpa till att upptäcka tester som inte är ordentligt isolerade. <a class=\"reference internal\" href=\"/sv/5.2/topics/testing/overview/#order-of-tests\"><span class=\"std std-ref\">Gruppering efter testklass</span></a> bevaras när detta alternativ används.</p>\n<p><code class=\"docutils literal notranslate\">logger</code> kan användas för att skicka ett Python <a class=\"reference external\" href=\"https://docs.python.org/3/library/logging.html#logger\" title=\"(in Python v3.14)\"><span class=\"xref std std-ref\">Logger-objekt</span></a>. Om det anges kommer loggern att användas för att logga meddelanden istället för att skriva ut dem till konsolen. Logger-objektet kommer att respektera sin loggningsnivå snarare än <code class=\"docutils literal notranslate\">verbosity</code>.</p>\n<p><code class=\"docutils literal notranslate\">durations</code> kommer att visa en lista över de N långsammaste testfallen. Om du ställer in detta alternativ på <code class=\"docutils literal notranslate\">0</code> kommer varaktigheten för alla tester att visas. Kräver Python 3.12+.</p>\n<p>Django kan, från tid till annan, utöka testlöparens möjligheter genom att lägga till nya argument. Deklarationen <code class=\"docutils literal notranslate\">**kwargs</code> tillåter denna expansion. Om du underklassar <code class=\"docutils literal notranslate\">DiscoverRunner</code> eller skriver din egen testlöpare, se till att den accepterar <code class=\"docutils literal notranslate\">**kwargs</code>.</p>\n<p>Din testlöpare kan också definiera ytterligare kommandoradsalternativ. Skapa eller åsidosätt en klassmetod <code class=\"docutils literal notranslate\">add_arguments(cls, parser)</code> och lägg till anpassade argument genom att anropa <code class=\"docutils literal notranslate\">parser.add_argument()</code> inuti metoden, så att kommandot <a class=\"reference internal\" href=\"/sv/5.2/ref/django-admin/#django-admin-test\"><code class=\"xref std std-djadmin docutils literal notranslate\">test</code></a> kan använda dessa argument.</p>\n</dd></dl>\n\n<section id=\"attributes\">\n<h4>Attribut<a class=\"heading-anchor\" href=\"#attributes\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.test.runner.DiscoverRunner.test_suite\">\n<span class=\"sig-prename descclassname\">DiscoverRunner.</span><span class=\"sig-name descname\">test_suite</span><a class=\"heading-anchor\" href=\"#django.test.runner.DiscoverRunner.test_suite\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Den klass som används för att bygga testsviten. Som standard är den inställd på <code class=\"docutils literal notranslate\">unittest.TestSuite</code>. Detta kan åsidosättas om du vill implementera en annan logik för att samla in tester.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.test.runner.DiscoverRunner.test_runner\">\n<span class=\"sig-prename descclassname\">DiscoverRunner.</span><span class=\"sig-name descname\">test_runner</span><a class=\"heading-anchor\" href=\"#django.test.runner.DiscoverRunner.test_runner\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Detta är klassen för den testlöpare på låg nivå som används för att köra de enskilda testerna och formatera resultaten. Som standard är den inställd på <code class=\"docutils literal notranslate\">unittest.TextTestRunner</code>. Trots den olyckliga likheten i namngivningskonventioner är detta inte samma typ av klass som <code class=\"docutils literal notranslate\">DiscoverRunner</code>, som täcker en bredare uppsättning ansvarsområden. Du kan åsidosätta detta attribut för att ändra hur tester körs och rapporteras.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.test.runner.DiscoverRunner.test_loader\">\n<span class=\"sig-prename descclassname\">DiscoverRunner.</span><span class=\"sig-name descname\">test_loader</span><a class=\"heading-anchor\" href=\"#django.test.runner.DiscoverRunner.test_loader\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Det här är klassen som laddar tester, oavsett om det är från TestCases eller moduler eller på annat sätt, och buntar ihop dem till testsviter som köraren kan köra. Som standard är den inställd på <code class=\"docutils literal notranslate\">unittest.defaultTestLoader</code>. Du kan åsidosätta detta attribut om dina tester kommer att laddas på ovanliga sätt.</p>\n</dd></dl>\n\n</section>\n<section id=\"methods\">\n<h4>Metoder<a class=\"heading-anchor\" href=\"#methods\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.runner.DiscoverRunner.run_tests\">\n<span class=\"sig-prename descclassname\">DiscoverRunner.</span><span class=\"sig-name descname\">run_tests</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">test_labels</em>, <em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.runner.DiscoverRunner.run_tests\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Kör testsviten.</p>\n<p>med <code class=\"docutils literal notranslate\">test_labels</code> kan du ange vilka tester som ska köras och det finns stöd för flera format (se <a class=\"reference internal\" href=\"#django.test.runner.DiscoverRunner.build_suite\" title=\"django.test.runner.DiscoverRunner.build_suite\"><code class=\"xref py py-meth docutils literal notranslate\">DiscoverRunner.build_suite()</code></a> för en lista över format som stöds).</p>\n<p>Denna metod bör returnera antalet tester som misslyckades.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.runner.DiscoverRunner.add_arguments\">\n<em class=\"property\"><span class=\"k\">classmethod</span> </em><span class=\"sig-prename descclassname\">DiscoverRunner.</span><span class=\"sig-name descname\">add_arguments</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">parser</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.runner.DiscoverRunner.add_arguments\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Åsidosätt denna klassmetod för att lägga till anpassade argument som accepteras av hanteringskommandot <a class=\"reference internal\" href=\"/sv/5.2/ref/django-admin/#django-admin-test\"><code class=\"xref std std-djadmin docutils literal notranslate\">test</code></a>. Se <a class=\"reference external\" href=\"https://docs.python.org/3/library/argparse.html#argparse.ArgumentParser.add_argument\" title=\"(in Python v3.14)\"><code class=\"xref py py-meth docutils literal notranslate\">argparse.ArgumentParser.add_argument()</code></a> för information om hur du lägger till argument till en parser.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.runner.DiscoverRunner.setup_test_environment\">\n<span class=\"sig-prename descclassname\">DiscoverRunner.</span><span class=\"sig-name descname\">setup_test_environment</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.runner.DiscoverRunner.setup_test_environment\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Ställer in testmiljön genom att anropa <a class=\"reference internal\" href=\"#django.test.utils.setup_test_environment\" title=\"django.test.utils.setup_test_environment\"><code class=\"xref py py-func docutils literal notranslate\">setup_test_environment()</code></a> och ställa in <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\">DEBUG</code></a> till <code class=\"docutils literal notranslate\">self.debug_mode</code> (standard är <code class=\"docutils literal notranslate\">False</code>).</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.runner.DiscoverRunner.build_suite\">\n<span class=\"sig-prename descclassname\">DiscoverRunner.</span><span class=\"sig-name descname\">build_suite</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">test_labels<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.runner.DiscoverRunner.build_suite\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Konstruerar en testsvit som matchar de testetiketter som anges.</p>\n<p><code class=\"docutils literal notranslate\">test_labels</code> är en lista med strängar som beskriver de tester som ska köras. En testetikett kan ha en av fyra former:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">path.to.test_module.TestCase.test_method</code> – Kör en enda testmetod i en testfallsklass.</p></li>\n<li><p><code class=\"docutils literal notranslate\">path.to.test_module.TestCase</code> – Kör alla testmetoder i ett testfall.</p></li>\n<li><p><code class=\"docutils literal notranslate\">path.to.module</code> – Söker efter och kör alla tester i det angivna Python-paketet eller -modulen.</p></li>\n<li><p><code class=\"docutils literal notranslate\">path/to/directory</code> – Sök efter och kör alla tester under den angivna katalogen.</p></li>\n</ul>\n<p>Om <code class=\"docutils literal notranslate\">test_labels</code> har värdet <code class=\"docutils literal notranslate\">None</code> kommer testlöparen att söka efter tester i alla filer under den aktuella katalogen vars namn matchar dess <code class=\"docutils literal notranslate\">mönster</code> (se ovan).</p>\n<p>Returnerar en instans av <code class=\"docutils literal notranslate\">TestSuite</code> som är redo att köras.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.runner.DiscoverRunner.setup_databases\">\n<span class=\"sig-prename descclassname\">DiscoverRunner.</span><span class=\"sig-name descname\">setup_databases</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.runner.DiscoverRunner.setup_databases\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Skapar testdatabaserna genom att anropa <a class=\"reference internal\" href=\"#django.test.utils.setup_databases\" title=\"django.test.utils.setup_databases\"><code class=\"xref py py-func docutils literal notranslate\">setup_databases()</code></a>.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.runner.DiscoverRunner.run_checks\">\n<span class=\"sig-prename descclassname\">DiscoverRunner.</span><span class=\"sig-name descname\">run_checks</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">databases</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.runner.DiscoverRunner.run_checks\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Kör <a class=\"reference internal\" href=\"/sv/5.2/topics/checks/\"><span class=\"doc\">systemkontroller</span></a> på testets <code class=\"docutils literal notranslate\">databaser</code>.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.runner.DiscoverRunner.run_suite\">\n<span class=\"sig-prename descclassname\">DiscoverRunner.</span><span class=\"sig-name descname\">run_suite</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">suite</em>, <em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.runner.DiscoverRunner.run_suite\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Kör testsviten.</p>\n<p>Returnerar resultatet av körningen av testsviten.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.runner.DiscoverRunner.get_test_runner_kwargs\">\n<span class=\"sig-prename descclassname\">DiscoverRunner.</span><span class=\"sig-name descname\">get_test_runner_kwargs</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.runner.DiscoverRunner.get_test_runner_kwargs\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Returnerar nyckelordsargumenten för att instansiera <code class=\"docutils literal notranslate\">DiscoverRunner.test_runner</code> med.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.runner.DiscoverRunner.teardown_databases\">\n<span class=\"sig-prename descclassname\">DiscoverRunner.</span><span class=\"sig-name descname\">teardown_databases</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">old_config</em>, <em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.runner.DiscoverRunner.teardown_databases\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Förstör testdatabaserna och återställer villkoren före testet genom att anropa <a class=\"reference internal\" href=\"#django.test.utils.teardown_databases\" title=\"django.test.utils.teardown_databases\"><code class=\"xref py py-func docutils literal notranslate\">teardown_databases()</code></a>.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.runner.DiscoverRunner.teardown_test_environment\">\n<span class=\"sig-prename descclassname\">DiscoverRunner.</span><span class=\"sig-name descname\">teardown_test_environment</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.runner.DiscoverRunner.teardown_test_environment\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Återställer miljön före testet.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.runner.DiscoverRunner.suite_result\">\n<span class=\"sig-prename descclassname\">DiscoverRunner.</span><span class=\"sig-name descname\">suite_result</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">suite</em>, <em class=\"sig-param\">result</em>, <em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.runner.DiscoverRunner.suite_result\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Beräknar och returnerar en returkod baserad på en testsvit och resultatet från denna testsvit.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.runner.DiscoverRunner.log\">\n<span class=\"sig-prename descclassname\">DiscoverRunner.</span><span class=\"sig-name descname\">log</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">msg</em>, <em class=\"sig-param\">level<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.runner.DiscoverRunner.log\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Om en <code class=\"docutils literal notranslate\">logger</code> är inställd, loggas meddelandet på den angivna heltalsnivån för <a class=\"reference external\" href=\"https://docs.python.org/3/library/logging.html#levels\">loggning</a> (t.ex. <code class=\"docutils literal notranslate\">logging.DEBUG</code>, <code class=\"docutils literal notranslate\">logging.INFO</code> eller <code class=\"docutils literal notranslate\">logging.WARNING</code>). Annars skrivs meddelandet ut till konsolen, med hänsyn till den aktuella <code class=\"docutils literal notranslate\">verbosity</code>. Exempelvis skrivs inget meddelande ut om <code class=\"docutils literal notranslate\">verbosity</code> är 0, <code class=\"docutils literal notranslate\">INFO</code> och högre skrivs ut om <code class=\"docutils literal notranslate\">verbosity</code> är minst 1 och <code class=\"docutils literal notranslate\">DEBUG</code> skrivs ut om den är minst 2. Standardvärdet för <code class=\"docutils literal notranslate\">level</code> är <code class=\"docutils literal notranslate\">logging.INFO</code>.</p>\n</dd></dl>\n\n</section>\n</section>\n<section id=\"testing-utilities\">\n<h3>Test av verktyg<a class=\"heading-anchor\" href=\"#testing-utilities\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<section id=\"module-django.test.utils\">\n<span id=\"django-test-utils\"></span><h4><code class=\"docutils literal notranslate\">django.test.utils</code><a class=\"heading-anchor\" href=\"#module-django.test.utils\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>För att hjälpa till att skapa din egen testlöpare tillhandahåller Django ett antal verktygsmetoder i modulen <code class=\"docutils literal notranslate\">django.test.utils</code>.</p>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.test.utils.setup_test_environment\">\n<span class=\"sig-name descname\">setup_test_environment</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">debug<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.utils.setup_test_environment\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Utför globala inställningar före test, t.ex. installation av instrument för mallrenderingssystemet och konfigurering av dummy-utkorgen för e-post.</p>\n<p>Om <code class=\"docutils literal notranslate\">debug</code> inte är <code class=\"docutils literal notranslate\">None</code>, uppdateras <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\">DEBUG</code></a>-inställningen till dess värde.</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.test.utils.teardown_test_environment\">\n<span class=\"sig-name descname\">teardown_test_environment</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.utils.teardown_test_environment\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Utför global nedmontering efter test, t.ex. avlägsnande av instrument från mallsystemet och återställning av normala e-posttjänster.</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.test.utils.setup_databases\">\n<span class=\"sig-name descname\">setup_databases</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">verbosity</em>, <em class=\"sig-param\">interactive</em>, <em class=\"sig-param\"><span class=\"keyword-only-separator o\"><abbr title=\"Keyword-only parameters separator (PEP 3102)\">*</abbr></span></em>, <em class=\"sig-param\">time_keeper<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">keepdb<span class=\"o\">=</span><span class=\"default_value\">False</span></em>, <em class=\"sig-param\">debug_sql<span class=\"o\">=</span><span class=\"default_value\">False</span></em>, <em class=\"sig-param\">parallel<span class=\"o\">=</span><span class=\"default_value\">0</span></em>, <em class=\"sig-param\">aliases<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">serialized_aliases<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.utils.setup_databases\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Skapar testdatabaserna.</p>\n<p>Returnerar en datastruktur som innehåller tillräckligt med detaljer för att ångra de ändringar som har gjorts. Dessa data kommer att tillhandahållas till <a class=\"reference internal\" href=\"#django.test.utils.teardown_databases\" title=\"django.test.utils.teardown_databases\"><code class=\"xref py py-func docutils literal notranslate\">teardown_databases()</code></a>-funktionen när testningen är avslutad.</p>\n<p>Argumentet <code class=\"docutils literal notranslate\">aliases</code> bestämmer vilka <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-DATABASES\"><code class=\"xref std std-setting docutils literal notranslate\">DATABASES</code></a>-alias som testdatabaserna ska konfigureras för. Om det inte anges, är standardvärdet alla <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-DATABASES\"><code class=\"xref std std-setting docutils literal notranslate\">DATABASES</code></a> alias.</p>\n<p>Argumentet <code class=\"docutils literal notranslate\">serialized_aliases</code> bestämmer vilken delmängd av <code class=\"docutils literal notranslate\">aliases</code> testdatabaser som ska ha sitt tillstånd serialiserat för att möjliggöra användning av funktionen <a class=\"reference internal\" href=\"/sv/5.2/topics/testing/overview/#test-case-serialized-rollback\"><span class=\"std std-ref\">serialized_rollback</span></a>. Om det inte anges är standardvärdet <code class=\"docutils literal notranslate\">aliases</code>.</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.test.utils.teardown_databases\">\n<span class=\"sig-name descname\">teardown_databases</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">old_config</em>, <em class=\"sig-param\">parallel<span class=\"o\">=</span><span class=\"default_value\">0</span></em>, <em class=\"sig-param\">keepdb<span class=\"o\">=</span><span class=\"default_value\">False</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.utils.teardown_databases\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Förstör testdatabaserna och återställer förhållandena före testet.</p>\n<p><code class=\"docutils literal notranslate\">old_config</code> är en datastruktur som definierar de ändringar i databaskonfigurationen som måste återställas. Det är returvärdet för metoden <a class=\"reference internal\" href=\"#django.test.utils.setup_databases\" title=\"django.test.utils.setup_databases\"><code class=\"xref py py-meth docutils literal notranslate\">setup_databases()</code></a>.</p>\n</dd></dl>\n\n</section>\n<section id=\"django-db-connection-creation\">\n<h4><code class=\"docutils literal notranslate\">django.db.connection.creation</code><a class=\"heading-anchor\" href=\"#django-db-connection-creation\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Skapandemodulen för databasens backend innehåller också några verktyg som kan vara användbara under testning.</p>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.db.connection.creation.create_test_db\">\n<span class=\"sig-name descname\">create_test_db</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">verbosity<span class=\"o\">=</span><span class=\"default_value\">1</span></em>, <em class=\"sig-param\">autoclobber<span class=\"o\">=</span><span class=\"default_value\">False</span></em>, <em class=\"sig-param\">serialize<span class=\"o\">=</span><span class=\"default_value\">True</span></em>, <em class=\"sig-param\">keepdb<span class=\"o\">=</span><span class=\"default_value\">False</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.connection.creation.create_test_db\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Skapar en ny testdatabas och kör <code class=\"docutils literal notranslate\">migrate</code> mot den.</p>\n<p><code class=\"docutils literal notranslate\">verbosity</code> har samma beteende som i <code class=\"docutils literal notranslate\">run_tests()</code>.</p>\n<p><code class=\"docutils literal notranslate\">autoclobber</code> beskriver det beteende som kommer att uppstå om en databas med samma namn som testdatabasen upptäcks:</p>\n<ul class=\"simple\">\n<li><p>Om <code class=\"docutils literal notranslate\">autoclobber</code> är <code class=\"docutils literal notranslate\">False</code> kommer användaren att bli ombedd att godkänna att den befintliga databasen förstörs. <code class=\"docutils literal notranslate\">sys.exit</code> anropas om användaren inte godkänner detta.</p></li>\n<li><p>Om <code class=\"docutils literal notranslate\">autoclobber</code> är <code class=\"docutils literal notranslate\">True</code> kommer databasen att förstöras utan att användaren tillfrågas.</p></li>\n</ul>\n<p><code class=\"docutils literal notranslate\">serialize</code> avgör om Django serialiserar databasen till en JSON-sträng i minnet innan tester körs (används för att återställa databasens tillstånd mellan tester om du inte har transaktioner). Du kan ställa in detta till <code class=\"docutils literal notranslate\">False</code> för att påskynda skapandetiden om du inte har några testklasser med <a class=\"reference internal\" href=\"/sv/5.2/topics/testing/overview/#test-case-serialized-rollback\"><span class=\"std std-ref\">serialized_rollback=True</span></a>.</p>\n<p><code class=\"docutils literal notranslate\">keepdb</code> avgör om testkörningen ska använda en befintlig databas eller skapa en ny. Om <code class=\"docutils literal notranslate\">True</code> används den befintliga databasen, eller skapas om den inte finns. Om <code class=\"docutils literal notranslate\">False</code> skapas en ny databas och användaren uppmanas att ta bort den befintliga databasen, om en sådan finns.</p>\n<p>Returnerar namnet på den testdatabas som skapades.</p>\n<p><code class=\"docutils literal notranslate\">create_test_db()</code> har som bieffekt att värdet för <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-NAME\"><code class=\"xref std std-setting docutils literal notranslate\">NAME</code></a> i <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-DATABASES\"><code class=\"xref std std-setting docutils literal notranslate\">DATABASES</code></a> ändras så att det motsvarar namnet på testdatabasen.</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.db.connection.creation.destroy_test_db\">\n<span class=\"sig-name descname\">destroy_test_db</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">old_database_name</em>, <em class=\"sig-param\">verbosity<span class=\"o\">=</span><span class=\"default_value\">1</span></em>, <em class=\"sig-param\">keepdb<span class=\"o\">=</span><span class=\"default_value\">False</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.connection.creation.destroy_test_db\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Förstör databasen vars namn är värdet för <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-NAME\"><code class=\"xref std std-setting docutils literal notranslate\">NAME</code></a> i <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-DATABASES\"><code class=\"xref std std-setting docutils literal notranslate\">DATABASES</code></a> och anger värdet för <code class=\"docutils literal notranslate\">old_database_name</code> i <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-NAME\"><code class=\"xref std std-setting docutils literal notranslate\">NAME</code></a>.</p>\n<p>Argumentet <code class=\"docutils literal notranslate\">verbosity</code> har samma beteende som för <a class=\"reference internal\" href=\"#django.test.runner.DiscoverRunner\" title=\"django.test.runner.DiscoverRunner\"><code class=\"xref py py-class docutils literal notranslate\">DiscoverRunner</code></a>.</p>\n<p>Om argumentet <code class=\"docutils literal notranslate\">keepdb</code> är <code class=\"docutils literal notranslate\">True</code> kommer anslutningen till databasen att stängas, men databasen kommer inte att förstöras.</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.db.connection.creation.serialize_db_to_string\">\n<span class=\"sig-name descname\">serialize_db_to_string</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.connection.creation.serialize_db_to_string\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Serialiserar databasen till en JSON-sträng i minnet som kan användas för att återställa databastillståndet mellan tester om backend inte stöder transaktioner eller om din svit innehåller testklasser med <a class=\"reference internal\" href=\"/sv/5.2/topics/testing/overview/#test-case-serialized-rollback\"><span class=\"std std-ref\">serialized_rollback=True</span></a> aktiverat.</p>\n<p>Denna funktion bör endast anropas när alla testdatabaser har skapats eftersom serialiseringsprocessen kan resultera i frågor mot databaser som inte är testdatabaser beroende på din <a class=\"reference internal\" href=\"/sv/5.2/topics/db/multi-db/#topics-db-multi-db-routing\"><span class=\"std std-ref\">routingkonfiguration</span></a>.</p>\n</dd></dl>\n\n</section>\n</section>\n</section>\n<section id=\"integration-with-coverage-py\">\n<span id=\"topics-testing-code-coverage\"></span><h2>Integration med <code class=\"docutils literal notranslate\">coverage.py</code><a class=\"heading-anchor\" href=\"#integration-with-coverage-py\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Kodtäckning beskriver hur mycket av källkoden som har testats. Den visar vilka delar av din kod som testas och vilka som inte gör det. Det är en viktig del av testningen av applikationer, så det rekommenderas starkt att du kontrollerar täckningen av dina tester.</p>\n<p>Django kan enkelt integreras med <a class=\"reference external\" href=\"https://coverage.readthedocs.io/\">coverage.py</a>, ett verktyg för att mäta kodtäckning av Python-program. Först installerar du <a class=\"extlink-pypi reference external\" href=\"https://pypi.org/project/coverage/\">coverage</a>. Därefter kör du följande från din projektmapp som innehåller <code class=\"docutils literal notranslate\">manage.py</code>:</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code>coverage run --source<span class=\"o\">=</span><span class=\"s1\">&#39;.&#39;</span> manage.py <span class=\"nb\">test</span> myapp\n</code></pre></div>\n<p>Detta kör dina tester och samlar in täckningsdata för de exekverade filerna i ditt projekt. Du kan se en rapport över dessa data genom att skriva följande kommando:</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code>coverage report\n</code></pre></div>\n<p>Observera att en del Django-kod exekverades när testerna kördes, men den listas inte här på grund av flaggan <code class=\"docutils literal notranslate\">source</code> som skickades till föregående kommando.</p>\n<p>För fler alternativ, t.ex. kommenterade HTML-listor med information om missade rader, se dokumenten för <a class=\"reference external\" href=\"https://coverage.readthedocs.io/\">coverage.py</a>.</p>\n</section>","rootId":"advanced-testing-topics","toc":[{"title":"Förfrågningsfabriken","anchor":"the-request-factory","children":[{"title":"Exempel","anchor":"example","children":[]},{"title":"AsyncRequestFactory","anchor":"asyncrequestfactory","children":[]}]},{"title":"Testning av klassbaserade vyer","anchor":"testing-class-based-views","children":[]},{"title":"Tester och flera värdnamn","anchor":"tests-and-multiple-host-names","children":[]},{"title":"Tester och flera databaser","anchor":"tests-and-multiple-databases","children":[{"title":"Test av primär/replikakonfigurationer","anchor":"testing-primary-replica-configurations","children":[]},{"title":"Kontroll av skapandeordning för testdatabaser","anchor":"controlling-creation-order-for-test-databases","children":[]}]},{"title":"Avancerade funktioner i TransactionTestCase","anchor":"advanced-features-of-transactiontestcase","children":[]},{"title":"Genomför sekventiell körning av testklasser","anchor":"enforce-running-test-classes-sequentially","children":[]},{"title":"Använda Django Test Runner för att testa återanvändbara applikationer","anchor":"using-the-django-test-runner-to-test-reusable-applications","children":[]},{"title":"Användning av olika testramverk","anchor":"using-different-testing-frameworks","children":[{"title":"Definiera en testlöpare","anchor":"defining-a-test-runner","children":[{"title":"Attribut","anchor":"attributes","children":[]},{"title":"Metoder","anchor":"methods","children":[]}]},{"title":"Test av verktyg","anchor":"testing-utilities","children":[{"title":"django.test.utils","anchor":"module-django.test.utils","children":[]},{"title":"django.db.connection.creation","anchor":"django-db-connection-creation","children":[]}]}]},{"title":"Integration med coverage.py","anchor":"integration-with-coverage-py","children":[]}],"breadcrumbs":[{"docname":"topics/index","title":"Använda Django","url":"/sv/5.2/topics/"},{"docname":"topics/testing/index","title":"Testning i Django","url":"/sv/5.2/topics/testing/"}],"prev":{"docname":"topics/testing/tools","title":"Testverktyg","url":"/sv/5.2/topics/testing/tools/"},"next":{"docname":"topics/auth/index","title":"Användarautentisering i Django","url":"/sv/5.2/topics/auth/"},"formats":{"html":"/sv/5.2/topics/testing/advanced/","markdown":"/sv/5.2/topics/testing/advanced.md","json":"/sv/5.2/topics/testing/advanced.json"},"source":"https://github.com/django/django/blob/stable/5.2.x/docs/topics/testing/advanced.txt","official":"https://docs.djangoproject.com/sv/5.2/topics/testing/advanced/","inVersions":["6.1","6.0","5.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}