使用Django+Pytest搭建在線自動(dòng)化測(cè)試平臺(tái)
一、測(cè)試平臺(tái):
解決分散用例執(zhí)行方式,提供統(tǒng)一測(cè)試用例執(zhí)行過程、用例管理、測(cè)試報(bào)告
主要是基于:
fastapi+vue.js
django+vue.js
django
二、搭建過程
2.1 使用django搭建一個(gè)web系統(tǒng)
1. 創(chuàng)建項(xiàng)目
django-admin startproject TestPlatform
創(chuàng)建python的包,測(cè)試平臺(tái)的配置和功能
2. 創(chuàng)建app
django-admin startapp web
創(chuàng)建python的包,具體的功能代碼
(1)在TestPlatform/Web/apps.py中注冊(cè)app
from django.apps import AppConfig
class WebConfig(AppConfig):
# default_auto_field = 'django.db.models.BigAutoField'
name = 'Web'
verbose_name = "自動(dòng)化測(cè)試"
(2) 在TestPlatform/TestPlatform/settings.py中進(jìn)行相關(guān)設(shè)置
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'# 設(shè)置中文
TIME_ZONE = 'Asia/Shanghai'# 設(shè)置時(shí)區(qū)
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系統(tǒng)的入口點(diǎn)
urlpatterns = static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) + [
path('', admin.site.urls),
](4)啟動(dòng)測(cè)試平臺(tái)
python manage.py runserver
2.2 搭建測(cè)試框架
1. 定義model
model驅(qū)動(dòng)開發(fā)
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(
"測(cè)試狀態(tài)", default=-1, choices=[
(-1, '初始化'),
(0, '馬上執(zhí)行'),
(1, '正在執(zhí)行測(cè)試用例'),
(2, '正在生成測(cè)試報(bào)告'),
(3, '執(zhí)行完畢'),
]
)
run_datatime = models.DateTimeField(
"最近執(zhí)行時(shí)間", null=True, blank=True
)
class Meta:
verbose_name_plural = verbose_name = "測(cè)試任務(wù)"
def __str__(self):
return self.name
def get_url(self, _type):
"""生成報(bào)告或者測(cè)試日志的Url"""
if self.case and self.status == 3: # 執(zhí)行完畢
case_path = pathlib.PurePosixPath(str(self.case))
root_path = pathlib.PurePosixPath('/uploads')
if _type == 'report': # 報(bào)告的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'> 點(diǎn)擊查看</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 = '測(cè)試報(bào)告'
def log_url(self, obj):
return obj.get_url('url')
log_url.short_description = '執(zhí)行日志'3. 執(zhí)行數(shù)據(jù)庫(kù)遷移
python manage.py makemigrations python manage.py migrate
三、平臺(tái)如何管理
1. 創(chuàng)建管理員賬號(hào)
python manage.py createsuperuser
用戶名:admin
郵箱:admin@qq.com
密碼:admin
2. 調(diào)整頁(yè)面顯示
3. 執(zhí)行測(cè)試用例
在models.py文件中調(diào)用pytest,pytest執(zhí)行yaml文件(關(guān)鍵字驅(qū)動(dòng))
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(
"測(cè)試狀態(tài)", default=-1, choices=[
(-1, '初始化'),
(0, '馬上執(zhí)行'),
(1, '正在執(zhí)行測(cè)試用例'),
(2, '正在生成測(cè)試報(bào)告'),
(3, '執(zhí)行完畢'),
]
)
run_datatime = models.DateTimeField(
"最近執(zhí)行時(shí)間", null=True, blank=True
)
class Meta:
verbose_name_plural = verbose_name = "測(cè)試任務(wù)"
def __str__(self):
return self.name
def get_url(self, _type):
"""生成報(bào)告或者測(cè)試日志的Url"""
if self.case and self.status == 3: # 執(zhí)行完畢
case_path = pathlib.PurePosixPath(str(self.case))
root_path = pathlib.PurePosixPath('/uploads')
if _type == 'report': # 報(bào)告的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'> 點(diǎn)擊查看</a>")
else:
return "-"
def save(self, *args, **kwargs):
super().save(*args, **kwargs)
# 判斷是否需要啟動(dòng)測(cè)試框架,執(zhí)行測(cè)試用例
if self.status == 0:
self.status = 1 # 修改狀態(tài):正在執(zhí)行
self.run_datatime = datetime.datetime.now()
super().save()
# 啟動(dòng)測(cè)試框架
import pytest
pytest.main(self.case.path) # 執(zhí)行指定的測(cè)試用例文件
self.status = 3 # 修改狀態(tài):執(zhí)行完畢
self.run_datatime = datetime.datetime.now()
super().save()
總結(jié)
到此這篇關(guān)于使用Django+Pytest搭建在線自動(dòng)化測(cè)試平臺(tái)的文章就介紹到這了,更多相關(guān)Django+Pytest在線自動(dòng)化測(cè)試平臺(tái)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mac安裝pytorch及系統(tǒng)的numpy更新方法
今天小編就為大家分享一篇mac安裝pytorch及系統(tǒng)的numpy更新方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2018-07-07
python實(shí)現(xiàn)自動(dòng)生成SQL語(yǔ)句
在數(shù)據(jù)處理和管理中,SQL(Structured?Query?Language)是一種非常重要的語(yǔ)言,本文主要介紹了如何使用python實(shí)現(xiàn)自動(dòng)生成SQL語(yǔ)句,需要的可以參考下2024-04-04
Python tempfile模塊生成臨時(shí)文件和臨時(shí)目錄
這篇文章主要介紹了Python tempfile模塊生成臨時(shí)文件和臨時(shí)目錄,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09
Python3 用matplotlib繪制sigmoid函數(shù)的案例
這篇文章主要介紹了Python3 用matplotlib繪制sigmoid函數(shù)的案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2020-12-12

