文章目录
- 一、背景
- 二、生成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,全部一键执行。
相关系列:
- 移动端自动化测试工具 Appium 快速入门
- 移动端自动化测试 Appium 框架之数据驱动
- 移动端自动化测试工具 Appium 之元素操作小技巧
- 移动端自动化测试工具 Appium 之 main 启动
- 移动端自动化测试工具 Appium 之自定义报告
- 移动端自动化测试工具 Appium 之持续集成