当前位置: 首页 > news >正文

移动端自动化测试工具 Appium 之 main 启动

文章目录

  • 一、背景
  • 二、生成xml文件
    • 2.1、创建xml方法
    • 2.2、执行主类MainTest
    • 2.3、自动生成的xml
    • 2.4、工程目录
    • 2.5、执行结果
  • 三、命令行执行appium服务
  • 四、主方法启动类
  • 五、集成Jenkins
  • 六、总结

一、背景

Jenkins 做集成测试是不错的工具,那么UI自动化是否可以,appium与testng结合能否集成到jenkins中去做定时运行。如果要执行,先解决jenkins怎么识别testng:

  • 通过pom文件执行
  • 通过调用main方式testng

今天只演示通过main方式执行testng

二、生成xml文件

2.1、创建xml方法

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Properties;
/*** @author liwen* @Title: createTestngXml* @Description: 生存xml文件* @date 2019/11/24 / 16:15*/
public class createTestngXml
{static Properties sysProperty = System.getProperties();public static void createTestngXml(String classname){Document document = DocumentHelper.createDocument();Element root = DocumentHelper.createElement("suite");document.setRootElement(root);root.addAttribute("name", "automation");root.addAttribute("thread-count", String.valueOf("1"));//生成监听器Element listeners = root.addElement("listeners");Element listener1 = listeners.addElement("listener");listener1.addAttribute("class-name", "appout.reporter.ReporterListener");Element test = root.addElement("test");//增加设备号与端口号:Element paramUuid = test.addElement("parameter");paramUuid.addAttribute("name", "udid");//根据实际情况修改paramUuid.addAttribute("value", "127.0.0.1:62001");Element paramPort = test.addElement("parameter");paramPort.addAttribute("name", "port");//根据实际情况修改paramPort.addAttribute("value", "4723");test.addAttribute("name", "127.0.0.1");Element classes = test.addElement("classes");Element classNode = classes.addElement("class");classNode.addAttribute("name", classname);OutputFormat format = new OutputFormat("    ", true);XMLWriter xmlWrite2;try{xmlWrite2 = new XMLWriter(new FileOutputStream(sysProperty.getProperty("user.dir") + "/comsevenday/src/main/resources/mytestng.xml"), format);xmlWrite2.write(document);}catch(UnsupportedEncodingException e){e.printStackTrace();}catch(FileNotFoundException e){e.printStackTrace();}catch(IOException e){e.printStackTrace();}}
}

2.2、执行主类MainTest

import appout.utils.createTestngXml;
import org.testng.TestNG;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;/*** @author liwen* @Title: MainTest* @Description: 主方法* @date 2019/11/24 / 19:49*/public class MainTest
{static Properties sysProperty = System.getProperties();private staticfinal String ESCAPE_PROPERTY = "org.uncommons.reportng.escape-output";public static void main(String[] args){try{//执行的类createTestngXml.createTestngXml("appout.appcase.CartTest");}catch(Exception e){e.printStackTrace();}System.setProperty(ESCAPE_PROPERTY, "false");List < String > suites = new ArrayList < String > ();System.out.println(suites);suites.add(sysProperty.getProperty("user.dir") + "/comsevenday/src/main/resources/appxml/mytestng.xml");TestNG tng = new TestNG();tng.setTestSuites(suites);tng.run();}
}

2.3、自动生成的xml

<?xml version="1.0" encoding="UTF-8"?>
<suite name="automation" parallel="Automatically generate xml" thread-count="1"><listeners>    <listener class-name="appout.reporter.ReporterListener"/></listeners> <test name="127.0.0.1">     <parameter name="udid" value="127.0.0.1:62001"/>      <parameter name="port" value="4723"/>      <classes>           <class name="appout.appcase.CartTest"/></classes></test>
</suite>

2.4、工程目录

在这里插入图片描述

2.5、执行结果

在这里插入图片描述

三、命令行执行appium服务

如果使用命令行执行,需要了解下appium启动命令,这样咱们才可以拼接命令,启动服务。

先试下编写好的命令:

appium -p 4327 -bp  11 -U 127.0.0.1:62001

在这里插入图片描述
编写执行启动服务器:
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

判断是否存在,如果存在就kill
在这里插入图片描述

四、主方法启动类

在这里插入图片描述

五、集成Jenkins

这个就不介绍,网上很多介绍的。

六、总结

通过上面主方法调用检查appium服务,并且执行appium服务,上面不足的地方就是生成xml中设备号与udid需要手动,其实也是可以通过自动生成并且赋值给appium执行命令与生存testng.xml中去。暂时就不演示怎么加上去,其实在工作中确实是自动获取设备号生存xml,全部一键执行。

http://www.lryc.cn/news/345894.html

相关文章:

  • WT32-ETH01作为TCP Client进行通讯
  • jni 返回二维byte数组
  • “webpack-dev-server --config build/webpack.dev.conf.js” 请问这个问题要如何修复
  • TOOL使用fiddler导出的har文件导入到postman测试接口
  • 第十三届蓝桥杯决赛(国赛)真题 Java A 组【原卷】
  • 数据结构_顺序表中基本操作的实现_代码
  • 提升SEO排名!SSL证书对SEO效果的积极影响
  • JAVA 项目<果园之窗>_完结
  • Vue + Vite + Axios 项目多环境以及部署前后端跨域
  • Nginx+GateWay
  • React中间件的概念以及常用的实现
  • 如何对团队成员进行六西格玛管理的培训?
  • Zibll 子比文章标题加上渐变彩色文字
  • C/C++ StringToAddress(字符串转 boost::asio::ip::address)
  • 【玩转Google云】构建安全高效的电商系统:GCP VPC 网络规划指南
  • 【YOLO改进】换遍MMDET主干网络之Pyramid Vision Transformerv2(PVTv2)(基于MMYOLO)
  • 【漏洞复现】RuvarOA协同办公平台 WorkFlow接口处存在SQL注入
  • Kubelet containerd 管理命令 ctr常用操作
  • 求一个B站屏蔽竖屏视频的脚本
  • 用Github+HUGO搭建博客的经验教训
  • MongoDB4.4操作命令
  • 共享旅游革命:千益畅行卡的优势揭秘
  • 【doghead】mac: clion2024.1启动崩溃
  • 企业合规视角下的菜鸟网络与拼多多不正当竞争案
  • 如何在Java中处理日期和时间?介绍Java 8中的时间API
  • 24数维杯ABC题思路已更新!!!!
  • Fastapi+docker+tortoise-orm+celery
  • springBoot笔记五(pom.xml\yml)
  • 三生随记——耳机里的诅咒
  • 嵌入式学习<2>:EXTI、ADC、NVIC和AFIO