1.接口介绍与HTTP
一、接口
1.接口分类
硬件接口:指的是两个硬件设备之间的连接方式
软件接口:指的是软件程序之间的数据交互通道
2.软件接口分类
程序内部接口:同一个系统中模块间的接口
外部接口:跨系统平台与平台间的对接
3.常见接口协议...
阅读全文6.Allure报表集成
Allure是一款开源的报告框架
一、搭建环境步骤
1.集成依赖
<!--https://mvnrepository.com/artifact/io.qameta.allure/allure-testng--><dependency><groupId>io.qameta.allure</groupId><artifactId>allure-testng</artifactId><version>2.12.1</version></dependency>
2.设置编码,避免乱码
<properties><aspectj.version>1.8.10</aspectj.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><maven.compiler.encoding>UTF-8</maven.compiler.encoding></properties>
3.引入Maven surefire插件:生成Allure报表
<build><plugins><plugin><!--maven-surefire-plugin配合testng/junit执行测试用例的maven插件--><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.22.1</version><configuration><!--测试失败后,是否忽略并继续测试--><testFailureIgnore>true</testFailureIgnore><suiteXmlFiles><!--testng配置文件名称--><suiteXmlFile>testng.xml</suiteXmlFile></suiteXmlFiles><!--设置参数命令行--><argLine><!--UTF-8编码-->-Dfile.encoding=UTF-8<!--配置拦截器-->-javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar"</argLine><systemProperties><property><!--配置allure结果存储路径--><name>allure.results.directory</name><value>${project.build.directory}/allure-results</value></property></systemProperties></configuration><dependencies><!--aspectjweavermaven坐标--><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>${aspectj.version}</version></dependency></dependencies></plugin><!--maven-compiler-plugin确保maven工程JDK版本为1.8,不会变--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>8</source><target>8</target></configuration></plugin></plugins></build>
4.构建测试:mvn tes
注意:要生成Allure...
阅读全文5.log4j日志集成
log4j是一个日志框架,配置简单,功能强大,在项目中用来记录日志很方便
使用log4j的操作步骤
1.引入Log4j依赖
<!--https://mvnrepository.com/artifact/log4j/log4j--><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency>
2.配置Log4j.properties文件(存放在resources目录下
#根logger主要定义log4j支持的日志级别及输出目的地log4j.rootLogger=INFO,console,file###输出信息到控制台配置####表示输出到控制台log4j.appender.console=org.apache.log4j.ConsoleAppender#将System.out作为输出log4j.appender.console.Target=System.out#使用灵活的布局展示日志信息log4j.appender.console.layout=org.apache.log4j.PatternLayout#日志详细输出信息样式log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-ddHH:mm:ss}%-5p%c{1}:%L-%m%n###输出信息到文件中配置####每天产生一个日志文件log4j.appender.file=org.apache.log4j.DailyRollingFileAppender#输出文件目的地log4j.appender.file.File=log/web_auto.log#新的日志信息是否追加到旧的日志文件末尾log4j.appender.file.Append=false#使用灵活的布局展示日志信息log4j.appender.file.layout=org.apache.log4j.PatternLayout#日志详细输出信息样式log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-ddHH:mm:ss}%-5p%c{1}:%L-%m%n
3.使用方式...
阅读全文4.微信小程序自动化
由于腾讯系QQ、微信是基于腾讯自研X5内核,不是谷歌原生webview,所以调试会有些许差异(有很多app厂商也开始采用X5内核
微信小程序只能够支持手机,模拟器是不行的
1:打开微信小程序webvie...
阅读全文3.App Hybrid应用自动化
webview:Android系统控件、用来展示web页面、再系统中作为单独的系统应用存在
Hybrid应用自动化实现
基于UIAutomator+ChromeDrive
native部分走UIAutom...
阅读全文2.App特殊元素操作
一、手势操作-滑动
下拉刷新
//下拉刷新-向下滑动//按住起始点->滑动到终止点位置上->手指抬起TouchActiontouchAction=newTouchAction(driver);//起始点PointOptionstartPoint=PointOption.point(424,632);//终止点PointOptionendPoint=PointOption.point(424,1000);//设置滑动时间-waitOptions类型的参数WaitOptionswaitOptions=WaitOptions.waitOptions(Duration.ofMillis(1000));touchAction.press(startPoint).waitAction(waitOptions).moveTo(endPoint).release().perform();/***向下滑动的通用封装*@paramswipeTime滑动时间*/publicstaticvoidswipeDown(longswipeTime){//约定滑动起始点与终止点的位置//滑动起始点:1/2宽度1/4高度滑动终止点:1/2宽度3/4高度intscreenWidth=driver.manage().window().getSize().getWidth();intscreenHeight=driver.manage().window().getSize().getHeight();TouchActiontouchAction=newTouchAction(driver);//起始点(424,632)PointOptionpointOptionA=PointOption.point(screenWidth/2,screenHeight/4);//终止点(424,1000)PointOptionpointOptionB=PointOption.point(screenWidth/2,screenHeight*3/4);//设置滑动时间-waitOptions类型的参数WaitOptionswaitOptions=WaitOptions.waitOptions(Duration.ofMillis(swipeTime));touchAction.press(pointOptionA).waitAction(waitOptions).moveTo(pointOptionB).release().perform();}/***向上滑动的通用封装*@paramswipeTime滑动时间*/publicstaticvoidswipeUp(longswipeTime){//约定滑动起始点与终止点的位置//滑动起始点:1/2宽度1/4高度滑动终止点:1/2宽度3/4高度intscreenWidth=driver.manage().window().getSize().getWidth();intscreenHeight=driver.manage().window().getSize().getHeight();TouchActiontouchAction=newTouchAction(driver);//起始点(424,632)PointOptionpointOptionA=PointOption.point(screenWidth/2,screenHeight*3/4);//终止点(424,1000)PointOptionpointOptionB=PointOption.point(screenWidth/2,screenHeight/4);//设置滑动时间-waitOptions类型的参数WaitOptionswaitOptions=WaitOptions.waitOptions(Duration.ofMillis(swipeTime));touchAction.press(pointOptionA).waitAction(waitOptions).moveTo(pointOptionB).release().perform();}/***向左滑动的通用封装*@paramswipeTime滑动时间*/publicstaticvoidswipeLeft(longswipeTime){//约定滑动起始点与终止点的位置//滑动起始点:1/2宽度1/4高度滑动终止点:1/2宽度3/4高度intscreenWidth=driver.manage().window().getSize().getWidth();intscreenHeight=driver.manage().window().getSize().getHeight();TouchActiontouchAction=newTouchAction(driver);//起始点(424,632)PointOptionpointOptionA=PointOption.point(screenWidth*3/4,screenHeight/2);//终止点(424,1000)PointOptionpointOptionB=PointOption.point(screenWidth/4,screenHeight/2);//设置滑动时间-waitOptions类型的参数WaitOptionswaitOptions=WaitOptions.waitOptions(Duration.ofMillis(swipeTime));touchAction.press(pointOptionA).waitAction(waitOptions).moveTo(pointOptionB).release().perform();}/***向右滑动的通用封装*@paramswipeTime滑动时间*/publicstaticvoidswipeRight(longswipeTime){//约定滑动起始点与终止点的位置//滑动起始点:1/2宽度1/4高度滑动终止点:1/2宽度3/4高度intscreenWidth=driver.manage().window().getSize().getWidth();intscreenHeight=driver.manage().window().getSize().getHeight();TouchActiontouchAction=newTouchAction(driver);//起始点(424,632)PointOptionpointOptionA=PointOption.point(screenWidth/4,screenHeight/2);//终止点(424,1000)PointOptionpointOptionB=PointOption.point(screenWidth*3/4,screenHeight/2);//设置滑动时间-waitOptions类型的参数WaitOptionswaitOptions=WaitOptions.waitOptions(Duration.ofMillis(swipeTime));touchAction.press(pointOptionA).waitAction(waitOptions).moveTo(pointOptionB).release().perform();}//场景:滑动到页面底部driver.findElement(By.id("com.lemon.lemonban:id/navigation_tiku")).click();driver.findElement(By.id("com.lemon.lemonban:id/button_go_login")).click();driver.findElement(By.id("com.lemon.lemonban:id/et_mobile")).sendKeys("13323234545");driver.findElement(By.id("com.lemon.lemonban:id/et_password")).sendKeys("234545");driver.findElement(By.id("com.lemon.lemonban:id/btn_login")).click();driver.findElement(MobileBy.AndroidUIAutomator("newUiSelector().text(\"软件测试基础\")")).click();driver.findElement(By.id("com.lemon.lemonban:id/first_level")).click();Thread.sleep(3000);//循环滑动while(true){//滑动前的页面源代码StringbeforeSource=driver.getPageSource();swipeUp(1000);Thread.sleep(1000);//什么时候跳出循环呢?//1、等待【全部加载完成】出来之后?缺点:(1)必须要保证此元素要立马出来(2)有些页面没有这个提示//通过getPageSource进行判断/*if(driver.getPageSource().contains("全部加载完成")){break;}*///2、getPageSource,通过滑动前后页面的pageSource是不是发生变化//滑动之后的页面源代码StringafterSource=driver.getPageSource();if(afterSource.equals(beforeSource)){//滑动到了页面的底部break;}}
二、特殊场景元素定位
1.toast元素定位
Android中的Toast是一种简易的消息提示框,当视图显示给用户,在应用程序中显示为浮动和Dialog不一样的是,它永远不会获得...
阅读全文2.App元素定位及常见API
一、App前端基础知识
1.App类型划分
2.App类型对比
应用类型 | 优点 | 缺点 |
Nativ | 直接依托于操作系统、交互性强、性能最好、功能最为强大 | 开发成本高、无法跨平台、更新缓慢、审核周期慢、维护成本高 |
we |
1.环境搭建及第一个App脚本
Appium同时支持Android & IOS,windows只能支持Android,mac既可以支持Android也可以支持IO
一、准备手机模拟器
下载地址:https://www.yeshen.com...
阅读全文UI自动化–AutoIT
一、安装AutoI
下载地址https://www.autoitscript.com/site/autoit/downloads/
直接默认安装即可
二、使用AutoI
使用AutoIT Window Info工具,识别窗口元素,记下Tile、Class、Interface信息
1.使用SciTE Script Editor编辑脚本...
阅读全文