<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
解決分散用例執行方式,提供統一測試用例執行過程、用例管理、測試報告
主要是基於:
fastapi+vue.js
django+vue.js
django
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
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()
到此這篇關於使用Django+Pytest搭建線上自動化測試平臺的文章就介紹到這了,更多相關Django+Pytest線上自動化測試平臺內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45