当前位置:   article > 正文

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

使用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()

  1. ​现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
  2. 如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
  3. 可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
  4. 分享他们的经验,还会分享很多直播讲座和技术沙龙
  5. 可以免费学习!划重点!开源的!!!
  6. qq群号:485187702【暗号:csdn11

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 希望能帮助到你!【100%无套路免费领取】

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/242620
推荐阅读
相关标签
  

闽ICP备14008679号