资讯专栏INFORMATION COLUMN

使用Django+Pytest,教你搭建在线自动化测试平台

89542767 / 450人阅读


  小编写这篇文章的主要目的,就是教给大家,如何使用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》第 68 期

    摘要:整个项目简单还具有实用价值,可作为的实战项目学习的调试工具栏。查看文档自动在个人首页展示编程时长的工具。通过学习这些前沿的人工智能论文,提前了解在未来更多可能性可以将图片和视频转换成漫画风格的工具。兴趣是最好的老师,HelloGitHub 让你对编程感兴趣!简介HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。https://github.com/521xueweihan...

    番茄西红柿 评论0 收藏2637
  • 蠎周刊 2015 年度最赞

    摘要:蠎周刊年度最赞亲俺们又来回顾又一个伟大的年份儿包去年最受欢迎的文章和项目如果你错过了几期就这一期不会丢失最好的嗯哼还为你和你的准备了一批纪念裇从这儿获取任何时候如果想分享好物给大家在这儿提交喜欢我们收集的任何意见建议通过来吧原文 Title: 蠎周刊 2015 年度最赞Date: 2016-01-09 Tags: Weekly,Pycoder,Zh Slug: issue-198-to...

    young.li 评论0 收藏0
  • 《HelloGitHub》第 68 期

    摘要:在线尝试的进程管理工具。项目包含了代码实现运行过程动画以及相关论文为系统提供人脸识别解锁电脑的工具。在线阅读教科书计算机体系结构基础第三版。 .markdown-body{word-break:break-word;line-height:1.75;font-weight:400;font-size:15px;overflow-x:hidden;color:#333}.markdown-b...

    番茄西红柿 评论0 收藏2637
  • 一步一步教你如何搭建自己的视频聚合站

    摘要:不过因为各个平台互相挖人的关系,导致关注的一些主播分散到了各个直播平台,来回切换有点麻烦,所以萌生了做一个视频聚合站的想法。后续我们会对这三个部分的功能做逐一展开说明。正则处理要求比较高,但是几乎能应对所有的情况,属于大杀器。 前言 作为一个炉石传说玩家,经常有事没事开着直播网站看看大神们的精彩表演。不过因为各个平台互相挖人的关系,导致关注的一些主播分散到了各个直播平台,来回切换有点麻...

    justjavac 评论0 收藏0
  • 代写文章列表

    摘要:技术配置与美化方案开发环境搭建自定义脚手架关系型数据库简明用法缓存系统使用部署开发异步任务系统进行文档编写进行代码测试在中加入支付功能开源搜索引擎简明用法开源日志引擎简明用法开源监控系统简明用法网络爬虫编写简明指南优雅进行代码管理思路接口文 技术 Ubuntu配置与美化方案 Python开发环境搭建 自定义Django脚手架 关系型数据库简明用法 Django缓存系统使用 Fabri...

    GitCafe 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<