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. 支持选择任意的测试案例构建测试集合,支持定时任务测试集合构建:
首先在 d 盘根目录获取源代码,然后切换至项目的根目录: (如果代码不在 d 盘根目录,后续的相关路径请按照自己的路径来修改,此处以 d 盘根目录为例部署)
cd d:
git clone https://github.com/ShaoNianyr/Autotest_platform.git
cd Autotest_platform
此处要先安装好 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
这里我提供一个 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
安装完毕以后,浏览器输入 http://localhost:15672 ,输入用户名:guest,密码:guest,你就可以进入到测试案例执行的消息队列的管理界面。
因为之前已经导入过 sql 文件,就不需要再执行 python36 manage.py makesmigrations 这些指令,表格和数据都有了,所以直接执行:
python36 manage.py runserver
账户的管理在 Django 后台 http://127.0.0.1:8000/admin/ 里面:
当你点击执行案例的时候,平台会将测试案例放到消息队列当中等待执行,等你开启 celery 的 worker 模式时,才会开始执行命令。具体执行如下指令:(注意要处于项目根目录下)
python36 manage.py celeryd -l info
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),
},
}