Web页面测试框架
说明
本项目为Web页面测试框架,可适用于各类Web页面自动测试项目,并为测试结果输出报告。
使用工具
- Python 3.6+
- selenium 2.0.0
- pytest及其各类插件
测试环境安装
安装python3.6+后,在命令行界面输入以下命令下载安装所需python依赖库。Python环境依赖库可使用requirements.txt安装。
# requirements内容
adbutils==0.6.2
anytree==2.7.2
apkutils==0.6.6
apkutils2==1.0.0
atomicwrites==1.3.0
attrs==19.3.0
certifi==2019.9.11
chardet==3.0.4
cigam==0.0.3
colorama==0.4.1
decorator==4.4.0
Deprecated==1.2.6
deprecation==2.0.7
facebook-wda==0.4.1
humanize==0.5.1
idna==2.8
imageio==2.6.1
importlib-metadata==0.23
Jinja2==2.10.3
logzero==1.5.0
lxml==4.4.1
MarkupSafe==1.1.1
more-itertools==7.2.0
numpy==1.17.3
packaging==19.2
Pillow==6.2.0
pluggy==0.13.0
progress==1.5
psutil==5.6.3
py==1.8.0
pyelftools==0.25
pyparsing==2.4.2
pytest==5.2.1
pywin32==225
requests==2.22.0
retry==0.9.2
selenium==3.141.0
six==1.12.0
TextWizard==0.0.3
tinydb==3.15.1
tornado==6.0.3
uiautomator2==2.0.1.dev3
urllib3==1.25.6
wcwidth==0.1.7
weditor==0.3.1
whichcraft==0.6.1
wrapt==1.11.2
xmltodict==0.12.0
zipp==0.6.0
pytest-html==2.0.0
将requirements.txt放置于到任意目录, 再在命令行界面输入以下命令:
cd [requirements.txt所在目录]
pip install -r requirements.txt
框架代码结构
框架结构如图所示
-
demo代码,用于展示和测试使用,删除不影响功能
-
page_object_* - 存放对应工程的页面对象,PO模式的核心。在该目录存放各页面PO元素的操作后,即可在测试用例中直接调用,大大降低用例编写及修改难度,节约重复编码时间。如图所示为物业城市的PageObject。
-
test_suite_* - 用于存放对应工程的测试套件。如图所示为物业城市测试环境的测试套件。测试套件必须以TestSuite_开头,unittest将据此获取测试用例。
模块说明
主要功能模块 common
-
base_page.py - 一些公共模块的封装
-
decorator.py - 有@testcase、@teststep这样的装饰器用例执行日志打印、错误后的处理
-
init.py - 一些初始化操作
-
log.py - 关于生成日志的一些设置
-
read_config.py - 读取各测试套件的config文件的内容
-
Report.py - 对生成的报告的一些操作,备份Testreport的报告到TestReport_backup下、多设备统一报告的生成、报告的文件夹压缩、报告保留数量管理
页面对象模块 page_object_*
此模块用于存储编写的各测试项目的page object。
如图所示的是作为示例的page object文件login.py,存储了登录页的page object。当用例中有需要用到该页元素时可以直接从此调用该元素的点击操作,不需要再重新做一次检查元素Xpath步骤。
page object完备时用例编写会变得十分方便快捷,用例编写人员只需要调用相应点击操作函数即可轻松完成一个用例编写,并且当页面元素Xpath发生改变时也可以在此处快速地修改而不影响用例,即PO模式。
每个测试项目可以有一个自己专有的page_object_*目录。相关的测试项目也可以使用同一个,例如测试环境的项目和生产环境的项目,它们分别使用不同的测试套件和测试用例,但可以共用page_object_*。
项目测试套件模块 test_suite_*
TestSuite_*是某个测试项目的测试套件。里面包含了测试用例集test_case,报告目录report,项目配置文件config.ini,测试用例运行入口run_case.py。
test_case
测试用例目录。测试用例文件需以test_开头,pytest才会将其识别为测试用例文件。测试用例文件可以以功能来做区分。例如安装,登录等。
根据pytest默认的用例收集规则,文件内测试类命名需以Test开头,测试方法和函数需以test_开头。
测试用例和测试步骤使用了自定义的@my_test_case和@my_test_step装饰器来做错误收集和处理。
- conftest.py
conftest.py文件是pytest默认的用例配置文件。在其中配置的fixture可以在当前用例套件目录中调用。conftest.py具体的用法可以查看一些pytest的教程和文档,例如pytest文档5-fixture之conftest.py。
此处的conftest.py目前主要实现了设置和回收webdriver,当发生错误时自动截图并将其写入报告,修改输出报告的一部分栏目等功能,以后随着测试用例书写进程还将继续增加更多功能。
report
用于储存测试报告。每次运行将生成一份html形式的测试报告和一份执行日志,测试报告超过一定数量时将自动删除最早的,默认保留10个。测试报告保留数量可以在config.ini里修改。
config.ini
config.ini文件用于写入一些配置和测试数据,例如webdriver路径,需测试的URL,需保留的测试报告数量,登录的用户名和密码等。
run_case.py
该测试套件的测试用例运行入口。
运行流程
通过运行run_cases .py执行测试
- 启动测试前先做一次初始化操作生成一些通用的类实例,以便后面直接调用。
- pytest需要一些参数来执行,例如-s可以在运行过程中显示内部的打印信息,-v可以输出用例更加详细的执行信息,比如用例所在的文件及用例名称等。--html是用于使用pytest-html插件输出html测试报告的参数。
pytest.main(args)运行流程
- pytest根据默认前缀收集需要运行的测试用例
- conftest.py根据config.ini提供的路径,在每个用例开始时设置webdriver,结束回收webdrvier。
- pytest根据conftest.py所设置的fixture,在各级别的测试用例前后执行fixture。
- 如果测试出错,收集错误信息输出到日志,并截图保存到测试报告
- 测试结束,并输出测试报告
结果展示
生成的测试报告路径结构如下
在report目录下会有一个执行日志client.log和一个html格式测试报告report.html,以及测试过程中手动截图的存档目录image。
报告展示: