使用Django+Pytest搭建在线自动化测试平台
作者:qq阙继婷 发布时间:2021-10-18 05:00:13
标签: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
from django.apps import AppConfig
class WebConfig(AppConfig):
# default_auto_field = 'django.db.models.BigAutoField'
name = 'Web'
verbose_name = "自动化测试"
(2) 在TestPlatform/TestPlatform/settings.py中进行相关设置
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文件
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)启动测试平台
python manage.py runserver
2.2 搭建测试框架
1. 定义model
model驱动开发
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. 定义界面
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. 执行数据库迁移
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文件(关键字驱动)
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()
来源:https://blog.csdn.net/qq_40306074/article/details/123590624


猜你喜欢
- A Process Control System 使用b/s架构、运行在类Unix系统上一个进程监控管理系统它可以使进程以daemon方式运
- 一、按索引取数据①tf.gather()输入参数:数据、维度、索引例:设数据是[4,35,8],4个班级,每个班级35个学生,每个学生8门课
- 前两天拉取公司前端代码修改,发现在开发者工具的sources选项里边,居然没有列出来我要调试的js脚本,后来观察了一下,脚本是动态在页面里引
- 我们生活在信息繁杂的社会,尤其是在互联网时代,人们开始通过网络开始接触越来越多的信息,那么,如何获取/传递有效而准确的信息将非常重要。在网页
- 先看一个js函数 function jsontest() { var json = [{'username':'cr
- 在Python的学习过程中,肯定会遇到很多安装模块的地方,可以使用easy_install安装,但是easy_install相对于pip而言
- python是支持多线程的, 主要是通过thread和threading这两个模块来实现的,本文主要给大家分享python实现多线程网页爬虫
- 最近要对一系列数据做同比比较,需要用到numpy和pandas来计算,不过使用python安装numpy和pandas因为linux环境没有
- 1、需要的环境Python2.XRequests 库2、单字段发送单个文件在requests中发送文件的接口只有一种,那就是使用reques
- 1、首先介绍简单的try......except尝试运行的放例如下面的图和代码来简单介绍下:def test(x,y): pri
- 本文为大家介绍了一段来源于网络上的代码实例,能够合并单元格,下面和大家分享一下,希望能够给需要的朋友或多或少带来一定的帮助。代码实例如下:&
- 代码如下:<% Randomize Do While Len(pass)<12 
- 如果用户输入的是直接插入到一个SQL语句中的查询,应用程序会很容易受到SQL注入,例如下面的例子:$unsafe_variable = $_
- 本文实例讲述了Python扫描IP段查看指定端口是否开放的方法。分享给大家供大家参考。具体实现方法如下:#!/usr/local/bin/p
- 1.计算长度value = "wangdianchao"# 计算字符个数(长度)number = len(value)p
- frame标签有frameset、frame、iframe三种,frameset和其它普通标签没有区别,不会影响正常定位,而frame与if
- 列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。一个循环在C语言等其他
- 信息架构的组件可以拆分成四类组织系统 如何组织信息,例如,依据主题或年代顺序。标签系统 如何表示信息,例如,科学术语(“Acer”)或通俗术
- 写在前面:新型冠状病毒有多么可怕,我想大家都已经知道了。湖北爆发了新型冠状病毒,湖南前几天爆发了禽流感,四川发生地震,中国加油!昨天晚上我突
- 切片操作首先支持下标索引,通过[ N:M :P ]操作索引正向从0开始,逆向从-1开始N:切片开始位置M:切片结束位置(不包含)P:指定切片