摘要:
本文介绍了如何使用 Jenkins 和 TestNG 实现满足复杂测试需求的”自助式”自动化测试平台。该方案以 Jenkins 作为平台的基础,结合功能强大的插件及系统配置,部署基于 TestNG 的自动化测试包,并提供了友好的 Web 访问界面。项目成员可以在任何时间和地点,通过浏览器访问该平台,而且可以按照不同需求选择测试环境、测试集、测试用例,并提交自动化测试请求,达到真正的“自助式”自动化测试。该平台它可以极大地提高开发和测试团队自动化脚本的使用效率和便捷性。
目录:
- 提出需求
- 方案设计
- 编码
- 测试
正文:
一. 提出需求
测试部开发一套自己的质量中心,主要用于缺陷统计、接口自动化测试、APP自动化测试、在线监控等,在接口自动化测试和APP自动化测试过程中,我们需要实现,用户选择不同的测试集合,集合中包含哪些测试用例,TestNG会自己去执行不同的测试用例,做到根据用户不同的输入做出不同的响应。
二. 方案设计
- 质量中心(WEB)提供测试用例管理和测试集合管理,创建测试任务,关联测试集合,测试集合又关联测试用例
- 质量中心(WEB)将创建的测试任务相应的调用Jenkins任务,并把相应的需要传递的参数传递过去
- Jenkins任务启动,先根据传进来的测试任务编号,找到相应的测试集合和测试用例,并用Python脚本生成相应的TestNG XML文件,其中XML文件定义了需要执行的测试用例,这样子就做到了,根据用户不同的输入做出不同的相应
- Jenkins执行Python生成的TestNG XML文档
- TestNG在Jenkins上执行后会在surefine-reports文件夹下面生成emailable-report.html测试报告
- Jenkins任务执行完再次调用Python脚本,将生成的emailable-report.html报告写入MySQL存储起来,提供给质量中心(WEB)查看
三. 编码
3.1 质量中心->APP自动化测试 数据库设计
app_elements:存储app页面控件,如Android的resource id,iOS的xpath
app_execute: 存储支持执行结果,测试报告、测试结果等
app_mobile: 存储测试机型的相关信息
app_modules: 存储测试APP中包含的模块,分层的思想,方便管理
app_platform: 存储测试APP,支持多个APP
app_suitecase: 存储测试集合与测试用例的关系,一个测试用例对应多个测试集合
app_testcase:存储测试用例
app_testjob:存储测试任务,关联相应的Jenkins路径,直接多地执行
app_testsuite:存储测试集合
3.2 Jenkins参数配置
TestPlatform: 测试平台,是Android还是iOS
TestDevice: 测试设备,Android需要传入udid,iOS不需要
TestEnv: 测试环境,qa还是live
TestJobId: 测试任务编号,通过这个任务编号可以MySQL查询到关联的测试集合以及测试集合中的测试用例
TestExecuteId: 执行任务编号,传入Python脚本,讲生成的测试报告emailable-report.html存放相应的位置
3.3 Python文件生成TestNG XML
# -*- coding:utf-8 -*-
import os
import MySQLdb
import sys
import xml.dom.minidom
# 外部传入的测试任务编号
test_job_id = sys.argv[1]
# 连接db
def connect_db(db):
db = MySQLdb.connect(host="10.9.8.20",
port=3306,
user="***",
passwd="***",
db=db,
charset="utf8")
return db
# 请求mysql获取数据
def get_data(db, s