298 lines
14 KiB
Python
298 lines
14 KiB
Python
# -*- coding:utf-8 -*-
|
|
"""
|
|
__author__ = 'Ray'
|
|
mail:tsbc@vip.qq.com
|
|
2016-08-03
|
|
"""
|
|
from __future__ import unicode_literals
|
|
|
|
import datetime
|
|
|
|
from django.core.validators import validate_comma_separated_integer_list
|
|
from django.db import models
|
|
|
|
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager
|
|
|
|
|
|
# Create your models here.
|
|
|
|
class Product(models.Model):
|
|
name = models.CharField(max_length=32, verbose_name='产品名称', unique=True)
|
|
# version = models.CharField(max_length=32)
|
|
isenabled = models.BooleanField(default=True, blank=True, verbose_name='产品状态')
|
|
descr = models.TextField(null=True, blank=True, verbose_name='产品描述')
|
|
createtime = models.DateTimeField(auto_now_add=True, null=True, blank=True, verbose_name='创建时间')
|
|
createat = models.CharField(max_length=32, null=True, blank=True, editable=True, verbose_name='创建者')
|
|
updatetime = models.DateTimeField(auto_now=True,null=True, blank=True, verbose_name='更新时间')
|
|
updateat = models.CharField(max_length=32, null=True, blank=True, editable=True, verbose_name='更新者')
|
|
sortby = models.IntegerField(null=True, blank=True, editable=True, default=0, verbose_name='排序')
|
|
|
|
def __unicode__(self):
|
|
return self.name
|
|
|
|
def save(self, *args, **kwargs):
|
|
if not self.id:
|
|
self.createtime = datetime.datetime.now()
|
|
self.updatetime = datetime.datetime.now()
|
|
|
|
super(Product, self).save(*args, **kwargs)
|
|
|
|
class Meta:
|
|
ordering = ["-sortby"]
|
|
|
|
class Project(models.Model):
|
|
productid = models.ForeignKey(Product, verbose_name='产品名称')
|
|
name = models.CharField(max_length=32, unique=True, verbose_name='项目名称')
|
|
version = models.CharField(max_length=32, null=True, blank=True, editable=True, verbose_name='版本')
|
|
isenabled = models.BooleanField(default=True, verbose_name='状态')
|
|
descr = models.TextField(null=True, blank=True, editable=True,verbose_name='项目描述')
|
|
createtime = models.DateTimeField(auto_now_add=True, null=True, blank=True, editable=True,verbose_name='创建时间')
|
|
createat = models.CharField( max_length=32, null=True, blank=True, editable=True, verbose_name='创建者')
|
|
updatetime = models.DateTimeField(auto_now=True,null=True, blank=True, verbose_name='更新时间')
|
|
updateat = models.CharField(max_length=32, null=True, blank=True, editable=True, verbose_name='更新者')
|
|
sortby = models.IntegerField(null=True, blank=True, editable=True, default=0, verbose_name='排序')
|
|
|
|
def __unicode__(self):
|
|
return self.name
|
|
|
|
class Meta:
|
|
ordering = ["-sortby"]
|
|
|
|
class Module(models.Model):
|
|
projectid = models.ForeignKey(Project, verbose_name='所属项目')
|
|
name = models.CharField(max_length=32, verbose_name='模块名称')
|
|
isenabled = models.BooleanField(default=True, verbose_name='状态')
|
|
createtime = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
|
|
createat = models.CharField(max_length=32 ,null=True, blank=True, editable=True, verbose_name='创建者')
|
|
updatetime = models.DateTimeField(auto_now=True, verbose_name='更新时间')
|
|
updateat = models.CharField(max_length=32, null=True, blank=True, editable=True, verbose_name='更新者')
|
|
sortby = models.IntegerField(null=True, blank=True, editable=True, default=0, verbose_name='排序')
|
|
|
|
def __unicode__(self):
|
|
return self.name
|
|
|
|
class Meta:
|
|
ordering = ["-sortby"]
|
|
|
|
class Keyword(models.Model):
|
|
productid = models.IntegerField(verbose_name='所属产品', null=True, blank=True, editable=True)
|
|
keyword = models.CharField(max_length=32, unique=True)
|
|
kwdescr = models.TextField(null=True,blank=True,editable=True)
|
|
createtime = models.DateTimeField(auto_now_add=True)
|
|
createat = models.CharField(max_length=32, null=True, blank=True, editable=True)
|
|
updatetime = models.DateTimeField(auto_now=True)
|
|
updateat = models.CharField(max_length=32, null=True, blank=True, editable=True)
|
|
|
|
def __unicode__(self):
|
|
return self.keyword
|
|
|
|
class Meta:
|
|
ordering = ["productid"]
|
|
|
|
class Element(models.Model):
|
|
Element_Choice = (
|
|
('id','id'),
|
|
('name','name'),
|
|
('css selector','css selector'),
|
|
('xpath','xpath'),
|
|
('class_name','class name'),
|
|
('tag_name','tag name'),
|
|
('link_text','link text'),
|
|
('portial_link_text','portial link text')
|
|
)
|
|
projectid = models.ForeignKey(Project,editable=True)
|
|
moduleid = models.ForeignKey(Module, editable=True)
|
|
descr = models.CharField(max_length=100, editable=True)
|
|
locmode = models.CharField(max_length=32, choices=Element_Choice, null=True, blank=True, editable=True)
|
|
location = models.CharField(max_length=200, null=True, blank=True, editable=True)
|
|
createtime = models.DateTimeField(auto_now_add=True)
|
|
createat = models.CharField(max_length=32, null=True, blank=True, editable=True)
|
|
updatetime = models.DateTimeField(auto_now=True)
|
|
updateat = models.CharField(max_length=32, null=True, blank=True, editable=True)
|
|
|
|
def __unicode__(self):
|
|
return self.descr
|
|
|
|
class Case(models.Model):
|
|
projectid = models.ForeignKey(Project)
|
|
moduleid = models.ForeignKey(Module)
|
|
testrailcaseid = models.CharField(max_length=12,null=True, blank=True, editable=True)
|
|
casedesc = models.CharField(max_length=255, verbose_name="Title")
|
|
isenabled = models.BooleanField(default=True)
|
|
issmoke = models.BooleanField(default=False)
|
|
dependent = models.CharField(max_length=8,null=True, blank=True, editable=True)
|
|
debuginfo = models.CharField(max_length=9999, null=True, blank=True, editable=True)
|
|
createtime = models.DateTimeField(auto_now_add=True)
|
|
createat = models.CharField(max_length=32,null=True, blank=True, editable=True)
|
|
updatetime = models.DateTimeField(auto_now_add=True)
|
|
updateat = models.CharField(max_length=32,null=True, blank=True, editable=True)
|
|
|
|
def __unicode__(self):
|
|
return self.casedesc
|
|
|
|
class Caseset(models.Model):
|
|
descr = models.CharField(max_length=200)
|
|
caseid = models.CharField(validators=[validate_comma_separated_integer_list],max_length=255)
|
|
isenabled = models.BooleanField(default=True)
|
|
createtime = models.DateTimeField(auto_now_add=True)
|
|
createat = models.CharField(max_length=32, null=True, blank=True, editable=True)
|
|
updatetime = models.DateTimeField(auto_now=True)
|
|
updateat = models.CharField(max_length=32, null=True, blank=True, editable=True)
|
|
|
|
def __unicode__(self):
|
|
return self.descr
|
|
|
|
class Step(models.Model):
|
|
caseid = models.ForeignKey(Case)
|
|
stepid = models.IntegerField(null=True, blank=True, editable=True)
|
|
descr = models.CharField(max_length=200, null=True, blank=True, editable=True)
|
|
keywordid = models.ForeignKey(Keyword)
|
|
elementid = models.ForeignKey(Element,null=True, blank=True)
|
|
inputtext = models.CharField(max_length=200, null=True, blank=True, editable=True)
|
|
createtime = models.DateTimeField(auto_now_add=True)
|
|
createat = models.CharField(max_length=32, null=True, blank=True, editable=True)
|
|
updatetime = models.DateTimeField(auto_now=True)
|
|
updateat = models.CharField(max_length=32, null=True, blank=True, editable=True)
|
|
|
|
def __unicode__(self):
|
|
return self.descr
|
|
|
|
class MyUserManager(BaseUserManager):
|
|
# def current_time(self):
|
|
# """get current time """
|
|
# from datetime import datetime
|
|
# return datetime.now().strftime("%Y-%m-%d")
|
|
|
|
def create_user(self, username, email, password):
|
|
"""
|
|
Creates and saves a User with the given email, date of
|
|
birth and password.
|
|
"""
|
|
|
|
if not username:
|
|
raise ValueError('username is unique')
|
|
user = self.model(username=username, email=self.normalize_email(email))
|
|
user.set_password(password)
|
|
user.save(using=self._db)
|
|
return user
|
|
|
|
def create_superuser(self, username, email, password):
|
|
"""
|
|
Creates and saves a superuser with the given email, password.
|
|
"""
|
|
user = self.create_user(username, email, password)
|
|
user.is_admin = True
|
|
user.save(using=self._db)
|
|
return user
|
|
|
|
class User(AbstractBaseUser):
|
|
Dept_Choice = (
|
|
('测试', '测试'),
|
|
('开发', '开发'),
|
|
)
|
|
username = models.CharField(max_length=50, verbose_name="username", unique=True, null=True)
|
|
password = models.CharField(('password'), max_length=128)
|
|
realname = models.CharField(max_length=50, verbose_name="真实姓名", null=True, blank=True, editable=True)
|
|
mobile = models.CharField(max_length=11, verbose_name="Phone Number", null=True, blank=True, editable=True)
|
|
email = models.EmailField(verbose_name='Email Address', max_length=255, unique=True)
|
|
dept = models.CharField(verbose_name=u'部门',choices=Dept_Choice, max_length=100)
|
|
is_active = models.BooleanField(default=True, verbose_name='激活状态')
|
|
is_admin = models.BooleanField(default=False, verbose_name='是否管理员')
|
|
testrailuser = models.CharField(max_length=50, verbose_name="TestRail用户名", null=True,blank=True, editable=True)
|
|
testrailpass = models.CharField(max_length=50, verbose_name="TestRail密码", null=True,blank=True, editable=True)
|
|
objects = MyUserManager()
|
|
base_objects = BaseUserManager()
|
|
USERNAME_FIELD = 'username'
|
|
REQUIRED_FIELDS = ['email']
|
|
|
|
def get_full_name(self):
|
|
# The user is identified by their email address
|
|
return self.username
|
|
|
|
def get_short_name(self):
|
|
# The user is identified by their email address
|
|
return self.username
|
|
|
|
def __unicode__(self): # __unicode__ on Python 2
|
|
return self.username
|
|
|
|
def has_perm(self, perm, obj=None):
|
|
"Does the user have a specific permission?"
|
|
# Simplest possible answer: Yes, always
|
|
return True
|
|
|
|
def has_module_perms(self, app_label):
|
|
"Does the user have permissions to view the app `app_label`?"
|
|
# Simplest possible answer: Yes, always
|
|
return True
|
|
|
|
@property
|
|
def is_staff(self):
|
|
"Is the user a member of staff?"
|
|
# Simplest possible answer: All admins are staff
|
|
return self.is_admin
|
|
|
|
|
|
class UserandProduct(models.Model):
|
|
username = models.ForeignKey(User)
|
|
productname = models.ForeignKey(Product)
|
|
|
|
|
|
|
|
class Task(models.Model):
|
|
Task_Choice = (
|
|
('1', '执行用例'),
|
|
('2', '用例同步'),
|
|
('3', '关联Jenkins'),
|
|
)
|
|
taskname = models.CharField(max_length=255,verbose_name="任务描述")
|
|
tasktype = models.CharField(max_length=32, choices=Task_Choice, blank=True, editable=True)
|
|
status = models.SmallIntegerField(default=0, verbose_name='任务状态')
|
|
issmoke = models.BooleanField(default=False)
|
|
testrailsuites = models.CharField(max_length=8, verbose_name='TestRail测试集ID', null=True, blank=True, editable=True)
|
|
testrailrunid = models.CharField(max_length=8,verbose_name='TestRail执行ID',null=True,blank=True, editable=True)
|
|
testsectionid = models.CharField(max_length=8, verbose_name='TestRail用例节点ID',null=True,blank=True, editable=True)
|
|
projectid = models.ForeignKey(Project)
|
|
jenkins_server_url = models.CharField(max_length=100, verbose_name='JenkinsServer', null=True, blank=True, editable=True)
|
|
user_id = models.CharField(max_length=32, verbose_name='JenkinsUserid', null=True, blank=True, editable=True)
|
|
api_token = models.CharField(max_length=32, verbose_name='JenkinsApitoken', null=True, blank=True, editable=True)
|
|
build_name = models.CharField(max_length=32, verbose_name='JenkinsBuildName', null=True, blank=True, editable=True)
|
|
caselist = models.CharField(max_length=10240, verbose_name='用例列表')
|
|
createtime = models.DateTimeField(auto_now_add=True)
|
|
createat = models.CharField(max_length=32, null=True, blank=True, editable=True)
|
|
updatetime = models.DateTimeField(auto_now=True)
|
|
updateat = models.CharField(max_length=32, null=True, blank=True, editable=True)
|
|
|
|
def __unicode__(self):
|
|
return self.taskname
|
|
|
|
class Codelist(models.Model):
|
|
taskid = models.ForeignKey(Task)
|
|
codename = models.CharField(max_length=32)
|
|
codedescr = models.CharField(max_length=255)
|
|
codevalue = models.CharField(max_length=255)
|
|
createtime = models.DateTimeField(auto_now_add=True)
|
|
createat = models.CharField(max_length=32, null=True, blank=True, editable=True)
|
|
updatetime = models.DateTimeField(auto_now=True)
|
|
updateat = models.CharField(max_length=32, null=True, blank=True, editable=True)
|
|
|
|
def __unicode__(self):
|
|
return self.codename
|
|
|
|
class Taskhistory(models.Model):
|
|
taskid = models.ForeignKey(Task)
|
|
userid = models.ForeignKey(User)
|
|
tasktype = models.CharField(max_length=32, blank=True, editable=True)
|
|
taskname = models.CharField(max_length=255, verbose_name="任务描述")
|
|
case_tag_all = models.CharField(max_length=8, null=True, blank=True, editable=True)
|
|
case_tag_pass = models.CharField(max_length=8, null=True, blank=True, editable=True)
|
|
case_tag_fail = models.CharField(max_length=8, null=True, blank=True, editable=True)
|
|
case_tag_error = models.CharField(max_length=8, null=True, blank=True, editable=True)
|
|
starttime = models.DateTimeField(blank=True, editable=True)
|
|
exectime = models.CharField(max_length=32, null=True, blank=True, editable=True)
|
|
reporturl = models.CharField(max_length=255, verbose_name="report Url", null=True)
|
|
build_name = models.CharField(max_length=32, null=True, blank=True, editable=True)
|
|
build_number = models.CharField(max_length=8, null=True, blank=True, editable=True)
|
|
|
|
def __unicode__(self):
|
|
return self.pk |