原本的打算是更新完8以后呢,后期就不在更新了,最近学习flask后,手又想开发个平台吧,吧我以前写的框架给运用上,造成一个简单的接口测试化平台吧,--IAPTest 前端
我给他起名,有没有感受很霸气啊,其实撤这么多不如来点使用的,其实作这个平台呢,更多的是对flask学习的一个利用吧。当时本身构思了一下午,其实也不知道你们想要的都是什么样子的,因此呢,就开始作了下面的设计。python
大题上,初版的demo版本的需求就是这样的,由于这里没有考虑其余太多, 那么接下来就是来开始选择了,我选择的是flask 框架,前端呢 ,我用的是bootstarp框架,sql
那么接下来,我是要对个人数据库进行设计。这里要提的是我对权限的设计呢,我更多的是选择了一个较为简单的方式,我去用一个字段去进行权限控制,我使用level字段, 0就表示我这个用户是普通用户,1就是管理员用户,这里不少地方的删除都作了管理员和非管理员的区别,管理员能够对全部的进行删除,可是普通管理是不能的, 用户管理界面只能管理员去运做这个。数据库
下面给下我数据库上面的代码片断。flask
class User(db.Model): __tablename__='users' id=db.Column(db.Integer(),primary_key=True,autoincrement=True) username=db.Column(db.String(63),unique=True) password=db.Column(db.String(252)) user_email=db.Column(db.String(64),unique=True) status=db.Column(db.Integer(),default=0) level=db.Column(db.Integer(),default=0) phone = db.relationship('TestResult', backref='users', lazy='dynamic') def __repr__(self): return self.username def set_password(self,password): self.password=generate_password_hash(password) def check_password(self,password): return check_password_hash(self.password,password) class Interface(db.Model): __tablename__='interfaces' id=db.Column(db.Integer(),primary_key=True,autoincrement=True) project_name=db.Column(db.String(252)) models_name=db.Column(db.String(252)) Interface_name=db.Column(db.String(252)) Interface_url=db.Column(db.String(252)) Interface_meth= db.Column(db.String(252),default='GET') Interface_par=db.Column(db.String(252)) Interface_back=db.Column(db.String(252)) Interface_user_id=db.Column(db.Integer(),db.ForeignKey('users.id')) def __repr__(self): return self.Interface_name class InterfaceTest(db.Model): __tablename__='interfacetests' id = db.Column(db.Integer(), primary_key=True, autoincrement=True) project=db.Column(db.String(252)) model=db.Column(db.String(252)) Interface_name= db.Column(db.String(252)) Interface_url = db.Column(db.String(252)) Interface_meth = db.Column(db.String(252)) Interface_pase = db.Column(db.String(252)) Interface_assert=db.Column(db.String(252)) Interface_user_id = db.Column(db.Integer(), db.ForeignKey('users.id')) def __repr__(self): return self.yongli_name class TestResult(db.Model): __tablename__='tstresults' id=db.Column(db.Integer(),primary_key=True,autoincrement=True) Test_user_id=db.Column(db.Integer(),db.ForeignKey('users.id')) test_num=db.Column(db.Integer()) pass_num=db.Column(db.Integer()) fail_num = db.Column(db.Integer()) skip_num=db.Column(db.Integer()) test_time=db.Column(db.DateTime(),default=datetime.datetime.now()) hour_time=db.Column(db.Integer()) test_rep=db.Column(db.String(252)) test_log=db.Column(db.String(252)) def __repr__(self): return self.id
这里的代码呢,我就不一一赘述, 接口,接口测试用例,接口执行结果,都是和用户表一对多的关系,有了数据表,咱们就能够去建立咱们的数据库了,在建立的时候,咱们还须要加一个配置文件,这里存放着一些数据库的基本配置相关的。后端
SECRET_KEY = 'BaSeQuie' basedir=os.path.abspath(os.path.dirname(__file__)) SQLALCHEMY_DATABASE_URI = "sqlite:///" + os.path.join(basedir, "data.sqlite") SQLALCHEMY_COMMIT_ON_TEARDOWN = True SQLALCHEMY_TRACK_MODIFICATIONS=False CSRF_ENABLED = True
这样咱们就能够去生成咱们的数据库, app
界面来呢就是前段界面的编写,和后端处理函数的编写,这里呢,我就不同叙述了,这里呢 给你们下面的几个地方的代码片断,展现下,主要是上传和下载这一块。框架
主要是测试日志的下载。函数
@app.route('/load/<string:filename>',methods=['GET']) def load(filename): basedir = os.path.abspath(os.path.dirname(__file__)) file_dir=os.path.join(basedir,'upload') response=make_response(send_from_directory(file_dir,filename,as_attachment=True)) return response
单个用例的执行呢,我这里没有生成测试报告,我吧这个主要用到一个用例的检验上去,学习
多个用来呢,我这里用的是以前我在8上面提到的测试框架,在这里我作了一些修改,大的没有怎么改动,只是对部分代码进行优化。
接下来就是给你们展现下效果图
1.这是项目的目录
到这里呢,个人基本的测试框架就已经搞定了。前先后后一共大概花费了我三个周的时间吧,第一个demo版本就这么横空出世了。
这个周末北京的天气还算晴朗,天也不热,写起来代码也是六六的。
有疑问能够加我qq:952943386或者个人qq群194704520
但愿你们一块儿冲菜鸟飞到更高
有钱的也能够给我捧下。