ios 如何获取Appium服务器日志

xzabzqsa  于 2023-02-14  发布在  iOS
关注(0)|答案(4)|浏览(173)

有没有办法在测试脚本中获取Appium服务器日志

driver.manage().logs().get("appium server");

或将appium服务器日志重定向到控制台
我的主要目的是只获取检测日志,而不是所有日志

info: [debug] [INST]  instrument logs
tuwxkamq

tuwxkamq1#

@基里尔·朱可夫如是说。
您还可以使用-G--webhook标记将日志输出发送到HTTP侦听器,如下所示:--webhook localhost:9876.
如果您使用UI,则必须启用此日志到webhook

我已经创建了一个简单的套接字服务器来监听日志,它工作得很好。使用这个服务器可以根据您的需要获取日志。下面的代码将在控制台中打印日志

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.logging.Level;

import java.util.logging.Logger;

public class Server extends Thread {

private static ServerSocket socket;
private static String home = "./";
private static int port = 9876;
private static boolean isAlive = true;
private static final Server server = new Server();

public static Server getServer(String[] args) {
    if (args.length == 2) {
        home = args[1];
    }
    port = Integer.parseInt(args[0]);
    return server;
}

private Server() {

}

public static Server getServer() {
    return server;
}

@Override
public void run() {
    try {
        if (socket != null) {
            if (!socket.isClosed()) {
                if (port == getPort()) {
                    System.err.println("Server active at the Same Port! ");
                } else {
                    close();
                }
            }
        }
        socket = new ServerSocket(port);
        port = socket.getLocalPort();
        System.out.println("Server accepting connections on port :" + port);
        socket.setReceiveBufferSize(146988);
        handlleRequest();
    } catch (IOException e) {
        System.err.println("Could not start server: " + e.getMessage());
        port = 0;
        run();
    }
}

public int getPort() {
    return socket == null ? 0 : port;
}

public String getPortS() {
    return String.valueOf(port);
}

public void Stop() {
    isAlive = false;
}

public void handlleRequest() {
    while (isAlive) {
        System.out.println("Test");
        try (Socket connection = socket.accept()) {
            display(connection);
        } catch (IOException e) {
            System.err.println(e);
        }
    }
}

public void display(Socket connection) {
    try (BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()))) {
        String line = in.readLine();
        while (in.ready() && line != null) {
            System.out.println(line);
            line = in.readLine();
        }
    } catch (IOException ex) {
        Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
    }
}

public void close() throws IOException {
    if (socket != null && !socket.isClosed()) {
        isAlive = false;
        socket.close();
    }
}

public static void main(String[] args) {
    args = new String[]{"9876", "./"};
    Server f = Server.getServer(args);
    f.start();
}

}
62lalag4

62lalag42#

来自正式文件:

  • 您可以使用appium标志-g--log指定要存储日志的文件路径,然后可能通过[INST]过滤它?
  • 您还可以使用-G--webhook标记将日志输出发送到HTTP侦听器,如下所示:虽然我不知道它是如何工作的,但我想知道!
  • 在控制台输出中有一个标志--log-timestamp,它打开了时间戳(默认情况下是false)。我建议启用它:)
p4rjhz4m

p4rjhz4m3#

只是编写一个可能的解决方案,而没有我们手头使用的代码,请注意,这是我们在Windows机器上运行的节点上所做的,但它可能也适用于Appium。该驱动程序扩展自RemoteWebDriver,后者具有可重写的日志方法(不记得名字了)。您可以扩展IOSDriver类并覆盖那个日志方法,以便可以使用您喜欢的日志库在任何您想要的地方进行日志记录。

hivapdat

hivapdat4#

还有一个选项,你可以从编辑器启动appium服务器。编写一个自定义函数,从你的测试启动和停止服务器。当这样做的时候,你可以在控制台中看到服务器日志-在运行时。和测试完成后。日志可以被捕获,并从编辑器转换为任何其他格式。
附加:如果您通过Jenkins安排CI/CD,日志也将是报告的一部分。
请参阅下面的代码自动启动appiumserver:公共void启动新应用服务器(){

AppiumDriverLocalService service = new AppiumServiceBuilder()
            .withAppiumJS(new File(
                    "C:\\Users\\John\\AppData\\Roaming\\npm\\node_modules\\appium\\build\\lib\\main.js"))
            .withIPAddress("127.0.0.1").usingPort(4723).build();
    this.service = service;
    service.start();
}

相关问题