文章目录
一、背景
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,全部一键执行。