脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Python - 使用Django+Pytest搭建在线自动化测试平台

使用Django+Pytest搭建在线自动化测试平台

2022-07-13 13:16qq阙继婷 Python

最近由于公司的发展安排本人实现公司项目的自动化测试,下面这篇文章主要给大家介绍了关于如何Django + Pytest搭建在线自动化测试平台的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下

一、测试平台:

解决分散用例执行方式,提供统一测试用例执行过程、用例管理、测试报告

主要是基于:

    fastapi+vue.js
    django+vue.js
    django

二、搭建过程

2.1 使用django搭建一个web系统

1. 创建项目

  django-admin startproject TestPlatform

创建python的包,测试平台的配置和功能

2. 创建app

django-admin startapp web

创建python的包,具体的功能代码

(1)在TestPlatform/Web/apps.py中注册app

?
1
2
3
4
5
from django.apps import AppConfig
class WebConfig(AppConfig):
    # default_auto_field = 'django.db.models.BigAutoField'
    name = 'Web'
    verbose_name = "自动化测试"

(2) 在TestPlatform/TestPlatform/settings.py中进行相关设置

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'Web.apps.WebConfig'
]
 
LANGUAGE_CODE = 'zh-hans'# 设置中文
TIME_ZONE = 'Asia/Shanghai'# 设置时区
 
USE_I18N = True
 
USE_L10N = True
 
USE_TZ = False
 
MEDIA_ROOT = 'uploads/'
MEDIA_URL = 'uploads/'

(3)编辑TestPlatform/TestPlatform/urls.py文件

?
1
2
3
4
5
6
7
8
9
from django.conf import settings
from django.conf.urls.static import static
from django.contrib import admin
from django.urls import path
 
# 定义http路由,是web系统的入口点
urlpatterns = static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) + [
    path('', admin.site.urls),
]

(4)启动测试平台

?
1
python manage.py runserver

2.2 搭建测试框架

1. 定义model

model驱动开发

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import pathlib
from django.db import models
 
# 定义model
# 抽象化
from django.utils import html
 
 
class Task(models.Model):
    name = models.CharField("用例名称", max_length=20)
    case = models.FileField("用例文件", upload_to='tests/%Y_%m_%d_%H_%M_%S/')
    status = models.IntegerField(
        "测试状态", default=-1, choices=[
            (-1, '初始化'),
            (0, '马上执行'),
            (1, '正在执行测试用例'),
            (2, '正在生成测试报告'),
            (3, '执行完毕'),
        ]
    )
    run_datatime = models.DateTimeField(
        "最近执行时间", null=True, blank=True
    )
 
    class Meta:
        verbose_name_plural = verbose_name = "测试任务"
 
    def __str__(self):
        return self.name
 
    def get_url(self, _type):
        """生成报告或者测试日志的Url"""
        if self.case and self.status == 3# 执行完毕
            case_path = pathlib.PurePosixPath(str(self.case))
            root_path = pathlib.PurePosixPath('/uploads')
 
            if _type == 'report'# 报告的url
                report_path = root_path / case_path.parent / "report/index.html"
            elif _type == 'log'# 日志的url
                report_path = root_path / case_path.parent / "pytest.txt"
            else:
                report_path = '_'
 
            return html.format_html(f"<a href='{report_path}' target='_blank'> 点击查看</a>")
        else:
            return "-"

2. 定义界面

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
from django.contrib import admin
from .models import Task
 
 
# Register your models here.
 
@admin.register(Task)
class TaskAdmin(admin.ModelAdmin):
    # 决定了model 怎么显示
    list_display = ("id", "name", "status", "run_datatime",
                    "report_url", "log_url",
                    )
    # 要显示的字段
 
    readonly_fields = ('run_datatime',)
 
    def report_url(self, obj):
        return obj.get_url('report')
 
    report_url.short_description = '测试报告'
 
    def log_url(self, obj):
        return obj.get_url('url')
 
    log_url.short_description = '执行日志'

3. 执行数据库迁移

?
1
2
python manage.py makemigrations
python manage.py migrate

三、平台如何管理

1. 创建管理员账号

   python manage.py createsuperuser

  用户名:admin

  邮箱:admin@qq.com

  密码:admin

2. 调整页面显示

3. 执行测试用例

在models.py文件中调用pytest,pytest执行yaml文件(关键字驱动)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import pathlib
from datetime import datetime
 
from django.db import models
 
# 定义model
# 抽象化
from django.utils import html
 
 
class Task(models.Model):
    name = models.CharField("用例名称", max_length=20)
    case = models.FileField("用例文件", upload_to='tests/%Y_%m_%d_%H_%M_%S/')
    status = models.IntegerField(
        "测试状态", default=-1, choices=[
            (-1, '初始化'),
            (0, '马上执行'),
            (1, '正在执行测试用例'),
            (2, '正在生成测试报告'),
            (3, '执行完毕'),
        ]
    )
    run_datatime = models.DateTimeField(
        "最近执行时间", null=True, blank=True
    )
 
    class Meta:
        verbose_name_plural = verbose_name = "测试任务"
 
    def __str__(self):
        return self.name
 
    def get_url(self, _type):
        """生成报告或者测试日志的Url"""
        if self.case and self.status == 3# 执行完毕
            case_path = pathlib.PurePosixPath(str(self.case))
            root_path = pathlib.PurePosixPath('/uploads')
 
            if _type == 'report'# 报告的url
                report_path = root_path / case_path.parent / "report/index.html"
            elif _type == 'log'# 日志的url
                report_path = root_path / case_path.parent / "pytest.txt"
            else:
                report_path = '_'
 
            return html.format_html(f"<a href='{report_path}' target='_blank'> 点击查看</a>")
        else:
            return "-"
 
    def save(self, *args, **kwargs):
        super().save(*args, **kwargs)
 
        # 判断是否需要启动测试框架,执行测试用例
 
        if self.status == 0:
            self.status = 1  # 修改状态:正在执行
            self.run_datatime = datetime.datetime.now()
            super().save()
 
            # 启动测试框架
            import pytest
 
            pytest.main(self.case.path)  # 执行指定的测试用例文件
 
            self.status = 3  # 修改状态:执行完毕
            self.run_datatime = datetime.datetime.now()
            super().save()

总结

到此这篇关于使用Django+Pytest搭建在线自动化测试平台的文章就介绍到这了,更多相关Django+Pytest在线自动化测试平台内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/qq_40306074/article/details/123590624

延伸 · 阅读

精彩推荐