前言

自从将项目放到 github(https://github.com/jerrylizilong/autotest_platform ), 不少人对其中的一些设计和运行原理提出了疑问。闲来无事,把其中的一些设计和架构整理一下,也是自己的一个总结。

平台化的需求

当初在尝试将原有用 python+selenium 实现的自动化框架做成平台化时,心目中最简单的需求是:

出于这个简单的目的,在 python 的几个 web 框架中,选择了轻量级的 flask,并选用 bootstrap 组件来实现前端布局 。

flask 框架简介

和大部分的 flask 项目相同,实际开发中分为以下几个模块:

1. view 目录:

view 模块是 flask 实现 web 路由跳转和接口接收的关键。

2. 功能实现:数据库操作

3. 静态文件目录:

简单说一下对 html\js\css 的关系理解:

html: 网页的基础布局。

css : 页面元素的样式控制。

js : 功能实现

主要控制:

5. 实践:

由于我们平台的页面都是基础的增删查改,因此要做的工作是:

5.1 确立需求:

选取一个模块(如用例管理),确定需求:需要新增用例、修改用例、获取用例列表、获取用例详情、删除用例、复制用例

5.2 服务端功能实现:

@mod.route('/add_test_case', methods=['POST', 'GET'])     #新增用例接口
@user.authorize
def save_new_test_case():
    log.log().logger.info(request)
    if request.method == 'GET':
        log.log().logger.info('post')
        return render_template("uitest/new_test_cases.html")
    if request.method == 'POST':
        info = request.form
        log.log().logger.info('info : %s' %info)
        name = viewutil.getInfoAttribute(info,'name')
        module = viewutil.getInfoAttribute(info,'module')
        description = viewutil.getInfoAttribute(info,'description')
        steps = viewutil.getInfoAttribute(info,'steps')
        steps=steps.replace('"',"'")
        type = viewutil.getInfoAttribute(info,'type')
        if module == '' or name == '' or steps=='' or type=='':
            return '必填字段不得为空!'
        else:
            if type=='公共用例':
                isPublic = 1
            else:
                isPublic = 0
            test_case_manage.test_case_manage().new_test_case(module, name, steps, description, isPublic)      # 保存用例
        return redirect('test_cases')

此时直接访问对应接口,可以实现增、删、改、查等功能。

5.3 页面编写和路由关联:

完成这步后,此时直接访问对应的路由路径,就可以打开对应的 html 页面。

5.4 前后端关联:

此时需要做的,是将页面的元素与后台的接口关联起来。
到这里,相关的模块功能就实现好了。

查询:

新增:

修改:

6. 善用复制、黏贴提高开发效率

在实现后一个模块后,如果要开发新的模块,可以直接套用,只需要修改里面关键的标题、元素、id 等信息即可。 这样只需要复制、批量修改(例如直接把 test_case 替换为 test_suite),很快就能把类似的模块开发出来。


↙↙↙阅读原文可查看相关链接,并与作者交流