使用Django+Pytest搭建在線自動(dòng)化測(cè)試平臺(tái)
一、測(cè)試平臺(tái):
解決分散用例執(zhí)行方式,提供統(tǒng)一測(cè)試用例執(zhí)行過(guò)程、用例管理、測(cè)試報(bào)告
主要是基于:
fastapi+vue.js
django+vue.js
django
二、搭建過(guò)程
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)開(kāi)發(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)文章
基于Python數(shù)據(jù)可視化利器Matplotlib,繪圖入門(mén)篇,Pyplot詳解
下面小編就為大家?guī)?lái)一篇基于Python數(shù)據(jù)可視化利器Matplotlib,繪圖入門(mén)篇,Pyplot詳解。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10python中創(chuàng)建以及刪除虛擬環(huán)境的幾種方法總結(jié)
在Python?中創(chuàng)建虛擬環(huán)境非常容易,但是刪除虛擬環(huán)境可能會(huì)有一些挑戰(zhàn),這篇文章主要給大家介紹了關(guān)于python中創(chuàng)建以及刪除虛擬環(huán)境的幾種方法,需要的朋友可以參考下2024-03-03python決策樹(shù)之CART分類(lèi)回歸樹(shù)詳解
這篇文章主要為大家詳細(xì)介紹了python決策樹(shù)之CART分類(lèi)回歸樹(shù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12python?爬取豆瓣電影短評(píng)并利用wordcloud生成詞云圖
這篇文章主要介紹了python?爬取豆瓣電影短評(píng)并利用wordcloud生成詞云圖,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-06-06python 實(shí)現(xiàn)調(diào)用子文件下的模塊方法
今天小編就為大家分享一篇python 實(shí)現(xiàn)調(diào)用子文件下的模塊方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-12-12python連接kafka加載數(shù)據(jù)的項(xiàng)目實(shí)踐
本文主要介紹了python連接kafka加載數(shù)據(jù)的項(xiàng)目實(shí)踐,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05