小编写这篇文章的主要目的,就是教给大家,如何使用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
</>复制代码
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://www.ucloud.cn/yun/127753.html
摘要:整个项目简单还具有实用价值,可作为的实战项目学习的调试工具栏。查看文档自动在个人首页展示编程时长的工具。通过学习这些前沿的人工智能论文,提前了解在未来更多可能性可以将图片和视频转换成漫画风格的工具。兴趣是最好的老师,HelloGitHub 让你对编程感兴趣!简介HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。https://github.com/521xueweihan...
摘要:蠎周刊年度最赞亲俺们又来回顾又一个伟大的年份儿包去年最受欢迎的文章和项目如果你错过了几期就这一期不会丢失最好的嗯哼还为你和你的准备了一批纪念裇从这儿获取任何时候如果想分享好物给大家在这儿提交喜欢我们收集的任何意见建议通过来吧原文 Title: 蠎周刊 2015 年度最赞Date: 2016-01-09 Tags: Weekly,Pycoder,Zh Slug: issue-198-to...
摘要:在线尝试的进程管理工具。项目包含了代码实现运行过程动画以及相关论文为系统提供人脸识别解锁电脑的工具。在线阅读教科书计算机体系结构基础第三版。 .markdown-body{word-break:break-word;line-height:1.75;font-weight:400;font-size:15px;overflow-x:hidden;color:#333}.markdown-b...
摘要:不过因为各个平台互相挖人的关系,导致关注的一些主播分散到了各个直播平台,来回切换有点麻烦,所以萌生了做一个视频聚合站的想法。后续我们会对这三个部分的功能做逐一展开说明。正则处理要求比较高,但是几乎能应对所有的情况,属于大杀器。 前言 作为一个炉石传说玩家,经常有事没事开着直播网站看看大神们的精彩表演。不过因为各个平台互相挖人的关系,导致关注的一些主播分散到了各个直播平台,来回切换有点麻...
阅读 998·2023-01-14 11:38
阅读 994·2023-01-14 11:04
阅读 832·2023-01-14 10:48
阅读 2257·2023-01-14 10:34
阅读 1062·2023-01-14 10:24
阅读 961·2023-01-14 10:18
阅读 600·2023-01-14 10:09
阅读 655·2023-01-14 10:02