使用Django快速完成测试数据构造(一)

身为中台测试,很多功能需要依赖前端数据支撑,可以说是“测试5分钟,造数半小时”,实在无法忍受,于是学习了python Django框架,想做一个页面化的工具一键生成想要的数据,于是结合自身技能get情况、寻找最快实现方案,列了个list:
1.python Django框架,网上找一些视频教程,参考书推荐虫师的《python web接口开发与测试》
2.实现前端页面,想要做一个左边菜单右边页面的布局,回顾html、css实现左右布局页面,bootstrap实现一些如菜单展示收起效果、下拉列表等类型通用控件功能
然后就开始行动,遇到问题千万不要退缩,网上有很多解决攻略的哦。

------第一阶段:实现简单功能-以页面创建用户为例展开分享------

一、Django环境搭建:

完成python、django、pycharm工具安装
请自行百度,攻略很多

二、Django基础

2.1 Django工程目录

(1)创建工程:django-admin.py startproject testtools
(2)工程目录:

图片.png

init.py: 初始化文件 同样也标志我们的app可以被引用
django默认使用SQLite,连接我们mysql数据库在此文件添加如下代码:

 import pymysql
 pymysql.install_as_MySQLdb()

setting.py:Django配置文件,配置app、数据库等, django默认使用SQLite,连接我们mysql数据库-db_Hdf库需要修改DATABASES为:

DATABASES = {
      'default': {                                  
           'ENGINE': 'django.db.backends.mysql',
           'NAME': 'dbname',
           'USER': 'username',
           'PASSWORD': 'pwd',
           'HOST': 'ip地址',
           'PORT': '3306',
                 }
}

urls.py:Django项目的url声明
manage.py:命令行工具,如可以使用python manage.py startapp user创建user应用

2.2 Django应用目录

(1)创建应用:python manage.py startapp user
(2)应用目录:

图片.png

migrations.py:用于记录models中数据的变更,如创建模型:

admin.py:映射models中的数据到Django自带的admin后台
http://127.0.0.1:8000/admin/ 我们用不到,有兴趣的请自行研究

# Generated by Django 2.2.2 on 2019-06-09 02:48
from django.db import migrations, models

class Migration(migrations.Migration):
    initial = True
    dependencies = [
    ]

    operations = [
        migrations.CreateModel(
            name='User',
            fields=[
                ('userId', models.AutoField(primary_key=True, serialize=False)),
                ('userName', models.TextField()),
                ('createTime', models.DateTimeField()),
            ],
        ),
    ]

apps.py:用于应用程序配置,我们不需要操作此文件
models.py:模型文件–模型文件中的类对应数据库中的表,如

from django.db import models

# Create your models here.

#创建User类
# class User(models.Model):
#     #userId --数字类型,自增,主键
#     userId = models.AutoField(primary_key=True)
#     #userName--字符串类型
#     userName = models.TextField()
#     #userMobile--字符串类型
#     userMobile = models.TextField
#     #createTime--日期类型
#     createTime = models.DateTimeField(auto_now=True)
#     其他字段......
class User(models.Model):
    get_latest_by = '字段名'
    变量userid = models.AutoField(db_column='userId数据库字段名', primary_key=True)  # Field name made lowercase.
    变量username = models.CharField(db_column='userName数据库字段', unique=True, max_length=50)  # Field name made lowercase.
。。。其他字段

    class Meta:
        managed = False
        db_table = 'tab_User'

views.py:Django的视图文件,控制前端页面响应交互
另外,除以上自带目录外,我们需要创建tempaltes目录,需在此目录下Django模板
(3)在Django工程setting.py中添加应用user:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'user',
]

三、Django的MTV模式:

M(Modle):模型类-对应数据库表,类属性–表字段,
T(Tempalte):Django模版–html页面
V(View):视图函数,控制前端页面的展示
说明:Django的Controller通过urls.py直接进行配置

四、已有数据库如何自动生成模型:

使用命令:python manage.py inspectdb > user/models.py
执行后查看models.py文件,已有用户表所在库所有表对应的模型
----模型数据就绪

五、Django模板编写

布局:实现点击左侧导航“创建用户”-右侧显示创建用户页面:
在tempaltes目录下创建main.html文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>主页面</title>
    <style>
        div{
            margin: 0px;
        }
        #top{
            width: 100%;
            height: 50px;
          background-color: azure;
        }
        #center{
            width: 100%;
            height: 500px;
            background-color: azure;
        }
        #left{
            width: 20%;
            background-color: cadetblue;
            height: 500px;
            float: left;
        }
        #right {
            width: 80%;
            background-color: azure;
            height: 500px;
            float: left;
        }
        iframe {
            background-color: cornsilk;
            height: 500px;
            width:100%;
            float: left;
        }
    </style>
</head>
<body>
<!-- 2-2布局 -->
<div id="top">
    <header>
        <h1 align="center">中台造数工具</h1>
    </header>
</div>
<div id="center">
    <div id="left">
        <ul>用户管理模块
            <!-- href属性设置跳转页面链接,target属性设置显示位置-->
  <li><a href="/user/createuser/" target="iframe_right">创建用户</a></li> 
        </ul> 
    </div>
    <div id="right">
        <!-- iframe设置name属性,其他元素将target属性设置为iframe元素的name值来显示在iframe中-->
 <iframe name="iframe_right"></iframe>
    </div>
</div>
</body>
</html>

2.创建createuser.html文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>创建用户</title>
</head>
<body>
<h2>创建用户</h2>
<form method="POST" action="/user/createuser_action/">
    <input type="text" name="userName" placeholder="请输入用户名" />
    <button type="submit">添加</button>
    <div> <h1>{{ message }}</h1></div>
</form>
</body>
</html>

六、编写试图函数控制页面展示及用户输入后处理函数

views.py中添加
createuser()和createuser_action()函数
显示页面、处理表单提交请求添加用户

from django.shortcuts import render
from .models import TabUser
'''
author:xxx
功能:
1.创建新用户
创建日期:xxxx-xx-xx
最新修改:xxxx-xx-xx  by xxx
'''

# Create your views here.
def index(request):
    response = render(request,"main.html")
    return response

#显示添加用户页面
def createuser(req):
    return render(req, "createuser.html")

#创建新用户
def createuser_action(request):

    #接收用户输入值
  userName = request.POST.get("userName","")

    try:
        #取最大userid+1作为新用户的userid
        userId = TabUser.objects.order_by('-userid')[0].fld_userid + 1
        # 增加数据并保存
        TabUser.objects.create(userid=userId, username=userName)
        message = "添加成功,userName:" + str(userName) + ",userId:" + str(userId)

    except Exception:
        message = "添加失败,请检查填写信息,或该用户名已存在!"
 
 return render(request, "createuser.html", {"message": message})

七、配置路由

Django项目setting.py中按照如下进行路由配置:

from django.contrib import admin
from django.urls import path
from user import views

urlpatterns = [
    path(r"index/",views.index),
    path(r"user/createuser/",views.createuser),
    path(r"user/createuser_action/", views.createuser_action),
]

八、运行项目:

python manage.py runserver
浏览器访问:http://127.0.0.1:8000/index/
添加用户你就可以使用啦

图片.png

(PS:使其他人使用只需要在setting.py中添加如下代码,
启动命令 python manage.py runserver 0.0.0.0:8000即可)

ALLOWED_HOSTS = ["*", ]

九、拓展:平台还以做什么:

1.完成数据构造

类型1:数据处理单一

--如单纯的像数据库中插入数据,按照如上流程开发即可

类型2:数据处理复杂

如创建xx类型xx交流中的一个功能,要提交订单、支付、后台审核、接单才能得到我们想要的数据,真实场景会向多个数据库插入数据,此类数据构造,需要使用python模拟客户端请求,下次再做改分享

2.远程执行脚本等

比如输入云主机地址,选择要执行的脚本(可以做成下拉列表),输入脚本参数等,一键执行脚本

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,658评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,482评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,213评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,395评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,487评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,523评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,525评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,300评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,753评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,048评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,223评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,905评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,541评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,168评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,417评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,094评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,088评论 2 352

推荐阅读更多精彩内容