GVKun编程网logo

基于 Jmeter 的 web 端接口自动化测试平台(jmeter接口自动化案例)

12

此处将为大家介绍关于基于Jmeter的web端接口自动化测试平台的详细内容,并且为您解答有关jmeter接口自动化案例的相关问题,此外,我们还将为您介绍关于flask+Python3实现的的API自动

此处将为大家介绍关于基于 Jmeter 的 web 端接口自动化测试平台的详细内容,并且为您解答有关jmeter接口自动化案例的相关问题,此外,我们还将为您介绍关于flask + Python3 实现的的 API 自动化测试平台 ---- IAPTest 接口测试平台(总结感悟篇)、Gitee 推荐 | 自动化测试平台 AutoMeter、HttpRunner Manager接口自动化测试平台实践(Windows)、HttpRunnerManager 接口自动化测试平台 搭建实践的有用信息。

本文目录一览:

基于 Jmeter 的 web 端接口自动化测试平台(jmeter接口自动化案例)

基于 Jmeter 的 web 端接口自动化测试平台(jmeter接口自动化案例)

简介

基于之前的 react+unittest+flask 的接口自动化平台开发经验,和趟过的坑,我重新开发了这个接口自动化平台。
平台前端采用的 antd+dva+umi 的 antd-pro 模板,结合平台业务设计开发。后端采用的 flask+sqlalchemy+Blueprint,结构化更加清晰,ORM 的数据库操作更加稳定。自动化脚本的执行部分,我采用的是扩展性和针对性更强的 jmeter。
demo

框架

功能点

  • 批量导入 har 包生成接口用例
  • 接口用例分组树形展示
  • 用例编辑失焦自动保存
  • 用例编写提供快捷调试模块
  • 支持多类型参数,json + 文本两种校验
  • 支持同一个项目中接口参数传递
  • 提供即时任务 + 每日定时任务两种任务集
  • 全局 cookie 管理,全局默认参数,全局请求头设置
  • 可编排的用例执行顺序
  • 测试报告、简要性能结果图表化展示
  • 定时任务执行结果图表化展示,持续监控
  • 首页展示系统全局概要信息
  • docker 一键部署,启动自动同步更新

组件

首页

项目管理

定时任务列表

新建任务

新建用例 && 调试

即时任务报告

定时任务报告

安装

前提:

  • 一个已经在跑的 MySQL 数据库
  • 有个 IAT 库已经导入项目 sql ( db 文件在 IAT/server/db_sql/IAT.sql 先新建一个数据库名字为 IAT,在导入上面 sql 即可。)

有特殊网络要求的,可以 download 代码编译部署。如果服务器能连上外网,可以直接通过我已经封装的 docker 镜像安装。

方法 1:Docker 镜像安装

  • 我的镜像中开启了 ssh 服务,你可以通过挂载宿主机的一个端口来登录容器,默认账号为:root,密码为:root
  • 前端我挂载的是 8089,看个人需要设置
  • 命令行末尾参数,需要指定已经配置好的 MySQL

docker 命令安装

已知 Centos 安装的容器会有异常,建议使用其他系统。
优化了原来的容器时区问题,已经启动了的同学也不必担心,把原来的容器停止后,再创建个新的即可,数据是取得数据库,不会变。

# docker run --env PATH=/root/apache-jmeter-5.0/bin:$PATH -t -i -d -p 8089:80 -p 9022:22 --name=iat6 ownerworld/iat:0.0.6 /bin/start.sh "root:root@127.0.0.1:3306"

方法 2:编译安装

这种需要你有一定的运维基础和开发经验。默认你已有 node 和 python 环境。

下载代码

$ git clone https://github.com/t880216t/IAT.git

安装前端依赖

$ cnpm i

打包前端

$ npm run build

生成的 dist 文件夹便是前端部署文件

后端

服务端代码在 server 文件夹中,用的 python flask 框架不需要打包,建议用 gunicorn 启动。(确保你已经在 server 文件夹中)

$ pip install -r requirements.txt
$ gunicorn -w4 -b 0.0.0.0:5000 run:app

flask + Python3 实现的的 API 自动化测试平台 ---- IAPTest 接口测试平台(总结感悟篇)

flask + Python3 实现的的 API 自动化测试平台 ---- IAPTest 接口测试平台(总结感悟篇)

 

         前言:

     在前进中去发现自己的不足,在学习中去丰富自己的能力,在放弃时想想自己最初的目的,在困难面前想想怎么踏过去。在不断成长中去磨炼自己。

 正文:

    时间轴

                 flask + Python3 实现的的 API 自动化测试平台 ---- IAPTest 接口测试平台 这篇文章已经发表了两个多月了,IAPTest 测试平台从最初 17 年 6 月份构想的开始,到 17 年 7 月 13 的正式创立代码仓库,到 7 月 21 日第一版的完结,再到 7 月 23 日的阿里云的部署。期间多次调试,多次去修改,在十多天的开发中,第一版上线了,因为有之前 jiekou-python3 的经验,在接口方面的开发进度快了许多,可是部署的过程中不止一次去修改其中的 bug,在本地测试完毕为何在 liunx 的服务器上部署出现了问题,其实很简单,重要的是没有考虑到平台的兼容性,走了许多的坑,在部署后,发到脉脉,qq 群里,收到了很多人反馈,接着有开始改进,出来了第二版,第三版,并且在这个过程中,对模板进行了优化,在后续的版本增加了钉钉群通知等功能,最近又增加了权限控制。经过 121 次的提交,经过了三个重大版本的更新,目前的测试平台已经开过走过了 7 个多月的时间,受到了很多好评。开源地址:https://github.com/liwanlei/FXTest

 

            历程

      从一开始的构思,设想,到现在的 120 多次的提交,7 个多月开发,经过很多人发来的建议,有来自华为,搜狗等公司的一线工作者的建议,也有不少网友和通道人士给来的意见,以及在 testerhome 等论坛上吸收了很多大佬的优秀的分享。在这么多天的开发过程中,走过了不少的坑,在不断的学习中去不足了自己的不足,在不断的迭代去开发的过程中,自己收获了很多,从一开始自己在写第一版的需求文档的时候。就改动不少,自己也产生了不少的疑惑,就看了所有能够看到的框架,想到了自己所有接触到的接口测试的东西,开始来编写这个框架的第一个需求,中间删改了许多,于是乎,第一版需求在不断的打磨中产生了,如下图。

 当时自己把能想到的地方,都能做了一遍,在第一版的雏形中,自己设计出来了想要的功能,推出来第一版后,在网络上收集不少的意见,自己也有了自己的一些新的想法,于是乎,接着去设计了第二版,

  相对于第一版,第二版更加让平台显得灵活,也吸取了第一版的教训,并且对原有的代码进行重构,加上一些自己的想法,融合了自己的一些想法,利用自己的休息时间,不会了用百度,上 google,迭代出来了 2.0,在 2.0 时期的版本受到了很多人体验,阿里云的每天访问量都会有不少,在 2.0 时期,也有搜狗等大佬们给了自己的建议,在使用中,有的人给出来实践中遇到的问题,在经过几次指导后,自己技术上提升,对系统有着更加深刻的规划,开始完善 3.0 版本,

 

      看到 3.0 的需求,慢慢的平台变得更加灵活,3.0 部分需求没有完善,但是定时任务的开发,mock 的开发,让现有的系统更加能够运用到工作中去,不断打磨自己的产品,在 3.0 后,在自己的实际工作中发现,到 3.0 了,权限系统还不完善,我就接着做了一个分支,思考了一周吧,找到了思路,然后去开发了第一版的 新的权限系统。系统管理员,项目管理员,成员只能看到所属的项目,让平台更加能够在真实的环境的利用。目前项目仍在长期的维护过程中。代码会进一步优化重构。

 

       感悟

 

     不管是之前的学习的 python 的初衷还是后来学习的过程中的感悟,所学与所做结合起来。 在公司内部不少的小脚本的开发,到独立开发自动化测试,再到回来成型的测试框架。从最初学习 python 的 web 框架,到 web 框架落地到自己的工作中,这一切都是一步一个脚印走出来的。回想开发 IAPTest 这段日子,充实,忙碌,纠结,无悔。这四个词来概括吧。 充实:因为从日常的测试工作后,在业余抽时间去完成这个的开发,周末大门不出二门不迈的地方,坐那里一写就是一上午,或者一下午,有时候凌晨一两点。百度,google 乱翻上阵去找答案,不到四级水平的英语,去读外语,苦难重重,每天都会有收获,每一步都会有成长。回想这段日子,是那么的充实,看着自己的作品被人膜拜,心里是那么的满足。充实的过好每个周末,充实的过好每次业余时间。   忙碌:除了日常的测试,下班后的做饭等,其他时间都去来做这个事,我知道这不是最好的,但是这是努力的结果,这不是最优秀的框架,最优秀的平台。但是锻炼了我让我越发变得优秀。忙碌的时候,不能忘记自己的劳苦,忙碌的日子不可怕,可怕的是停止不前,大胆的往前走。 纠结:中途有过放弃,有过找不到解决的思路,想要停止开发,停止维护,可是冷静下来想想,我不是富二代,不是官二代,不努力怎么成就明天的美好,纠结一番后,我还是会大步往前走。无悔:忙碌充实纠结过去,平台还是出来了,大家的建议也不断到来,大家的赞赏不断到来,获得了掌声,获得了赞许,收获满满。体验到了开发,在测试的角度去尽量让平台日趋完善。

   

       学习怎么落地?

 

            不少网友在 qq 上问我,怎么将你所学的东西落地,怎么与项目结合起来。其实我一开始也找不到落脚点,后来我慢慢找到了,比如老大让我写个脚本,说监控服务器上面的接口,我说这有啥,可是当我用到了一次,在线上都没有反馈,我的脚本都能给我更好的反馈。在用户没有反馈的时候,我就已经掌握了 bug,并且迅速让研发解决,我在想,这不是一次好的落地吗,需求是老大给的,脚本是我写的,落地:监控线上的几个经常出错接口,后来我进行了版本的升级,为何升级,考虑到不方便,接受邮件,公司用钉钉,人人都有钉钉,为何不升级通知到上钉钉呢,翻阅钉钉开发文档,完美的升级过去,后来我实验了一个 3 分钟达到多少次,再去报警,实例   ,再次升级过去,进行了两次的迭代,让功能更加完善,更加符合真实的需求。推动两次升级来源于我的想法,就是想简单,就是想让问题更加准确。  怎么落地,怎么让你的所学用到你的工作中,让你的所学使单一重复的测试变得简单,节省时间,减少成本,找到切入点。比如每次测试,不变的模块很多年都不去变化,那么你用自动化去测试,让自己去测改变的部分,节省了时间。 学的能用到才是道理,找到一个合适的点。  再比如压测,我也是在公司线上出现问题后,运维提出来了怎么来解决,可是我学过 jmeter。但是没有实战,找到了实战的地方了,你实战不。不落地吗,肯定落地,解决实际问题。去用你的所学解决你遇到问题。用啥学啥,找到落地的点,进入落地阶段。总结落地的成果。

 

      学 python 还是学 java?

 

      这个问题不少人问我,我说 python 入门是简单的,的确 python 入门是简单的,目前也比较火,但是越往后你会发现,其实不简单,因为 python 也是高级语言的。python 用途不少,比 java 干练,但是 python 也有自己的不足,python 还是 java 的选择根据自己的实际情况来,入门简单就用 python,学会 python 再来学 java 也简单,反过来,学会 java 在学 python 更简单,python 简洁,完美。让我更喜欢 python,但是最近也在接触 java,因为遇到了一些问题来 java 处理更加合适,不管学习 java 还是学习 python,你要学下去,要坚持下去,要有信心,自己可以学好,要有恒心,坚持学习下去。 java 和 python 都是众多语言之一,二者都可选,二者皆可抛。语言没有好坏,只有适合不适合。选择哪一门语言都有一定的道理。

 

      最后:

 

      学以致用,更好的落地,最大的产出,IAPTest 测试平台,是我 python 学习后的成果,学习后更好的落地,掌握好落地的切入点,让学习的内容和工作的内容形成闭环。学习是枯燥的,但是别人拿高工资是羡慕的,不是官二代,不是富二代,只有靠努力。不要羡慕别人的高工资,因为别人努力了,付出了。学习是件美好的事,前进的道路不是一帆风顺的,但是学习的道路可以变得有滋有味,适当的奖励自己,适当的放松。

 

   遇到问题不要慌,不要急,百度 google 来帮你。

 

          学习不一定能让你变成很富有,但是学习一定能够改变你。

 

 

   

Gitee 推荐 | 自动化测试平台 AutoMeter

Gitee 推荐 | 自动化测试平台 AutoMeter

AutoMeter是一款针对分布式服务,微服务 API 做功能和性能一体化的自动化测试平台,一站式提供发布单元,API,环境,用例,前置条件,场景,计划,报告等管理

HttpRunner Manager接口自动化测试平台实践(Windows)

HttpRunner Manager接口自动化测试平台实践(Windows)

1. 源码下载

github: https://github.com/HttpRunner/HttpRunnerManager

下载后放入项目目录,结构如下:

 

2.依赖环境  根据根目录requirements.txt文件安装依赖,可以使用pip安装,pip install -r requirements.txt

Django == 2.0.3
PyYAML == 3.12
requests == 2.18.4
eventlet == 0.22.1
mysqlclient == 1.3.12
django-celery == 3.2.2
flower == 0.9.2
dwebsocket == 0.4.2
paramiko == 2.4.1
HttpRunner == 1.5.8


3.数据库安装,我安装的是MYSQL 57版本,设置为utf-8编码,创建相应HttpRunner数据库,设置好相应用户名、密码,启动mysql
4.修改源码中settings.py的配置文件

 

5. rabbitmq消息中间件的安装

可以参考博友的安装文章:https://www.cnblogs.com/tiechui2015/p/10016106.html

启动和关闭命令需要记住:打开sbin目录,双击rabbitmq-server.bat

访问http://localhost:15672 

username:guest、Password:guest, 成功登陆即可

如下图:

 

6.修改配置路径目录如下:修改:HttpRunnerManager/HttpRunnerManager/settings.py里BROKER_URL

7.到这里我们基本都安装完成了。然后我们生成数据库迁移脚本,这里如果之前未使用连接过数据库,可能需要安装pymysql库,同样采用pip安装。

python manage.py makemigrations

然后执行python manage.py migrate 对应HttpRunner数据库生成相应表结构

8.执行python manage.py createsuperuser 根据提示创建输入用户名,邮箱,密码,用于admin后台管理,暂时不用可以先不创建。

9.执行python manage.py runserver启动服务,后面可以接ip和端口号,如0.0.0.0:8000

注意点:以上这些python操作请切换到项目目录下执行。

然后打开web:http://127.0.0.1:8000/api/register/ 注册账号后登录平台

 

 

 

 

 这里我已经添加了project module testcase,截图如上,很漂亮有没有。

10. 然后就是定时任务(也就是异步执行的task),我们需要使用celery,执行脚本:python manage.py celery -A HttpRunnerManager worker --loglevel=info 启动worker

这里遇到了坑。总是会出现报错。我是各种检查,最后终于发现是tornado这个下面的web模块中缺少asynchronous装饰方法,这个是用来执行异步的关键。我各种百度都未查到此类问题,后面想到是不是这个模块升级后改版了,然后我用pip给这个模块降级,安装4.x的版本,重试后问题解决。先前默认安装了最新的版本6.0.1。

解决后启动截图:


[2019-03-20 18:55:02,383: WARNING/Worker-1] ?[32m?[47mINFO    ?[0m ?[32mGenerated Html report: D:\Python36\Scripts\HttpRunnerManager-master\reports\1553079300.h
tml?[0m
[2019-03-20 18:55:02,385: WARNING/Worker-1] ?[32m?[47mINFO    ?[0m ?[32mGenerated Html report: D:\Python36\Scripts\HttpRunnerManager-master\reports\1553079300.h
tml?[0m
[2019-03-20 18:55:02,399: WARNING/Worker-1] ?[32m?[47mINFO    ?[0m ?[32mGenerated Html report: D:\Python36\Scripts\HttpRunnerManager-master\reports\1553079300.h
tml?[0m
[2019-03-20 18:55:02,399: WARNING/Worker-1] ?[32m?[47mINFO    ?[0m ?[32mGenerated Html report: D:\Python36\Scripts\HttpRunnerManager-master\reports\1553079300.h
tml?[0m
[2019-03-20 18:55:04,603: INFO/MainProcess] Task ApiManager.tasks.module_hrun[5a3b0c27-a930-4777-98dd-c4f7683c8ac6] succeeded in 4.5939999999973224s: None
 

 直到我启动work,RabbitMQ中间件才有数据,因为定时任务给到中间件后,中间件找不到work服务,阻塞在那里。

11. python manage.py celery beat --loglevel=info 开启定时任务配置


D:\Python36\Scripts\HttpRunnerManager-master>python36 manage.py celery beat --loglevel=info
celery beat v3.1.26.post2 (Cipater) is starting.
__    -    ... __   -        _
Configuration ->
    . broker -> amqp://guest:**@localhost:5672//
    . loader -> celery.loaders.app.AppLoader
    . scheduler -> djcelery.schedulers.DatabaseScheduler
    . logfile -> [stderr]@%INFO
    . maxinterval -> now (0s)
[2019-03-20 18:23:20,603: INFO/MainProcess] Writing entries (0)...
[2019-03-20 18:23:25,951: INFO/MainProcess] Writing entries (0)...
[2019-03-20 18:26:29,964: INFO/MainProcess] Writing entries (1)...
 
12. 执行:celery flower 访问:http://localhost:5555/dashboard 即可查看任务列表和状态  这一步可能还有点问题,暂时不能打开。后续再研究更新。
 
附上定时任务的报告截图:

 

直至现在,平台基本已经完全通畅,可以开始自动化接口测试。后续将平台搭建到server上去,教程再更新。

Linux服务器部署教程请参考另一篇博客:https://www.cnblogs.com/Sandy-1128/p/HttpRunner-sandy-0323.html



HttpRunnerManager 接口自动化测试平台 搭建实践

HttpRunnerManager 接口自动化测试平台 搭建实践

一、需要准备的知识点

  1. linux: 安装 python3、nginx 安装和配置、mysql 安装和配置

  2. python: django 配置、uwsgi 配置

二、我搭建的环境

  1. Centos7 (配置 rabbitmq、mysql 、Supervisord)

  2. python 3.6.8 (配置 django、uwsgi)

  3. git 1.8.3.1 (克隆代码)

三、搭建过程

  1. 配置数据库(安装 mysql ,自行百度)

    新建库:httprunner (UI 工具直接新建)

  2. 安装 rabbitmq(消息中间件)

    教程 >>>

  3. 克隆代码

    git clone https://github.com/HttpRunner/HttpRunnerManager.git

  4. 安装项目依赖库

    pip install -r requirements.txt

  5. 修改 setting.py 配置文件

"""
Django settings for HttpRunnerManager project.

Generated by ''django-admin startproject'' using Django 1.11.7.

For more information on this file, see
https://docs.djangoproject.com/en/1.11/topics/settings/

For the full list of settings and their values, see
https://docs.djangoproject.com/en/1.11/ref/settings/
"""
from __future__ import absolute_import, unicode_literals

import os

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
import djcelery
from django.conf.global_settings import SESSION_COOKIE_AGE

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/1.11/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = ''=w+1if4no=o&6!la#5j)3wsu%k@$)6bf+@3=i0h!5)h9h)$*s7''

# SECURITY WARNING: don''t run with debug turned on in production!

DEBUG = False
# 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'',
    ''ApiManager'',
    ''djcelery'',
]

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'',
]

MIDDLEWARE_CLASSES = [
    ''dwebsocket.middleware.WebSocketMiddleware''
]

ROOT_URLCONF = ''HttpRunnerManager.urls''

TEMPLATES = [
    {
        ''BACKEND'': ''django.template.backends.django.DjangoTemplates'',
        ''DIRS'': [os.path.join(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 = ''HttpRunnerManager.wsgi.application''


# Password validation
# https://docs.djangoproject.com/en/1.11/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/1.11/topics/i18n/

LANGUAGE_CODE = ''zh-Hans''

TIME_ZONE = ''Asia/Shanghai''

USE_I18N = True

USE_L10N = True

USE_TZ = False

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.11/howto/static-files/

if DEBUG:
    DATABASES = {
        ''default'': {
            ''ENGINE'': ''django.db.backends.mysql'',
            ''NAME'': ''HttpRunner'',  # 新建数据库名
            ''USER'': ''root'',  # 数据库登录名
            ''PASSWORD'': ''123456'',  # 数据库登录密码
            ''HOST'': ''192.168.1.254'',  # 数据库所在服务器ip地址
            ''PORT'': ''3306'',  # 监听端口 默认3306即可
        }
    }
    STATICFILES_DIRS = (
        os.path.join(BASE_DIR, ''static''),  # 静态文件额外目录
    )
else:
    DATABASES = {
        ''default'': {
            ''ENGINE'': ''django.db.backends.mysql'',
            ''NAME'': ''HttpRunner'',  # 新建数据库名
            ''USER'': ''root'',  # 数据库登录名
            ''PASSWORD'': ''123456'',  # 数据库登录密码
            ''HOST'': ''192.168.1.254'',  # 数据库所在服务器ip地址
            ''PORT'': ''3306'',  # 监听端口 默认3306即可
        }
    }
    STATIC_ROOT = os.path.join(BASE_DIR, ''static'')

STATIC_URL = ''/static/''

STATICFILES_FINDERS = (
    ''django.contrib.staticfiles.finders.FileSystemFinder'',
    ''django.contrib.staticfiles.finders.AppDirectoriesFinder''
)

SESSION_COOKIE_AGE = 300 * 60

djcelery.setup_loader()
CELERY_ENABLE_UTC = True
CELERY_TIMEZONE = ''Asia/Shanghai''
BROKER_URL = ''amqp://guest:guest3@192.168.91.45:5672//'' if DEBUG else ''amqp://guest:guest@192.168.1.254:5672//''
CELERYBEAT_SCHEDULER = ''djcelery.schedulers.DatabaseScheduler''
CELERY_RESULT_BACKEND = ''djcelery.backends.database:DatabaseBackend''
CELERY_ACCEPT_CONTENT = [''application/json'']
CELERY_TASK_SERIALIZER = ''json''
CELERY_RESULT_SERIALIZER = ''json''

CELERY_TASK_RESULT_EXPIRES = 7200  # celery任务执行结果的超时时间,
CELERYD_CONCURRENCY = 1 if DEBUG else 10 # celery worker的并发数 也是命令行-c指定的数目 根据服务器配置实际更改 一般25即可
CELERYD_MAX_TASKS_PER_CHILD = 100  # 每个worker执行了多少任务就会死掉,我建议数量可以大一些,比如200


# 发送邮件
EMAIL_HOST = ''smtp.exmail.qq.com''
EMAIL_PORT = 465
EMAIL_USR_SSL = True
EMAIL_SUBJECT_PREFIX = ''测试部''
EMAIL_HOST_USER = ''notic@test.com''  # 自己的邮箱
EMAIL_HOST_PASSWORD = "fadfadfdn8hf7AXc"  # 我的邮箱密码

EMAIL_SEND_USERNAME = ''notic@test.com''  # 定时任务报告发送邮箱,支持163,qq,sina,企业qq邮箱等,注意需要开通smtp服务
EMAIL_SEND_PASSWORD = ''Frfadfadfhf7AXc''     # 邮箱密码

LOGGING = {
    ''version'': 1,
    ''disable_existing_loggers'': True,
    ''formatters'': {
        ''standard'': {
            ''format'': ''%(asctime)s [%(name)s:%(lineno)d] [%(module)s:%(funcName)s] [%(levelname)s]- %(message)s''}
        # 日志格式
    },
    ''filters'': {
    },
    ''handlers'': {
        ''mail_admins'': {
            ''level'': ''ERROR'',
            ''class'': ''django.utils.log.AdminEmailHandler'',
            ''include_html'': True,
        },
        ''default'': {
            ''level'': ''DEBUG'',
            ''class'': ''logging.handlers.RotatingFileHandler'',
            ''filename'': os.path.join(BASE_DIR, ''logs/all.log''),
            ''maxBytes'': 1024 * 1024 * 100,
            ''backupCount'': 5,
            ''formatter'': ''standard'',
        },
        ''console'': {
            ''level'': ''DEBUG'',
            ''class'': ''logging.StreamHandler'',
            ''formatter'': ''standard''
        },
        ''request_handler'': {
            ''level'': ''DEBUG'',
            ''class'': ''logging.handlers.RotatingFileHandler'',
            ''filename'': os.path.join(BASE_DIR, ''logs/script.log''),
            ''maxBytes'': 1024 * 1024 * 100,
            ''backupCount'': 5,
            ''formatter'': ''standard'',
        },
        ''scprits_handler'': {
            ''level'': ''DEBUG'',
            ''class'': ''logging.handlers.RotatingFileHandler'',
            ''filename'': os.path.join(BASE_DIR, ''logs/script.log''),
            ''maxBytes'': 1024 * 1024 * 100,
            ''backupCount'': 5,
            ''formatter'': ''standard'',
        },
    },
    ''loggers'': {
        ''django'': {
            ''handlers'': [''default'', ''console''],
            ''level'': ''INFO'',
            ''propagate'': True
        },
        ''HttpRunnerManager.app'': {
            ''handlers'': [''default'', ''console''],
            ''level'': ''DEBUG'',
            ''propagate'': True
        },
        ''django.request'': {
            ''handlers'': [''request_handler''],
            ''level'': ''DEBUG'',
            ''propagate'': True
        },
        ''HttpRunnerManager'': {
            ''handlers'': [''scprits_handler'', ''console''],
            ''level'': ''DEBUG'',
            ''propagate'': True
        },
        ''scripts'': {
            ''handlers'': [''scprits_handler'', ''console''],
            ''level'': ''DEBUG'',
            ''propagate'': True
        },
    }
}

  6. django 生成数据库表和字段(在项目路径下执行)

#生成数据迁移脚本
python manage.py makemigrations ApiManager
#应用到db生成数据表
python manage.py migrate

  7. 创建 django 管理后台的超级账户

python manage.py createsuperuser

  8. 安装 和 配置 uwsgi 

    安装:pip install uwsgi

    配置:

[root@gitlab configs]# cat ini_hrm.ini 
[uwsgi]
socket = 127.0.0.1:9092
#socket = 127.0.0.1:3031
stats = 127.0.0.1:9193
chdir = /root/TestProject/HttpRunnerManager
wsgi-file = /root/TestProject/HttpRunnerManager/HttpRunnerManager/wsgi.py
# module = Joyo.settings
virtualenv = /root/.envs/hrm
pidfile = /root/TestProject/running/uwsgi_hrm.pid
touch-reload = /root/TestProject/running/uwsgi_hrm.pid
# py-auto-reload = 1
buffer-size = 32768
processes = 1
workers=2
# threads = 2
daemonize = /root/TestProject/logs/uwsgi_hrm.log

  9. 配置 Nginx

    教程 >>>

  10. 启动 Nginx

    /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

  11. 启动 uwsgi

    /root/.envs/hrm/bin/uwsgi --ini /root/TestProject/configs/ini_hrm.ini

  12. Supervisor 守护 Celery worker、beat、flower

    教程 >>>

 

四、访问链接

  1. django 后台

    url: http://192.168.1.254/admin/login/?next=/admin/

    id: root

    pw: abc123456

  2. rabbitmq

    url: http://192.168.1.254:15672/#/
    id: guest
    pw: guest

  3. HttpRunnerManager

    注册:http://192.168.1.254:8000/api/register/
    登录:http://192.168.1.254:8000/api/login/

  4. Celery 任务监控后台

    url: http://192.168.1.254:5555/dashboard

 

五、两个问题点

  1.  启动 Django 项目时,ImportError: No module named ''MySQLdb'':

    安装 pymysql: pip install pymysql

    在 Django 项目中的 __init__.py 中引用:

import pymysql
pymysql.install_as_MySQLdb()

  2. 打开 HttpRunnerManager 后台时:百度未授权使用地图API 

    解决方法 >>>

 

### 来张定时检查图

    

今天关于基于 Jmeter 的 web 端接口自动化测试平台jmeter接口自动化案例的介绍到此结束,谢谢您的阅读,有关flask + Python3 实现的的 API 自动化测试平台 ---- IAPTest 接口测试平台(总结感悟篇)、Gitee 推荐 | 自动化测试平台 AutoMeter、HttpRunner Manager接口自动化测试平台实践(Windows)、HttpRunnerManager 接口自动化测试平台 搭建实践等更多相关知识的信息可以在本站进行查询。

本文标签: