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

相关推荐
程序猿炎义11 小时前
一人内容团队——用Amazon Quick Desktop实现小红书从选题到发布的全流程自动化
大数据·人工智能·microsoft·自动化·小红书
爱吃提升14 小时前
Python桌面自动化PyAutoGUI完整实战教程:模拟鼠标键盘、窗口操作、图形识别自动化
python·自动化·计算机外设
星融元asterfusion18 小时前
高效网卡部署与自动化运维:EasyRoCE Toolkit NC 配置指南
运维·自动化
曦尧19 小时前
Awesome LLM Apps:一个 100+ 可运行 AI Agent / RAG 模板库的价值与边界
ai·自动化
会编程是什么感觉...19 小时前
立创商城封装转AD自动化 -- JLC2AD_AutoLib
自动化·硬件工程·layout
hbugs0011 天前
BPF 表达式检查器:一款免费开源的 Wireshark 捕获过滤器语法检查与可视化构建工具
网络·测试工具·开源·eve-ng·bpf
Chengbei111 天前
VMware Workstation Pro 26H1免费虚拟化利器
运维·安全·web安全·自动化·系统安全·apache·安全架构
程序员老油条1 天前
用 n8n 自建自动化:GitHub Push 后自动部署到服务器
服务器·自动化·github
pt10431 天前
思科网络自动化入门课程介绍
运维·网络·自动化
测试秃头怪1 天前
如何评估自动化测试脚本的编写时间和维护工作量?
自动化测试·软件测试·python·功能测试·测试工具·职场和发展·测试用例