使用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
0
投稿
猜你喜欢
- 一、何谓ASP缓存/为什么要缓存当你的web站点采用asp技术建立的初期,可能感觉到的是asp * 页技术带来的便利性,以及随意修改性、自如
- 一、 腐蚀与膨胀1.1 腐蚀操作import cv2import numpy as npimg = cv2.imread('Data
- 那是一杠还是两杠呢?最简单的方式就是拿出钱包,掏出张“新”的50或100,翻到背面的银线上,就会发现两杠的符号。这个是以前跟同事在讨论是一杠
- 相信大家对阶乘都不陌生。不知道阶乘的可以看这里:一个数的阶乘:比如5的阶乘在python中大部分教程一般推荐用递归函数完成:#!/usr/b
- 如下所示:希望可以从对admin提交的密码加密,并验证电话号码均为数字。查看admin.pyfrom django.contrib impo
- 你是不是觉得每次新建项目都要写一次# coding:utf-8,感觉特烦人呐!懒(fu)人(li)教程来啦,先看效果图吧中文版如图进入设置然
- 前言:opencv最主要的的功能是用于图像处理,所以图像的概念贯穿了整个opencv,与其相关的核心类就是Mat。像素:图片尺寸以像素为单位
- fab命令好似结合我们编写的fabfile.py(其它文件名必须添加-f filename应用)来搭配使用的,部分命令行参数可以通过相应的方
- 一、特效预览处理前处理后细节放大后二、程序原理将图片所在的 256 的灰度映射到相应的字符上面也就是 RGB 值转成相应的字符然
- <?php echo CHtml::link('错误链接','user/register')?>
- 1. 采用工作区设置默认解释器的方式(推荐)下载完vscode,并安装python支持之后。使用vscode打开一个空文件夹。点击左侧的运行
- 测试环境Python 3.6Win10代码实现#!/usr/bin/env python 3.4.0#-*- encoding:utf-8
- 小编曾经有过这样的经历,就是在安装使用django框架时候,遇到了部分模块不能够使用,检查了很久,才发现是因为版本问题,需要重新编译安装一个
- 前言:在网络时代,图片已经成为了我们生活中不可或缺的一部分。随着各种社交媒体的兴起,我们可以在网上看到越来越多的图片,但是如何从这些图片中获
- 代码如下:---涂聚文 Geovin Du DECLARE @myid uniqueidentifier SET @myid =
- 鲲之鹏的技术人员将在本文介绍一种通过模拟操作微信App的方式采集指定公众号的所有历史数据的方法。通过我们抓包分析发现,微信公众号的历史数据是
- 一、word转pdf先安装win32库:pip install pywin32from win32com.client import gen
- 桥接模式(Bridge Pattern)是什么桥接模式是一种结构型模式,它将抽象部分与实现部分分离开来,使它们可以独立地变化。在桥接模式中,
- 本文实例讲述了Python栈的实现方法。分享给大家供大家参考,具体如下:Python实现栈栈的数组实现:利用python列表方法代码如下:#
- 导语哈喽!我是木木子,今天又想我了嘛?之前不是出过一期Python美颜相机嘛?不知道你们还记得不?这一期的话话题还是围绕上期关于颜值方面来走