本來的打算是更新完8之后呢,后期就不在更新了,最近學習flask后,手又想開發個平台吧,吧我之前寫的框架給運用上,形成一個簡單的接口測試化平台吧,--IAPTest
我給他起名,有沒有感覺很霸氣啊,其實撤這么多不如來點使用的,其實做這個平台呢,更多的是對flask學習的一個利用吧。當時自己構思了一下午,其實也不知道大家想要的都是什么樣子的,所以呢,就開始做了下面的設計。

大題上,第一版的demo版本的需求就是這樣的,因為這里沒有考慮其他太多, 那么接下來就是來開始選擇了,我選擇的是flask 框架,前端呢 ,我用的是bootstarp框架,
那么接下來,我是要對我的數據庫進行設計。這里要提的是我對權限的設計呢,我更多的是選擇了一個較為簡單的方式,我去用一個字段去進行權限控制,我使用level字段, 0就表示我這個用戶是普通用戶,1就是管理員用戶,這里很多地方的刪除都做了管理員和非管理員的區別,管理員可以對所有的進行刪除,但是普通管理是不能的, 用戶管理界面只能管理員去運作這個。
下面給下我數據庫上面的代碼片段。
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.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
希望大家一起沖菜鳥飛到更高
有錢的也可以給我捧下。
我是一個大專生,也是一個人奮斗到今天。

