# autotest_platform **Repository Path**: hejunwang/autotest_platform ## Basic Information - **Project Name**: autotest_platform - **Description**: 自动化测试平台搭建,基于python, flask ,celery ,vue前端,flask作为后端, celery作为任务执行 - **Primary Language**: Unknown - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2022-07-06 - **Last Updated**: 2025-12-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # flask-celery-py3 ## 前端和后端整合 ``` 存放在dist目录中 ,npm run build打包后,直接复制到dist目录下 assets 和templates两个目录 ``` ### 前端vite 运行,打包dist ``` npm run dev 前端文件运行 npm run build 前端打包生成dist文件 ``` ### 数据库相关 flask ORM 映射表 ``` SQL flask migrate 第三方插件 Flask-Migrate是一个为Flask应用处理SQLAlchemy数据库迁移的扩展,使得可以通过Flask的命令行接口或者Flask-Scripts对数据库进行操作。 步骤1初始化 flask db init 这个命令将会新建一个名字为migrations的文件夹,并且记录一个数据库版本号 步骤2迁移 flask db migrate 如果不修改将使用默认策略迁移 ,如果想要保存提交的记录,可以使用 -m "desc" ,运行后会在migrations中记录 步骤3 升级 flask db upgrade 映射到数据库中 如果需要增加一个新的表, 直接在models中添加,完成后 ,按照上面的步骤123 执行就可以在数据库 中生成对应的表 ``` ### PO 模型 ``` page 页面 o object page页面对象中的属性 定义到一个类中 ,类中定义方法 二.模块介绍 1.基础层(BasePage) 设计一个基本的Page类,所有页面皆继承该类。提供一个页面需要实现的基本功能及公共方法。封装底层操作 2.业务逻辑层(Pages),也叫元素和操作层 按照PO设计模式,将每个页面抽象为一个类,放在Pages包里面,每个页面继承Basepage,可调用Data层数据,包括页面所有的操作对象属性和实现的功能。 3.数据层(Data) 该层存放相关数据,例如:用户数据和密码。在测试用例可通过调用数层的数据来进行操作。 4.测试用例层(Testcases) 每一个测试用例testcase都对应Pages里面的一个页面,继承unnitest.TestCase类。通过调用对应页面类的方法,数据层的数据、增加断言(assert)来验证功能的正确性。此外通过Jenkins自动执行测试、代码质量检测和部署到测试服务器、部署到生产服务器上 ———————————————— ``` ``` 下载chrome 版本 , 并下载对应的webdriver ,设置 chromedrive 777 . 存放到 虚拟环境的bin下 ,不然没有办法使用 ``` ### RESTFUL API 规范 ``` HTTP方法 通过标准HTTP方法对资源CRUD: GET:查询 GET /zoos GET /zoos/1 GET /zoos/1/employees POST:创建单个资源。POST一般向“资源集合”型uri发起 POST /animals //新增动物 POST /zoos/1/employees //为id为1的动物园雇佣员工 返回码 : 200:服务器成功返回用户请求的数据,该操作是幂等的。 201:用户新建或修改数据成功。 202:表示一个请求已经进入后台排队(异步任务) 204:用户删除数据成功。 301:永久重定向 302:暂时重定向 400:用户发出的请求有错误,服务器没有进行新建或修改数据的操作,该操作是幂等的。 401:表示用户没有权限(令牌、用户名、密码错误)。 403:表示用户得到授权(与401错误相对),但是访问是被禁止的。 404:用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。 406:用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)。 410:用户请求的资源被永久删除,且不会再得到的。 422:当创建一个对象时,发生一个验证错误。 500:服务器发生错误,用户将无法判断发出的请求是否成功。 ``` ### User.query.filter 的汇总 ``` # 找用户 user=User.query.get(id) # 改用户的信息 user.phone=phone user.username=username # 提交 db.session.commit() 或者是这种方式更新 query = ApiResult.query.filter_by(taskid=task_id).update({'result':result}) user=User.query.get(2) # 根据主键查询用户使用get(主键值) 返回值是一个用户对象 # user1=User.query.filter(User.username=='zhao1').all() # all first() # user_list=User.query.filter(User.username.like('z%')).all() # select*from user where username like 'z%'; # user_list=User.query.filter(or_(User.username.like('2%'),User.username.contains('1'))).all() # select * from user where username like 'z%' or username like '%1%'; # user_list=User.query.filter(and_(User.username.contains('z'),User.rdatetime.__gt__('2021-11-11 08:36:50'))).all() # user_list=User.query.filter(and_(User.username.contains('z'),User.rdatetime>'2021-11-11 08:36:50')).all() # user_list=User.query.filter(not_(User.username.contains('1'))).all() # user_list=User.query.filter(User.phone.in_(['16638916753','15837058932'])).all() # user_list=User.query.filter(User.username.contains('z')).order_by('rdatetime').all() # user_list=User.query.filter(User.username.contains('z')).order_by('-rdatetime').all() # user_list=User.query.filter(User.username.contains('z')).order_by(-User.rdatetime).all() # user_list=User.query.order_by(-User.id).all() #limit的使用 + offset # user_list=User.query.limit(2).all() user_list=User.query.offset(2).limit(2).all() return render_template('user/select.html',user=user,users=user_list) User.query.all() # 查询所有用户数据 User.query.count() # 查询有多少个用户 User.query.first() # 查询第1个用户 User.query.get(1) # 根据id查询 查询id为4的用户[3种方式] User.query.get(4) User.query.filter_by(id=4).all() # 简单查询 使用关键字实参的形式来设置字段名 User.query.filter(User.id == 4).all() # 复杂查询 使用恒等式等其他形式来设置条件 query.filter(User.name == 'ed') #equals query.filter(User.name != 'ed') #not equals query.filter(User.name.like('%ed%')) #LIKE query.filter(User.name == None)#is None query.filter(User.name != None)#not None 2、特殊查询 开头、包含、模糊查询 User.query.filter(User.name.endswith("g")).all() User.query.filter(User.name.startswith("w")).all() User.query.filter(User.name.contains("n")).all() User.query.filter(User.name.like("%n%g")).all() 模糊查询 ```