網站首頁 編程語言 正文
一、測試平臺:
解決分散用例執行方式,提供統一測試用例執行過程、用例管理、測試報告
主要是基于:
? ? 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
相關推薦
- 2022-03-16 Android線程池源碼閱讀記錄介紹_Android
- 2024-01-30 MongoDB 聚合查詢在數據統計中的應用
- 2022-07-28 C++中操作符的前置與后置有什么區別_C 語言
- 2022-12-26 React?tabIndex使非表單元素支持focus和blur事件_React
- 2022-10-11 React -配置文件中需要使用組件中異步請求到的數據
- 2022-12-23 Python?tensorflow與pytorch的浮點運算數如何計算_python
- 2022-07-28 C#向數據庫中插入或更新null空值與延遲加載lazy_C#教程
- 2022-09-12 Python中.py程序在CMD控制臺以指定虛擬環境運行_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支