下面我将为您详细讲解使用Django+Pytest搭建在线自动化测试平台的完整攻略,并提供两条示例说明。
概述
首先,让我们来了解一下Django和Pytest。
Django是一个基于Python的Web框架,它采用了MVC结构,并提供了一系列的工具和API,使得开发Web应用变得更加简单和快速。
Pytest则是一种Python的测试框架,其支持多种类型的测试,并具有简单易用、编写测试用例简单等特点。同时,它也支持自定义的插件,例如html测试报告等。
使用Django和Pytest搭建在线自动化测试平台,可以方便地管理测试用例、执行测试、查看测试报告等。
操作步骤
接下来,我们将分为以下步骤来讲解如何使用Django+Pytest搭建在线自动化测试平台。
- 创建Django项目和测试框架
首先,我们需要在本地创建一个Django项目,并安装pytest和pytest-django包。
# 创建Django项目
$ django-admin startproject mysite
# 创建测试应用
$ python manage.py startapp testapp
# 安装pytest和pytest-django包
$ pip install pytest pytest-django
- 编写测试用例
在testapp目录下,我们需要创建一个tests.py文件来编写测试用例,例如:
import pytest
@pytest.mark.django_db
def test_addition():
assert 1 + 1 == 2
- 执行测试用例
在项目根目录下,执行以下命令来执行测试用例:
$ pytest
我们可以使用pytest-html插件来生成html格式的测试报告:
$ pytest --html=report.html
- 集成到Django项目中
我们需要在Django项目中,集成pytest框架。在mysite/settings.py文件中添加以下代码:
# 告诉Django使用pytest作为测试框架
TEST_RUNNER = 'pytest_django.runner.DiscoverRunner'
# 告诉pytest在哪个目录下查找测试用例
pytest_configure = 'src/apps/testapp/tests.py'
在mysite/urls.py文件中添加以下代码:
from django.urls import path
from django.views.generic import TemplateView
urlpatterns = [
path('', TemplateView.as_view(template_name='index.html')),
path('run_tests/', TemplateView.as_view(template_name='run_tests.html')),
]
然后在testapp目录下,创建一个urls.py文件,并添加以下代码:
from django.urls import path
from .views import run_tests
urlpatterns = [
path('', run_tests),
]
我们需要在testapp目录下创建一个views.py文件,并添加以下代码:
from django.shortcuts import render
from django.test.utils import override_settings
from mysite.settings import pytest_configure
# Decorator to set pytest configuration
# from Django Settings
@override_settings(
ROOT_URLCONF=pytest_configure
)
def run_tests(request):
results = []
# Required for multiprocess
# see: https://github.com/pytest-dev/pytest-django/issues/269
if request.GET.get("processes"):
import django
django.setup()
# Run tests with pytest
import pytest
pytest.main([
'-s', '-vvv',
requested_groups.join(',') ,
'--html', 'tests_report.html',
])
return render(request, 'run_tests.html', context={
'results': results
})
- 创建前端页面
我们需要在mysite/templates目录下,创建两个html文件:index.html和run_tests.html,并添加以下代码:
index.html:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>Test Platform</title>
</head>
<body>
<h1>Test Platform</h1>
<a href="{% url 'testapp:run_tests' %}">Run Tests</a>
<p>Test Results:</p>
</body>
</html>
run_tests.html:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>Test Results</title>
</head>
<body>
<h1>Test Results</h1>
{% if results %}
<h2>Passed</h2>
<table>
<thead>
<tr>
<th>Test Name</th>
<th>Execution Time</th>
</tr>
</thead>
<tbody>
{% for name, duration in results.passed %}
<tr>
<td>{{ name }}</td>
<td>{{ duration }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endif %}
{% if results %}
<h2>Failed</h2>
<table>
<thead>
<tr>
<th>Test Name</th>
<th>Error</th>
<th>Execution Time</th>
</tr>
</thead>
<tbody>
{% for name, error, duration in results.failed %}
<tr>
<td>{{ name }}</td>
<td>{{ error }}</td>
<td>{{ duration }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endif %}
{% if results %}
<h2>Skip</h2>
<table>
<thead>
<tr>
<th>Test Name</th>
<th>Reason</th>
</tr>
</thead>
<tbody>
{% for name, reason in results.skipped %}
<tr>
<td>{{ name }}</td>
<td>{{ reason }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endif %}
<br><br>
<a href="/">Back to Home</a>
</body>
</html>
- 运行测试平台
我们运行Django项目,然后打开浏览器,访问http://127.0.0.1:8000/,即可看到我们创建的前端页面。点击Run Tests,即可执行测试用例,并查看测试结果。
附加说明
下面我们提供两个示例,来进一步说明如何使用Django+Pytest搭建在线自动化测试平台。
示例1
我们假设我们的项目中有一个购物车功能。我们可以使用Django+Pytest来编写测试用例,例如:
from django.test import TestCase, Client
from .models import Product, User
class CartTestCase(TestCase):
def setUp(self):
# Create user and sign in
self.client = Client()
self.user = User.objects.create(username='testuser')
self.client.force_login(self.user)
# Create products
self.product1 = Product.objects.create(name='Product1', price=100)
self.product2 = Product.objects.create(name='Product2', price=200)
def test_add_to_cart(self):
# Add products to cart
response = self.client.post('/add_to_cart/', {
'product_id': self.product1.id,
'quantity': 2
})
# Assert response status code
self.assertEqual(response.status_code, 200)
# Check if cart contains the added products
response = self.client.get('/cart/')
self.assertIn(str(self.product1), str(response.content))
def test_remove_from_cart(self):
# Add products to cart
response = self.client.post('/add_to_cart/', {
'product_id': self.product1.id,
'quantity': 2
})
# Remove product from cart
response = self.client.post('/remove_from_cart/', {
'product_id': self.product1.id,
})
# Check if cart does not contain the removed product
response = self.client.get('/cart/')
self.assertNotIn(str(self.product1), str(response.content))
示例2
我们假设我们的项目中有一个用户管理功能。我们可以使用Django+Pytest来编写测试用例,例如:
from django.test import TestCase, Client
from .models import User
class UserTestCase(TestCase):
def setUp(self):
# Create user and sign in
self.client = Client()
self.user = User.objects.create(username='testuser')
self.client.force_login(self.user)
def test_user_creation(self):
# Create user
response = self.client.post('/create_user/', {
'username': 'newuser',
'email': 'newuser@example.com',
'password1': 'password',
'password2': 'password',
'is_staff': False,
'is_superuser': False
})
# Assert response status code
self.assertEqual(response.status_code, 302)
# Check if user was created
user = User.objects.get(username='newuser')
self.assertIsNotNone(user)
def test_user_login(self):
# Log out current user
self.client.logout()
# Log in new user
response = self.client.post('/login/', {
'username': 'newuser',
'password': 'password'
})
# Assert response status code
self.assertEqual(response.status_code, 302)
# Check if user is logged in
response = self.client.get('/')
self.assertIn('newuser', str(response.content))
以上是使用Django+Pytest搭建在线自动化测试平台的完整攻略和示例。希望能对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用Django+Pytest搭建在线自动化测试平台 - Python技术站