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

相关推荐
嘤嘤怪呆呆狗2 小时前
【开发问题记录】使用 Docker+Jenkins+Jenkins + gitee 实现自动化部署前端项目 CI/CD(centos7为例)
前端·vue.js·ci/cd·docker·gitee·自动化·jenkins
张某人想退休2 小时前
Postman最新接口自动化持续集成
自动化·jenkins·postman
Fuweizn11 小时前
医院也逐渐使用复合机器人向自动化转型升级
自动化·医院·复合机器人
白手小弟12 小时前
python wxauto库实现微信自动化发送信息、回复、添加好友等
运维·自动化
途途途途12 小时前
精选9个自动化任务的Python脚本精选
数据库·python·自动化
ii_best12 小时前
ios按键精灵自动化的脚本教程:自动点赞功能的实现
运维·ios·自动化
3DVisionary12 小时前
数字图像相关DIC技术用于机械臂自动化焊接全场变形测量
运维·数码相机·自动化·焊接变形实验·数字图像相关dic技术·自动化焊接全场变形测量·非接触高精度环境适应性全场测量
ether-lin12 小时前
DevOps实战:用Kubernetes和Argo打造自动化CI/CD流程(2)
kubernetes·自动化·devops
无所不在的物质13 小时前
Jenkins基础教程
运维·云原生·自动化·jenkins
cmgdxrz15 小时前
Postman接口测试02|执行接口测试、全局变量和环境变量、接口关联、动态参数、断言
测试工具·postman