Skip to content

一款基于 POM 模式开发的 Web UI 自动化测试平台

Notifications You must be signed in to change notification settings

shaonianyr/Autotest_platform

Repository files navigation

Autotest_platform

Autotest_platform 是一款基于 POM 模式开发的 Web UI 自动化测试平台,通过选择绑定好的 selenium 的关键字,比如打开 url,左键点击,输入文本等等这些动作,背后的代码已在后端封装好,前端只需要像填表格来设计测试案例即可。此外,由于平台是基于 POM 模式的设计,项目,页面,元素,定位都可拆分管理,我们可以更为方便维护我们的测试脚本,当产品发生迭代的时候,我们只需要修改对应页面对应元素的定位即可,无需重新设计涉及到这个元素的所有测试案例。数据库当中已封装了 selenium 常见的关键字,可以在 ./Autotest_platform/PageObject/Base.py 里面自行添加自己需要的 selenium 关键字,甚至是更为复杂的自定义函数。./Autotest_platform/PageObject/Base_m.py 为手机端函数的封装,需要开启 Appium 连接手机。

平台采用 RabbitMQ + celery 的方式执行测试案例,支持异步分布执行测试案例,也支持开启定时任务。

平台构建相关技术栈:python + django + mysql + RabbitMQ + celery + selenium

平台后端 POM 原理层脚本 Demo 展示:pom_autotest

平台功能展示

1. 首页用图标展示项目以及测试汇总的数据:

2. 测试案例可分项目管理,多个测试项目之间均可通用 "selenium关键字封装"项目 封装好的关键字:

3. 采用 POM 模式设计,每个项目对应管理多个页面,每个页面对应管理多个页面元素的定位:

4. selenium 的动作也从测试案例中单独抽出来,作为一个函数来调用,同一个动作可以供多个测试案例一起使用,比如每个测试案例里面的输入文本的动作,都可以直接调用这个 "输入文本" 的关键字,关键字封装在 ./Autotest_platform/PageObject/Base.py 里面,对外暴露出两个参数,也就是输入的定位,以及输入的内容,设计测试案例的时候只需要对应填入这两个参数,它就会自动执行对应的 selenium 语句。 Appium 对应的关键字封装在 ./Autotest_platform/PageObject/Base_m.py 里面。

5. 支持浏览器有头执行案例,也支持浏览器无头执行案例,便于调试。也支持对手机端测试案例的执行,需开启 Appium 以及 adb 连接到手机,获取你要打开的应用和手机设备型号,并在 ./Product/models/models.py 如下代码的对应位置修改填写:
    from appium import webdriver
    desired_caps = {

        'platformName': 'Android',

        'platformVersion': '9',

        'deviceName': '13b7cc66',

        'appPackage': 'com.android.browser',

        'appActivity': 'com.android.browser.BrowserActivity',

        "noReset": True,

        "noSign": True

    }
    browser = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
    time.sleep(2)
    return browser


6. 支持一键快速复制测试案例:

7. 支持断言 url 以及 元素两种方式,支持完全匹配和包含匹配两种断言力度,支持测试案例设计过程中的参数化设计:

8. 支持测试案例的前置登录操作,可以在登录配置当中设置:

9. 生成的测试结果中可展示多种详细的信息报告:

10. 支持选择任意的测试案例构建测试集合,支持定时任务测试集合构建:

Windows 安装部署

1. 获取项目代码

首先在 d 盘根目录获取源代码,然后切换至项目的根目录: (如果代码不在 d 盘根目录,后续的相关路径请按照自己的路径来修改,此处以 d 盘根目录为例部署)

    cd d:
    git clone https://github.com/ShaoNianyr/Autotest_platform.git
    cd Autotest_platform

2. python3.6 pip 包安装

此处要先安装好 python3.6 环境,由于我有多个版本,所以设置的 python3.6 的环境变量为 python36。

    python36 -m pip install -r requirements.txt

如果你没有设置 pip 镜像,建议执行如下安装 pip 包指令:

python36 -m pip install -r requirements.txt -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com

3. Mysql5.7 安装:

这里我提供一个 docker-compose.yml 文件,可以帮你快速构建平台所需的 Mysql 数据库镜像,初始化设置并本地挂载数据库的内容。

首先安装 Docker Desktop,并在设置里面勾选 d 盘允许数据挂载。

然后执行指令:

    docker-compose up

如果本地有安装到 Mysql 占用了端口导致启动失败,可以先执行指令杀死端口。

    netstat -ano|findstr "3306" 
    taskkill /pid xxxx -t -f  (xxxx 为你 3306 端口对应的pid)
    docker-compose up

一切正常,最终可以看到:

接下来我们可以安装 Navicat Premium 12,连接我们的 docker mysql 镜像,将 autotest.sql 文件导入。当然你也可以直接手写 sql 语句建库导入。

在 Navicat Premium 12 中新建连接,如图所示设置:

点开我们的数据库,右键然后运行文件,执行如下设置,并导入 autotest.sql:

成功以后,我们的数据库就具备 Demo 的数据在里面了。

如果想用本地 Mysql,新建如下的数据库名,并将代码修改你的 Mysql 的密码,再把 sql 文件导入即可。

代码位置: ./Autotest_platform/settings.py

4. RabbitMQ 安装:

安装完毕以后,浏览器输入 http://localhost:15672 ,输入用户名:guest,密码:guest,你就可以进入到测试案例执行的消息队列的管理界面。

5. 启动 Django 项目:

因为之前已经导入过 sql 文件,就不需要再执行 python36 manage.py makesmigrations 这些指令,表格和数据都有了,所以直接执行:

    python36 manage.py runserver

打开网址 http://127.0.0.1:8000/login/ ,输入账号和密码: ```bash 初始用户名: 少年 初始密码: sn123456 ``` 接下来即可顺利进入到首页:

账户的管理在 Django 后台 http://127.0.0.1:8000/admin/ 里面:

6. 启动 celery 异步执行测试案例:

当你点击执行案例的时候,平台会将测试案例放到消息队列当中等待执行,等你开启 celery 的 worker 模式时,才会开始执行命令。具体执行如下指令:(注意要处于项目根目录下)

    python36 manage.py celeryd -l info

7. 启动 celery 定时执行测试案例:

    python36 manage.py celerybeat -l info 

定时时间在 ./Autotest_platform/settings.py 中设置:

    CELERYBEAT_SCHEDULE = {
        'timing': {
            'task': 'Product.tasks.timingRunning',
            # 'schedule': crontab(hour=10, minute=30),
            'schedule': timedelta(seconds=300),
        },
    }

贡献

About

一款基于 POM 模式开发的 Web UI 自动化测试平台

Resources

Stars

Watchers

Forks

Packages

No packages published