移动端自动化测试工具 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,全部一键执行。

相关推荐
小白学大数据1 天前
Python 自动化爬取网易云音乐歌手歌词实战教程
爬虫·python·okhttp·自动化
守城小轩2 天前
基于Chrome140的Yahoo自动化(关键词浏览)——需求分析&环境搭建(一)
运维·自动化·chrome devtools·浏览器自动化·指纹浏览器·浏览器开发
DevilSeagull2 天前
电脑上安装的服务会自动消失? 推荐项目: localhostSCmanager. 更好管理你的服务!
测试工具·安全·react·vite·localhost·hono·trpc
chaofan9802 天前
2026年大模型接入实测:高并发场景下企业级API网关横向对比与选型指南
人工智能·gpt·自动化·api
舟遥遥娓飘飘2 天前
如何解决 Claude Code 频繁授权(权限请求)问题
自动化·ai编程
V搜xhliang02462 天前
OpenClaw科研全场景用法:从文献到实验室的完整自动化方案
运维·开发语言·人工智能·python·算法·microsoft·自动化
liangdabiao2 天前
乐高摩托车深度报告-致敬张雪夺冠 -基于llm-wiki技术自动化写文章的效果
运维·人工智能·自动化
测试那点事儿2 天前
第10章 零基础接口自动化到 Jenkins 持续集成【定时监控与邮件告警完整落地】
ci/cd·自动化·jenkins
Python大数据分析@2 天前
浏览器自动化工具 Selenium,Playwright,Puppeteer 做爬虫有哪些弊病?
爬虫·selenium·自动化
qq_454245032 天前
从 UI 操作到环境交互:一种通用元命令自动化协议的设计与意义
人工智能·ui·自动化·交互