首页 > 其他分享 >自动化测试平台-项目表的增删改

自动化测试平台-项目表的增删改

时间:2022-11-14 21:14:38浏览次数:78  
标签:index 项目表 name form django obj 自动化 增删 import

项目准备

新建django项目,settings.py文件配置修改:

"""
Django settings for adminzdh project.
​
Generated by 'django-admin startproject' using Django 3.2.16.
​
For more information on this file, see
https://docs.djangoproject.com/en/3.2/topics/settings/
​
For the full list of settings and their values, see
https://docs.djangoproject.com/en/3.2/ref/settings/
"""
import os
from pathlib import Path
​
# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
# BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
​
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/3.2/howto/deployment/checklist/
​
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'django-insecure-tu#=94di%p)-z9%q^g0beh5moy-ufefdjecu3-*vbuwza^q@sx'
​
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
​
ALLOWED_HOSTS = []
​
​
# Application definition
​
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app01.apps.App01Config',
]
​
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
​
ROOT_URLCONF = 'adminzdh.urls'
​
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [BASE_DIR / 'templates']
        ,
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]
​
WSGI_APPLICATION = 'adminzdh.wsgi.application'
​
​
# Database
# https://docs.djangoproject.com/en/3.2/ref/settings/#databases
​
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}
​
​
# Password validation
# https://docs.djangoproject.com/en/3.2/ref/settings/#auth-password-validators
​
AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]
​
​
# Internationalization
# https://docs.djangoproject.com/en/3.2/topics/i18n/
# 改动
# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'zh-Hans'
# TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
​
USE_L10N = True
​
USE_TZ = True
​
​
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.2/howto/static-files/
​
STATIC_URL = '/static/'
# 新加
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static')
]
# Default primary key field type
# https://docs.djangoproject.com/en/3.2/ref/settings/#default-auto-field
​
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
​
View Code

 

新建static文件夹导入模板文件

 

 

路由配置urls.py:

from django.contrib import admin
from django.urls import path
from app01 import views
​
urlpatterns = [
    path('admin/', admin.site.urls),
    path('/', views.index, name="index"),
    path('index/', views.index, name="index")
]
View Code

 

视图app01/views.py:

from django.shortcuts import render, HttpResponse
​
​
# Create your views here.
​
def index(request):
    '''项目主页'''
    return render(request, "base.html")
​
View Code

 

模板templates/base.html:

<!DOCTYPE html>
<!--
This is a starter template page. Use this page to start your new project from
scratch. This page gets rid of all links and provides the needed markup only.
-->
<html lang="en">
<head>
    {% load static %}
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta http-equiv="x-ua-compatible" content="ie=edge">
​
    <title>邓鑫</title>
​
    <!-- Font Awesome Icons -->
    <link rel="stylesheet" href="{% static 'AdminLTE-master/plugins/fontawesome-free/css/all.min.css' %}">
    <!-- Theme style -->
    <link rel="stylesheet" href="{% static 'AdminLTE-master/dist/css/adminlte.min.css' %}">
{#    <link rel="stylesheet" href="{% static 'bootstrap-3.3.7-dist/css/bootstrap.min.css' %}">#}
    <!-- Google Font: Source Sans Pro -->
{#    <link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,400i,700" rel="stylesheet">#}
​
</head>
<body class="hold-transition sidebar-mini">
<div class="wrapper">
​
    <!-- Navbar -->
    <nav class="main-header navbar navbar-expand navbar-white navbar-light">
        <!-- Left navbar links -->
        <ul class="navbar-nav">
            <li class="nav-item">
                <a class="nav-link" data-widget="pushmenu" href="#"><i class="fas fa-bars"></i></a>
            </li>
            <li class="nav-item d-none d-sm-inline-block">
                <a href="{% static '/AdminLTE-master/index3.html' %}" class="nav-link">Home</a>
            </li>
            <li class="nav-item d-none d-sm-inline-block">
                <a href="#" class="nav-link">Contact</a>
            </li>
        </ul>
​
        <!-- SEARCH FORM -->
        <form class="form-inline ml-3">
            <div class="input-group input-group-sm">
                <input class="form-control form-control-navbar" type="search" placeholder="Search" aria-label="Search">
                <div class="input-group-append">
                    <button class="btn btn-navbar" type="submit">
                        <i class="fas fa-search"></i>
                    </button>
                </div>
            </div>
        </form>
​
        <!-- Right navbar links -->
        <ul class="navbar-nav ml-auto">
            <!-- Messages Dropdown Menu -->
            <li class="nav-item dropdown">
                <a class="nav-link" data-toggle="dropdown" href="#">
                    <i class="far fa-comments"></i>
                    <span class="badge badge-danger navbar-badge">3</span>
                </a>
                <div class="dropdown-menu dropdown-menu-lg dropdown-menu-right">
                    <a href="#" class="dropdown-item">
                        <!-- Message Start -->
                        <div class="media">
                            <img src="{% static 'AdminLTE-master/dist/img/user1-128x128.jpg' %}" alt="User Avatar"
                                 class="img-size-50 mr-3 img-circle">
                            <div class="media-body">
                                <h3 class="dropdown-item-title">
                                    Brad Diesel
                                    <span class="float-right text-sm text-danger"><i class="fas fa-star"></i></span>
                                </h3>
                                <p class="text-sm">Call me whenever you can...</p>
                                <p class="text-sm text-muted"><i class="far fa-clock mr-1"></i> 4 Hours Ago</p>
                            </div>
                        </div>
                        <!-- Message End -->
                    </a>
                    <div class="dropdown-divider"></div>
                    <a href="#" class="dropdown-item">
                        <!-- Message Start -->
                        <div class="media">
                            <img src="{% static 'AdminLTE-master/dist/img/user8-128x128.jpg' %}" alt="User Avatar"
                                 class="img-size-50 img-circle mr-3">
                            <div class="media-body">
                                <h3 class="dropdown-item-title">
                                    John Pierce
                                    <span class="float-right text-sm text-muted"><i class="fas fa-star"></i></span>
                                </h3>
                                <p class="text-sm">I got your message bro</p>
                                <p class="text-sm text-muted"><i class="far fa-clock mr-1"></i> 4 Hours Ago</p>
                            </div>
                        </div>
                        <!-- Message End -->
                    </a>
                    <div class="dropdown-divider"></div>
                    <a href="#" class="dropdown-item">
                        <!-- Message Start -->
                        <div class="media">
                            <img src="{% static 'AdminLTE-master/dist/img/user3-128x128.jpg' %}" alt="User Avatar"
                                 class="img-size-50 img-circle mr-3">
                            <div class="media-body">
                                <h3 class="dropdown-item-title">
                                    Nora Silvester
                                    <span class="float-right text-sm text-warning"><i class="fas fa-star"></i></span>
                                </h3>
                                <p class="text-sm">The subject goes here</p>
                                <p class="text-sm text-muted"><i class="far fa-clock mr-1"></i> 4 Hours Ago</p>
                            </div>
                        </div>
                        <!-- Message End -->
                    </a>
                    <div class="dropdown-divider"></div>
                    <a href="#" class="dropdown-item dropdown-footer">See All Messages</a>
                </div>
            </li>
            <!-- Notifications Dropdown Menu -->
            <li class="nav-item dropdown">
                <a class="nav-link" data-toggle="dropdown" href="#">
                    <i class="far fa-bell"></i>
                    <span class="badge badge-warning navbar-badge">15</span>
                </a>
                <div class="dropdown-menu dropdown-menu-lg dropdown-menu-right">
                    <span class="dropdown-header">15 Notifications</span>
                    <div class="dropdown-divider"></div>
                    <a href="#" class="dropdown-item">
                        <i class="fas fa-envelope mr-2"></i> 4 new messages
                        <span class="float-right text-muted text-sm">3 mins</span>
                    </a>
                    <div class="dropdown-divider"></div>
                    <a href="#" class="dropdown-item">
                        <i class="fas fa-users mr-2"></i> 8 friend requests
                        <span class="float-right text-muted text-sm">12 hours</span>
                    </a>
                    <div class="dropdown-divider"></div>
                    <a href="#" class="dropdown-item">
                        <i class="fas fa-file mr-2"></i> 3 new reports
                        <span class="float-right text-muted text-sm">2 days</span>
                    </a>
                    <div class="dropdown-divider"></div>
                    <a href="#" class="dropdown-item dropdown-footer">See All Notifications</a>
                </div>
            </li>
            <li class="nav-item">
                <a class="nav-link" data-widget="control-sidebar" data-slide="true" href="#"><i
                        class="fas fa-th-large"></i></a>
            </li>
        </ul>
    </nav>
    <!-- /.navbar -->
​
    <!-- Main Sidebar Container -->
    <aside class="main-sidebar sidebar-dark-primary elevation-4">
        <!-- Brand Logo -->
        <a href="{% static 'AdminLTE-master/index3.html' %}" class="brand-link">
            <img src="{% static 'AdminLTE-master/dist/img/AdminLTELogo.png' %}" alt="AdminLTE Logo"
                 class="brand-image img-circle elevation-3"
                 style="opacity: .8">
            <span class="brand-text font-weight-light">AdminLTE 3</span>
        </a>
​
        <!-- Sidebar -->
        <div class="sidebar">
            <!-- Sidebar user panel (optional) -->
            <div class="user-panel mt-3 pb-3 mb-3 d-flex">
                <div class="image">
                    <img src="{% static 'AdminLTE-master/dist/img/user2-160x160.jpg' %}" class="img-circle elevation-2"
                         alt="User Image">
                </div>
                <div class="info">
                    <a href="#" class="d-block">Alexander Pierce</a>
                </div>
            </div>
​
            <!-- Sidebar Menu -->
            <nav class="mt-2">
                <ul class="nav nav-pills nav-sidebar flex-column" data-widget="treeview" role="menu"
                    data-accordion="false">
                    <li class="nav-item">
                        <a href="#" class="nav-link">
                            <i class="nav-icon fas fa-th"></i>
                            <p>
                                Simple Link
                                <span class="right badge badge-danger">New</span>
                            </p>
                        </a>
                    </li>
                    <li class="nav-item">
                        <a href="#" class="nav-link">
                            <i class="nav-icon fas fa-th"></i>
                            <p>
                                Simple Link
                                <span class="right badge badge-danger">New</span>
                            </p>
                        </a>
                    </li>
                    <li class="nav-item">
                        <a href="#" class="nav-link">
                            <i class="nav-icon fas fa-th"></i>
                            <p>
                                Simple Link
                                <span class="right badge badge-danger">New</span>
                            </p>
                        </a>
                    </li>
                </ul>
            </nav>
            <!-- /.sidebar-menu -->
        </div>
        <!-- /.sidebar -->
    </aside>
​
    <!-- Content Wrapper. Contains page content -->
    <div class="content-wrapper">
        <!-- Content Header (Page header) -->
        <div class="content-header">
            <div class="container-fluid">
                <div class="row mb-2">
                    <div class="col-sm-6">
                        {% block breadcrumb %}
                        <ol class="breadcrumb">
                            <li class="breadcrumb-item"><a href="#">Home</a></li>
                            <li class="breadcrumb-item active">Starter Page</li>
                        </ol>
                        {% endblock %}
                        {#            <h1 class="m-0 text-dark">Starter Page</h1>#}
                        
                    </div><!-- /.col -->
                </div><!-- /.row -->
            </div><!-- /.container-fluid -->
        </div>
        <!-- /.content-header -->
​
        <!-- Main content -->
        <div class="content">
            <div class="container-fluid">
                <div class="row">
                    <div class="col-lg-12">
​
                        {% block content %}
                            <div class="card card-primary card-outline">
                            <div class="card-header">
​
                                <h5 class="m-0">title</h5>
​
                            </div>
                            <div class="card-body">
                            </div>
                        </div>
                        {% endblock %}
​
                    </div>
                    <!-- /.col-md-6 -->
                </div>
                <!-- /.row -->
            </div><!-- /.container-fluid -->
        </div>
        <!-- /.content -->
    </div>
    <!-- /.content-wrapper -->
​
    <!-- Control Sidebar -->
    <aside class="control-sidebar control-sidebar-dark">
        <!-- Control sidebar content goes here -->
        <div class="p-3">
            <h5>Title</h5>
            <p>Sidebar content</p>
        </div>
    </aside>
    <!-- /.control-sidebar -->
​
    <!-- Main Footer -->
    <footer class="main-footer">
        <!-- To the right -->
        <div class="float-right d-none d-sm-inline">
            Anything you want
        </div>
        <!-- Default to the left -->
        <strong>Copyright &copy; 2014-2019 <a href="https://adminlte.io">AdminLTE.io</a>.</strong> All rights reserved.
    </footer>
</div>
<!-- ./wrapper -->
​
<!-- REQUIRED SCRIPTS -->
​
<!-- jQuery -->
<script src="{% static 'AdminLTE-master/plugins/jquery/jquery.min.js' %}"></script>
<!-- Bootstrap 4 -->
<script src="{% static 'AdminLTE-master/plugins/bootstrap/js/bootstrap.bundle.min.js' %}"></script>
<!-- AdminLTE App -->
<script src="{% static 'AdminLTE-master/dist/js/adminlte.min.js' %}"></script>
<script src="{% static 'bootstrap-3.3.7-dist/js/bootstrap.min.js' %}"></script>
</body>
</html>
​
 
View Code

 

项目表结构设计:app01/models.py:

from django.db import models
​
​
# Create your models here.
​
class It(models.Model):
    it_name = models.CharField(max_length=32, default="", verbose_name="项目名称")
    it_desc = models.TextField(max_length=255, default="", verbose_name="项目描述")
    it_start_title = models.DateField(verbose_name="项目开始时间")
    it_end_title = models.DateField(verbose_name="项目结束时间")
​
    def __str__(self):
        return self.it_name
​
View Code

 

数据迁移:

python manage.py makemigrations
python manage.py migrate

 

项目表的增删改查:

views.py:

from django.shortcuts import render, HttpResponse, redirect
from django.http import JsonResponse
from app01 import models
from utils.MyModelForm import ItModelForm
​
​
​
def index(request):
    """ 项目主页 """
    if request.method == "POST":
        return JsonResponse({"code": 0, "message": "项目主页的post请求,非法"})
    else:
        it_obj = models.It.objects.all()
        # print(1111111, it_obj)
        return render(request, 'index.html', {"it_obj": it_obj})
​
def add_it(request):
    """ 添加项目 """
    if request.method == "POST":
        form_data = ItModelForm(request.POST)
        if form_data.is_valid():
            form_data.save()
            return redirect('/index/')
        else:
            return render(request, 'add_it.html', {"it_form_obj": form_data})
    else:
        it_form_obj = ItModelForm()
        return render(request, 'add_it.html', {"it_form_obj": it_form_obj})
​
def edit_it(request, pk):
    """ 编辑项目, pk:项目的pk """
    it_obj = models.It.objects.filter(pk=pk).first()
    if request.method == "POST":
        form_data = ItModelForm(request.POST, instance=it_obj)
        if form_data.is_valid():
            form_data.save()
            return redirect('/index/')
        else:
            return render(request, 'add_it.html', {"it_form_obj": form_data})
    else:
        it_form_obj = ItModelForm(instance=it_obj)
        return render(request, 'edit_it.html', {"it_form_obj": it_form_obj})
​
​
def delete_it(request, pk):
    """ 删除项目表记录,pk:项目的pk """
    models.It.objects.filter(pk=pk).delete()
    return redirect('/index/')
​
​
View Code

 

urls.py:

from django.contrib import admin
from django.urls import path
from app01 import views
​
urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.index, name="index"),
    path('index/', views.index, name="index"),
    path('add_it/', views.add_it, name='add_it'),
    path(r'edit_it/(?P<pk>\d+)$', views.edit_it, name='edit_it'),
    path(r'delete_it/(?P<pk>\d+)$', views.delete_it, name='delete_it'),
]
View Code

 


modelform

it表

法1

utils/mymodelform.py:

​
from django.forms import ModelForm
from django import forms
from django.forms import widgets as wid
from app01 import models
​
class ItModelForm(ModelForm):
    class Meta:
        model = models.It
        fields = "__all__"
    bootstrapClass_filter = ['it_start_time', 'it_end_time']
    it_start_time = forms.DateField(label="开始时间", widget=wid.DateInput(attrs={"class": "form-control", 'type': "date"}))
    it_end_time = forms.DateField(label="结束时间", widget=wid.DateInput(attrs={"class": "form-control", 'type': "date"}))
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        for name, field in self.fields.items():
            if name in self.bootstrapClass_filter:
                continue
            old_class = field.widget.attrs.get('class', "")
            field.widget.attrs['class'] = '{} form-control'.format(old_class)
            field.widget.attrs['placeholder'] = '请输入%s' % (field.label,)
View Code

 

法2

from django.forms import ModelForm
from django import forms
from django.forms import widgets as wid
from app01 import models
​
class ItModelForm(ModelForm):
    class Meta:
        model = models.It
        fields = "__all__"
        # 法2
        labels = {
            "it_name": "项目名称",
            "it_desc": "项目描述",
            "it_start_tile": "项目开始时间",
            "it_end_tile": "项目结束时间",
        }
        error_messages = {
            "it_name": {"required": "不能为空"},
            "it_desc": {"required": "不能为空"},
            "it_start_tile": {"required": "不能为空"},
            "it_end_tile": {"required": "不能为空"},
        }
        widgets = {
            "it_name": wid.Input(attrs={"class": "form-control", "placeholder": "输入项目名称"}),
            "it_desc": wid.Textarea(attrs={"class": "form-control", "placeholder": "输入项目名称"}),
            "it_start_time": wid.DateInput(attrs={"class": "form-control", 'type': "date"}),
            "it_end_time": wid.DateInput(attrs={"class": "form-control", 'type': "date"}),
        }
View Code

 

templates模板

前端模板 adminLTE:

我们copy的是static/AdminLTE-master/starter.index 修改静态文件的引用方式

add_it.html:

{% extends 'base.html' %}
​
{% block breadcrumb %}
    <ol class="breadcrumb">
        <li class="breadcrumb-item"><a href="{% url 'index' %}">Index</a></li>
        <li class="breadcrumb-item">项目列表</li>
        <li class="breadcrumb-item">添加项目</li>
    </ol>
{% endblock %}
​
​
{% block content %}
{#    <div class="card-header">#}
{#        <h3>添加项目</h3>#}
{#    </div>#}
{#    <div class="card-body">#}
        <form action="" method="post" novalidate>
            {% csrf_token %}
            {% for foo in it_form_obj %}
​
                <div>
                    <label for="{{ foo.id_for_label }}">{{ foo.label }}</label>
                    {{ foo }}
                </div>
                <span style="color: red;">{{ foo.errors.0 }}</span>
            {% endfor %}
            <input type="submit" class="btn btn-success" value="提交">
        </form>
{#    </div>#}
​
​
​
​
{% endblock %}
View Code

 

edit_it.html:

{% extends 'base.html' %}
​
{% block breadcrumb %}
    <ol class="breadcrumb">
        <li class="breadcrumb-item"><a href="{% url 'index' %}">Index</a></li>
        <li class="breadcrumb-item">项目列表</li>
        <li class="breadcrumb-item">添加项目</li>
    </ol>
{% endblock %}
​
​
{% block content %}
{#    <div class="card-header">#}
{#        <h3>添加项目</h3>#}
{#    </div>#}
{#    <div class="card-body">#}
        <form action="" method="post" novalidate>
            {% csrf_token %}
            {% for foo in it_form_obj %}
​
                <div>
                    <label for="{{ foo.id_for_label }}">{{ foo.label }}</label>
                    {{ foo }}
                </div>
                <span style="color: red;">{{ foo.errors.0 }}</span>
            {% endfor %}
            <input type="submit" class="btn btn-success" value="提交">
        </form>
​
{#    </div>#}
​
​
​
​
​
{% endblock %}
​
​
View Code

 


index.html:

{% extends 'base.html' %}
​
{% block breadcrumb %}
    <ol class="breadcrumb">
        <li class="breadcrumb-item"><a href="{% url 'index' %}">Index</a></li>
        <li class="breadcrumb-item active">项目列表</li>
    </ol>
{% endblock %}
​
​
​
{% block content %}
    <div class="card card-primary card-outline">
        <div class="card-header">
            <a href="{% url 'add_it' %}">添加项目</a>
        </div>
    </div>
    {% if it_obj %}
        <div class="card card-primary">
            <div class="card-header">
            <a href="{% url 'add_it' %}">添加项目</a>
        </div>
            <table class="table table-striped table-hover table-bordered">
                    <thead>
                    <tr>
                        <th>序号</th>
                        <th>名称</th>
                        <th>描述</th>
                        <th>开始时间</th>
                        <th>结束时间</th>
                        <th>操作</th>
                    </tr>
                    </thead>
​
                    <tbody>
                    {% for foo in it_obj %}
                        <tr>
                            <td>{{ forloop.counter }}</td>
                            <td>{{ foo.it_name }}</td>
                            <td>{{ foo.it_desc }}</td>
                            <td>{{ foo.it_start_time }}</td>
                            <td>{{ foo.it_end_time }}</td>
                            <td>
                                <a href="{% url 'delete_it' foo.pk %}" class="btn btn-danger btn-sm">删除</a>
                                <a href="{% url 'edit_it' foo.pk %}" class="btn btn-info btn-sm">编辑</a>
                                <a href="" class="btn btn-warning btn-sm">添加用例</a>
                                <a href="" class="btn btn-success btn-sm">查看用例列表</a>
                            </td>
                        </tr>
                    {% endfor %}
​
                    </tbody>
            </table>
        </div>
    {% else %}
        没有数据,去 <a href="{% url 'add_it' %}">创建</a>
    {% endif %}
​
{% endblock %}
​
View Code

 


 

标签:index,项目表,name,form,django,obj,自动化,增删,import
From: https://www.cnblogs.com/erhuoyuan/p/16890390.html

相关文章

  • 自动化测试平台需求
    接口自动化平台管理所有的接口:接口的增删改查一键执行接口,并生成测试报告批量执行下载报告批量导入从Excel表格中定时任务每天定时(凌晨1点)检......
  • springboot框架中service层抽取增删改查并封装
    1、BaseService.javaimportcatl.mapper.BaseMapper;importtk.mybatis.mapper.entity.Example;importjavax.annotation.Resource;importjava.util.Collections;import......
  • 两行代码完成特征工程-基于Python的特征自动化选择代码(提供下载)
    实现的功能该选择器基于Python编写,有五种方法来标识要删除的特征:缺失值唯一值共线特征零重要性特征低重要性特征使用方法 特征选择器(FeatureSelector)的用法在这个Jupyter......
  • 自动化层次总结
      一、接口自动化应用框架:python+request+pytest+allure   testcase目录:用例目录一个模块创建一个目录每个目录中一个py文件和若干yaml文件py文件中一般......
  • Python 自动化中三种等待时间的详解
    自动化测试,是交由机器来执行的一种测试手段,用于提升测试效率,意味着每一次的自动化测试都需要有非常高的成功率,才可以达到提升效率的作用。在自动化测试中,其实就是通过代码......
  • mongodb增删改查 及批量操作(二)
    1.增加insert插入多笔数据db.stu.insert([{_id:3,sn:'003',name:'zhangfei'},{_id:4,sn:'004',name:'guanyu'},{sn:'005',name:'liubei'}])增加复杂的文档db.stu.insert({na......
  • 使用GitHub Actions实现自动化部署
    前言大家在工作中想必都是通过自动化部署来进行前端项目的部署的,也就是我们在开发完某个需求时,我们只需要将代码推送到某个分支,然后就能自动完成部署,我们一般不用关心项目是......
  • Java开发学习(四十一)----MyBatisPlus标准数据层(增删查改分页)开发
    一、标准CRUD使用对于标准的CRUD功能都有哪些以及MyBatisPlus都提供了哪些方法可以使用呢?我们先来看张图:1.1环境准备这里用的环境就是Java开发学习(四十)----MyBat......
  • 拿下阿里自动化测试岗23k*14薪offer的全程面试记录解析以及总结
    一、自我介绍面试官您好!我叫xx,来自深圳,毕业之后一直从事于软件测试的工作,有做过保险、金融、电商等项目;有做过做功能测试、接口测试,自动化测试,在工作中积极主动、可以独立的......
  • 如何实现自动化整理桌面
    如何实现自动化整理桌面文章目录​​如何实现自动化整理桌面​​​​第一步,我们要获取文件夹的内容:​​​​第二步,设置文件的后缀​​​​第三步:获取文件的后缀​​​​第四......