自动化框架串讲姓名:王文慧研发中心用户产品部导师:赵海洋目录CONTENTS自动化框架介绍01TESTNG框架介绍02核心流程03项目总结与规划04自动化框架介绍自动化框架介绍技术基于SeleniumWebDriver开源技术开发用Maven进行Project管理数据管理用CSV文件存储测试数据,实现测试数据与测试用例的分离测试数据管理方便,降低自动化脚本的维护成本,实现数据驱动PO模式自身元素(WebElement)实现功能(Services)TestNG组织测试自动化框架介绍收益在集成测试阶段快速实现回归测试4.10版本开始执行每个版本跑3-5次回归测试兼容机型和系统(本地跑),覆盖外卖Top5机型,覆盖系统4.0-6.定位的bug存在的问题版本间测试用例不兼容,兼容性开发成本较高。比如shopdetail左右滑动的区域在4.9时是大图下的长方形区域的id,4.10版本删除了这个区域,导致这个元素id获取不到,case报错框架代码目录介绍测试代码目录变量规范定义Page类case测试相关的工具类TestBase类|setup()等源代码(core)目录所需资源目录(报告相关的配置和模板、log4j)Maven的依赖包,存放在本地默认路劲C:\user\...\.m2项目的主体资源Target是存放项目构建后的文件和目录,jar包,war包,编译的class文件等,target里面的内容都是M2构建的时候生成的Src目录包含所有工程的源码文件,配置文件,资源文件等等,它的子目录一般包含main、testGit使用ci.yml进行项目配置,包含如何构建项目的定义,一般放在根目录改文件用于管理:源代码,配置文件,url,项目的依项目的赖关系等等TestNG框架介绍数据管理TESTNG框架介绍即Testing,NextGeneration,下一代测试技术,是根据JUnit和NUnit思想,采用jdk的annotation技术来强化测试功能并借助XML文件强化测试组织结构而构建的测试框架。应用范围使用步骤TESTNG单元测试集成测试系统测试编写测试业务逻辑在配置测试信息运行TestNG配置文件testng.xml数据管理TESTNG框架介绍TestNG运行方式1、Eclipse集成方式TestNG提供Eclipse插件,在runconfigure中进行配置2、Maven集成方式3、命令行方式Javaorg.testng.TestNGtestng1.xml==右键运行testNG数据管理TESTNG框架介绍TestNG的主要特点:Annotation依赖性测试支持并发测试支持错误重运行测试参数化测试支持测试分组通过testng.xml来管理测试详实的报告,可按照自己需要进行二次开发不仅仅适用于单元测试数据管理TESTNG框架介绍TestNG使用annotation的优点:方法名称不受任何模式或者格式的束缚;如下是TestNG使用的annotation清单:•@BeforeSuite,@BeforeTest,@BeforeClass,@BeforeMethod,@BeforeGroups•@AfterSuite,@AfterTest,@AfterClass,@AfterMethod,@AfterGroups•@DataProvider•@ExpectedExceptions•@Factory•@Test•@Parameters,会在test-output目录下生成一个testng-failed.xml文件,这对于批量执行测试定位问题很有帮助,testng可以单独执行这些失败的测试;使用参数TestNG传参数的两种方式(xml文件,@DataProvider)下面这个方法没用到数据管理TESTNG框架介绍监听器尽管名字叫监听器,但事实上它们只是一些预定义的Java接口。用户创建这些接口的实现类,并把它们加入到TestNG中,TestNG便会在测试运行的不同时刻调用这些类中的接口方法监听器接口ListenerIExecutionListennerISuiteListenerIInvokedMethodListenerTestListenerAdapterIReporteronExecutionStart()onExecutionFinish()onStart(ISuitesuite)onFinish(ISuitesuite)beforeInvocation()afterInvocation()onStart()onFinish()onTestFailure()onTestSkipped()onTestSuccess()核心流程核心流程Coreutilsworkflowelements……TestSuiteTestCaseTestScriptTestDataCoreDriverHelperCsvFilepropertiesDataDriverParsecsvPageclassloaderListenerappiumDriver自动化框架ResultLog4jReportNgMailReportScreenShotsUIAutomatorUIAutomatorIOSAndroidSideH5chromedriverSelenium/AppiumDriverAppiumServerSendOperationCMDtoport4727WebDriverControllerAppiumClientListentoSocketPort4727Bootstrap.jarPCSideSorketJSON自动化框架end(IExecutionListener、ISuiteListener、IInvokedMethodListener、Ireporter、ITestListener)AutTest_TestNG.xmlstartListenerBaseTestBaseShopMenuTestListenerAppDriverDataDrivercoreextends①onExecutionStart()开始监听测试,testng启动执行之前调用onExecutionFinish()测试结束监听,testng执行完所有测试后调用ListenerAdapter核心流程(IExecutionListener、ISuiteListener、IInvokedMethodListener、Ireporter、ITestListener)AutTest_TestNG.xmlstartListenerBaseTestBaseShopMenuTestListenerAppDriverDataDrivercoreextends核心流程end启动监听,监听器作为守护进程在后台运行end(IExecutionListener、ISuiteListener、IInvokedMethodListener、Ireporter、ITestListener)AutTest_TestNG.xmlstartListenerBaseTestBaseShopMenuTestListenerAppDriverDataDrivercoreextends②初始化Property配置文件,放入系统属性变量中System.getProperty(“”);配置文件路劲/resource/config/Config.propertis日志设置(Log4j输出)ListenerAdapter核心流程核心流程(IExecutionListener、ISuiteListener、IInvokedMethodListener、Ireporter、ITestListener)AutTest_TestNG.xmlstartListenerBaseTestBaseShopMenuTestListenerAppDriverDataDrivercoreextends执行appDriver类的静态方法块,静态变量endListenerAdapter1(IExecutionListener、ISuiteListener、IInvokedMethodListener、Ireporter、ITestListener)AutTest_TestNG.xmlstartListenerBaseTestBaseShopMenuTestListenerAppDriverDataDrivercoreextends录屏功能—我们没用这个功能endListenerAdapter核心流程(IExecutionListener、ISuiteListener、IInvokedMethodListener、Ireporter、ITestListener)AutTest_TestNG.xmlstartListenerBaseTestBaseShopMenuTestListenerAppDriverDataDrivercoreextends运行子类Test的静态变量endListenerAdapter核心流程(IExecutionListener、ISuiteListener、IInvokedMethodListener、Ireporter、ITestListener)AutTest_TestNG.xmlstartListenerBaseTestBaseShopMenuTestListenerAppDriverDataDrivercoreextends从父类到子类的静态语句块、静态变量运行结束,进入监听ListenerAdapter,开始运行testNG.xml中的内容:套件—测试集—测试方法endListenerAdapter核心流程1ListenerAdapter核心流程(IExecutionListener、ISuiteListener、IInvokedMethodListener、Ireporter、ITestListener)AutTest_TestNG.xmlstartListenerBaseTestBaseShopMenuTestListenerAppDriverDataDrivercoreextendsend核心流程(IExecutionListener、ISuiteListener、IInvokedMethodListener、Ireporter、ITestListener)AutTest_TestNG.xmlstartListenerBaseTestBaseShopMenuTestListenerAppDriverDataDrivercoreextendsend1ListenerAdapter测试集执行结束,进入TestBase.java中执行setup(),启动app(@BeforeTest)HtmlReporterListener监听2ListenerAdapter(IExecutionListener、ISuiteListener、IInvokedMethodListener、Ireporter、ITestListener)AutTest_TestNG.xmlstartListenerBaseTestBaseShopMenuTestListenerAppDriverDataDrivercoreextendsend1ListenerAdapter进入TestBase.java中执行setup(),启动app2ListenerAdapter核心流程(IExecutionListener、ISuiteListener、IInvokedMethodListener、Ireporter、ITestListener)AutTest_TestNG.xmlstartListenerBaseTestBase