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

文章目录

一、背景

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

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

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

二、生成xml文件

2.1、创建xml方法

java 复制代码
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

java 复制代码
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 static
    final 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 复制代码
<?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启动命令,这样咱们才可以拼接命令,启动服务。

先试下编写好的命令:

bash 复制代码
appium -p 4327 -bp  11 -U 127.0.0.1:62001

编写执行启动服务器:

判断是否存在,如果存在就kill

四、主方法启动类

五、集成Jenkins

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

六、总结

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

相关推荐
was17216 小时前
Python 自动化实践:Typora 自定义上传接口与兰空图床集成
python·自动化·typora·兰空图床
介一安全17 小时前
BurpSuite 插件 FastjsonScan 使用和手动验证
测试工具·网络安全·安全性测试·安全靶场
工业HMI实战笔记18 小时前
工业机器人HMI:协作机器人的人机交互界面
人工智能·ui·性能优化·机器人·自动化·人机交互·交互
工业HMI实战笔记1 天前
工业HMI色彩规范:4个禁忌+3类场景配色方案
ui·性能优化·自动化·汽车·交互
键盘鼓手苏苏1 天前
Flutter for OpenHarmony:git 纯 Dart 实现的 Git 操作库(在应用内实现版本控制) 深度解析与鸿蒙适配指南
开发语言·git·flutter·华为·rust·自动化·harmonyos
志栋智能2 天前
AI驱动的安全自动化机器人:从“告警疲劳”到“智能免疫”的防御革命
运维·人工智能·安全·机器人·自动化
志栋智能2 天前
自动化运维真的只能选复杂平台吗?
运维·网络·数据库·人工智能·自动化
我送炭你添花2 天前
工业自动化大全(目录)持续更新中
运维·自动化
志栋智能2 天前
AI驱动的数据库自动化巡检:捍卫数据王国的“智能中枢”
大数据·运维·数据库·人工智能·云原生·自动化
qq_24218863322 天前
分享Xshell在服务器管理中的高级技巧与自动化脚本案例
运维·服务器·自动化