
回顾18年我的Java自动化测试框架
1、前言
2、框架结构
2.1、app
2.2、config
2.3、data
2.4、driver
2.5、libs
2.6、pythonProject
2.7、result
2.8、src
2.9、sshPrivateKey
2.10、startService
2.11、target
2.12、testng
2.13、pom.xml
1、前言
18年的时候,根据项目组需要,编写了一套 Java 版的自动化测试框架,可进行包括 APP(Android、iOS)、H5、Web、接口的自动化测试任务。测试报告可通过 HTML 报告或 Excel 报告的方式进行查看。此框架在项目组期间已落地使用并助力测试回归时发现了一些问题(BUG)。
框架开发完成后,只维护了一段时间,之后(离开项目组)就一直到现在没有再维护了,所以一些封装的方法与框架设计思想等有些“过时”了。接下来回顾一下此框架,也算是一个框架总结,为后续的升级改造做准备。
2、框架结构
测试框架(AllRound_Test)整体结构:

app 目录存放手机应用程序,分为 Android 和 iOS。当执行自动化脚本时,如果设置采用先安装手机应用程序的方式,则会根据路径安装指定的 APP 程序。

config 目录存放配置文件。

app.properties 存放 Android / iOS 包名。

browserdriver.properties 存放浏览器驱动的路径。

data.properties 存放测试数据,分为:Android、iOS、H5、接口。

linuxdriver.properties 存放连接 Linux 的配置信息。

mongodriver.properties 存放连接 MongoDB 的配置信息。

sqldriver.properties 存放 MySQL 的配置信息。

sshPrivateKey.properties 存放连接 SSH 的密钥路径。

url.properties 存放访问的 URL 地址,分为:H5、Web。

data 目录存放格式为 .xls 测试数据,分为:Android、iOS、H5、接口。

表格数据内容。

driver 目录存放浏览器驱动程序,按操作系统分为:Windows、Mac。

libs 目录,根据测试项目要求,使用 Jython 语言(即在 Java 环境下使用 Python 语言)。

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 = "http://www.baidu.com/"
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.HTMLTestRunner(stream=fp, title=u'百度搜索测试报告', description=u'用例执行情况:')
#运行测试用例
runner.run(testunit)
#关闭报告文件
fp.close()result 目录存放测试日志与测试报告。

测试日志。

测试报告-测试步骤。

测试报告-总览。

报错自动截图,并存储在指定目录里。

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(打开本地浏览器,部分代码)

sshPrivateKey 目录存放用于连接 Linux 的 SSH 私钥。

startService 目录存放可在命令行执行启动 Appium 服务的命令。

启动 Appium 服务:
appium --address 127.0.0.1 --port 4723 --no-reset --session-overridetarget 目录存放通过 Maven 编译该项目后所产生的 .class 文件等。

testng 目录存放单元测试框架 TestNG 所要执行脚本的 .xml 文件。

例如:testng_weibo_honor7.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 文件 -> 测试集(启动服务、测试基类、测试用例、操作步骤、公共方法)-> 测试日志、测试报告、错误截图
本文分享自 AllTests软件测试 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!
