目录
1、前言
2、框架结构
2.1、app
2.2、config
2.3、data
2.4、driver
2.5、libs
2.6、 python Project
2.7、result
2.8、src
2.9、 SSH PrivateKey
2.10、startService
2.11、target
2.12、testng
2.13、pom.xml
1、前言
18年的时候,根据项目组需要,编写了一套 Java 版的自动化测试框架,可进行包括 APP(Android、i os )、H5、Web、接口的自动化测试任务。测试报告可通过 HTML 报告或 Excel 报告的方式进行查看。此框架在项目组期间已落地使用并助力测试回归时发现了一些问题(BUG)。
框架开发完成后,只维护了一段时间,之后(离开项目组)就一直到现在没有再维护了,所以一些封装的方法与框架设计思想等有些“过时”了。接下来回顾一下此框架,也算是一个框架总结,为后续的升级改造做准备。
2、框架结构
测试框架(AllRound_Test)整体结构:
2.1、app
app 目录存放手机应用程序,分为 Android 和 iOS。当执行自动化脚本时,如果设置采用先安装手机应用程序的方式,则会根据路径安装指定的 APP 程序。
2.2、config
config 目录存放配置文件。
app.properties 存放 Android / iOS 包名。
browserdriver.properties 存放浏览器驱动的路径。
data.properties 存放测试数据,分为:Android、iOS、H5、接口。
Linux driver.properties 存放连接 Linux 的配置信息。
mongodriver.properties 存放连接 MongoDB 的配置信息。
sqldriver.properties 存放 MySQL 的配置信息。
ssh PrivateKey.properties 存放连接 SSH 的密钥路径。
url.properties 存放访问的 URL 地址,分为:H5、Web。
2.3、data
data 目录存放格式为 .xls 测试数据,分为:Android、iOS、H5、接口。
表格数据内容。
2.4、driver
driver 目录存放浏览器驱动程序,按操作系统分为:Windows、Mac。
2.5、libs
libs 目录,根据测试项目要求,使用 Jython 语言(即在 Java 环境下使用 Python 语言)。
2.6、pythonProject
pythonProject 目录存放 Python 脚本文件。
如图,一个单文件脚本(adder.py)、一个示例项目(TestDemo)。
例如 TestDemo.py 脚本(就是 Python 脚本语法,不需要任何修改)。
from Selenium import webdriver
import unittest, time, os
import HTMLTestRunner
def data_dirs():
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
DATA_DIRS = (
os.path.join(BASE_DIR, 'HTMLTestRunner生成测试报告'),
)
d = '/'.join(DATA_DIRS)
print(d)
return d
class Baidu(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome()
self.driver.implicitly_wait(10)
self.base_url = "#34;
self.verificationErrors = []
#百度搜索用例
def test_baidu_search(self):
u'''百度搜索用例'''
driver = self.driver
driver.get(self.base_url)
driver.find_element_by_id("kw").send_keys("HTNMLTestRunner")
driver.find_element_by_id("su").click()
def tearDown(self):
self.driver.quit()
self.assertEqual([], self.verificationErrors)
if __name__ == "TestDemo":
#测试套件
testunit=unittest.TestSuite()
#添加 测试用例 到测试套件中
testunit.addTest(Baidu("test_baidu_search"))
#获取当前时间
now = time.strftime("%Y-%m-%d %H_%M_%S")
#定义个报告存放路径
filename = data_dirs() + '/'+now+' result.html'
fp = open(filename, 'wb')
#定义测试报告
runner =HTMLTestRunner. HTML TestRunner(stream=fp, title=u'百度搜索测试报告', description=u'用例执行情况:')
#运行测试用例
runner.run(testunit)
#关闭报告文件
fp.close()
2.7、result
result 目录存放测试日志与测试报告。
测试日志。
测试报告-测试步骤。
测试报告-总览。
报错自动截图,并存储在指定目录里。
2.8、src
src 目录存放基类、页面元素、方法封装、报告插件、测试用例、公共方法等。
(1)base 目录存放基类,根据不同的场景分类,可执行 APP(Android、iOS)、Web、接口、Python 脚本。
例如:BaseParpareApp_android.java (执行手机端 Android,部分代码)
2) pages 目录存放页面元素类。
例如:DemoPage_android.java(部分代码)
(3)pageshelper 目录存放用于不同页面的方法封装。
例如:WeiboPageHelper_android.java(封装登录,部分代码)
(4)plugins 目录存放测试报告插件,支持生成 Excel 或 HTML 共三种方式的测试报告。
(5)testcases 目录存放测试用例。
例如 AppTest_Weibo_android. java (授信,部分代码)
(6)utils 目录存放公共方法。各种点击事件、读写 Excel 表格、初始化数据、调用命令行、接口方法封装、MySQL 操作(增删改查)、键盘操作、SSH 命令操作、MD5 加密、MongoDB 操作(增删改查)、驱动本地/远程浏览器、封装 Selenium 方法和常用方法、启动与关闭 appium 服务等。
例如:SelectBrowser.java(打开本地浏览器,部分代码)
2.9、sshPrivateKey
sshPrivateKey 目录存放用于连接 Linux 的 SSH 私钥。
2.10、startService
startService 目录存放可在命令行执行启动 Appium 服务的命令。
启动 Appium 服务:
appium --address 127.0.0.1 --port 4723 --no-reset --session-override
2.11、target
target 目录存放通过 Maven 编译该项目后所产生的 .class 文件等。
2.12、testng
testng 目录存放单元测试框架 TestNG 所要执行脚本的 .xml 文件。
例如:testng_weibo_honor7.xml(配置参数,部分内容)
将测试用例合并为测试集。
三种测试报告模式,选择哪种,就把监听打开即可。
2.13、pom.xml
pom.xml 文件,描述了该项目的 Maven 坐标,依赖关系,开发者需要遵循的规则,组织等,是项目级别的配置文件。
使用 Jenkins 持续集成 的方式,进行手动或自动或定时触发此文件,来进行 测试脚本 的执行。
例如:pom_android_weibo.xml 文件(部分内容)
主要依赖的包 testng、appium、jxl、 log4j 、selenium、mysql-connector-java、okhttp、allure-testng-adaptor、mongo-java-driver 等。
指定执行的 TestNG 的 .xml 文件。
整体流程:
Jenkins(手动/自动/定时)触发 -> Maven 的 pom.xml 文件 -> TestNG 的 .xml 文件 -> 测试集(启动服务、测试基类、测试用例、操作步骤、公共方法)-> 测试日志、测试报告、错误截图