缘起

最近Android,IOS自动化多开群控都搞好了,但是Appium中的log 显示中文乱码问题像个苍蝇一样,看着感觉特别难受,挥之不去,抚之不平。论坛搜索了一下,很多帖子都反映过这个问题,但是都没给出解决策略。不知道这些小 伙伴最终有没有解决。遂决定,吃个大闸蟹,研究一下看能否解决。

特别声明

本文只针对解决Jenkins集成后Appium的log日志中文乱码问题。桌面版本人1.8.1版的未发现乱码,如您桌面版的乱码,我也解决不 了。另外命令执行时受限于机器,环境,开发语言,执行姿势等多方面影响,如果参考本帖未能解决您的问题,真诚的对您说声非常抱歉。没能终结您的乱码问题, 牛逼吹大了

工程代码编码设置

  • 设置自己工程代码字符编码为UTF-8
  • 设置Maven打包编译jar的编码为UTF-8

Jenkins环境变量设置

简而言之一句话:管理员账号登录后,设置全局属性 LANG :zh.CH.UTF-8
设置位置:【系统管理】--->【系统设置】--->【全局属性】

 

Java启动参数设置

设置java执行的环境变量,也即如下执行testng时设置一个编码的参数
java -Dfile.encoding=UTF-8 -classpath /Users/iosTest.jar org.testng.TestNG /Users/mytestng.xml

如果经过以上的几步骚操作后,您的log中文不乱码了,那下面的可以忽略了。

Appium的log采集处理

由于要命令起Appium服务,写一个java调用CMD或者shell的共通类。执行命令时,输出命令返回的log也即Appium服务日志信息。在接受命令执行输出时设置一下编码:UTF-8。
废话少说,放码过来。

/**
* 命令执行器
* @author Zhang
*
*/
public class CommandExecutorImpl implements CommandExecutor { static final Logger logger = LoggerFactory.getLogger(CommandExecutorImpl.class);
static ExecutorService pool = new ThreadPoolExecutor(0, Integer.MAX_VALUE, 3L, TimeUnit.SECONDS,
new SynchronousQueue<Runnable>()); public ExecuteResult executeCommand(long timeout,String ... commands) { Process process = null;
InputStream pIn = null;
StreamManger outputManger = null;
try {
if(commands == null || commands.length == 0){
logger.error("执行的命令行语句不能为空!");
return new ExecuteResult(9999,"执行的命令行语句不能为空");
}
process = Runtime.getRuntime().exec(commands);
final Process p = process;
p.waitFor(timeout, TimeUnit.MILLISECONDS);
p.getOutputStream().close(); pIn = process.getInputStream();
outputManger = new StreamManger(pIn);
outputManger.start(); return new ExecuteResult(0, "命令执行成功!"); } catch (Exception ex) {
String errorMessage = "命令:" + commands + "执行失败!";
logger.error(errorMessage, ex);
return new ExecuteResult(-1, null);
}
} }

输入输出流管理控制器,这里其实还可以做更多操作,自由控制输出某些内容,或者不输出某些内容。

/**
* 输入输出流管理
* @author Zhang
*
*/
public class StreamManger extends Thread {
private static Logger logger = LoggerFactory.getLogger(StreamManger.class);
private InputStream inputStream; /**
* 构造方法
* 实例化输入流
* @param in 输入流
*/
public StreamManger(final InputStream in) {
this.inputStream = in;
} /**
* 打印输出
*/
@Override
public void run() {
try {
// 设置默认编码为UTF-8
InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "UTF-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String line = null;
while ((line = bufferedReader.readLine()) != null) {
logger.debug(line); }
} catch (Exception ex) {
logger.trace("打印输出流失败:", ex);
} finally {
synchronized (this) {
notify();
}
}
} }

日志输出

贴个图吧。不然说解决了Jenkins的appium日志中文乱码问题,肯定会有人不信。
安卓:

 

IOS:

 

附录appium命令参数地址

社区真伟大,由本论坛翻译Appium官网中文参数介绍。中文参数介绍传送门

后记

感谢社区,给予很多精神食粮,感谢大师们的无私奉献。解决问题的方法,就像平X的妹子的R沟,挤一挤总归还是有点的,多来论坛逛逛,多多学习,多动手实践,总会有解决的方向。
分享一下自己解决这个问题的方法,反哺一下和我一样low的兄弟们。方法比较挫,也许不能解决您的问题,轻喷谢谢!

Appium日志乱码终结指北的更多相关文章

  1. log4j输出日志乱码(转)

    log4j日志文件乱码问题的解决方法 log4j日志文件中文乱码处理方法 log4j 控制台和文件输出乱码问题解决 写在前面,第三篇文章中将原因解释的最清楚,为什么设置为UTF-8或者GBK就生效了, ...

  2. 解决CentOS7中文乱码(包括Tomcat日志乱码)问题

    Linux系统中文语言乱码,是很多小伙伴在开始接触Linux时经常遇到的问题,而且当我们将已在Wndows部署好的项目搬到Linux上运行,Tomcat的输出日志中文全为乱码(在Windows上正常) ...

  3. git宝典—应付日常工作使用足够的指北手册

    最近公司gitlab又迁移,一堆git的命令骚操作,然鹅git命令,感觉还是得复习下——其实,git现在界面操作工具蛮多,比如intellij 自带的git操作插件就不错,gitlab github ...

  4. 【app】Appium日志文件分析

    Appium在和客户端及手机端进行通讯的时候会输出很多日志,可以通过点击主面板的Get Raw Logs得到其原始日志: 现在我们另存到其他路径,并且以notepad工具打开进行查看 Appium日志 ...

  5. Python 简单入门指北(二)

    Python 简单入门指北(二) 2 函数 2.1 函数是一等公民 一等公民指的是 Python 的函数能够动态创建,能赋值给别的变量,能作为参传给函数,也能作为函数的返回值.总而言之,函数和普通变量 ...

  6. Python 简单入门指北(一)

    Python 简单入门指北(一) Python 是一门非常容易上手的语言,通过查阅资料和教程,也许一晚上就能写出一个简单的爬虫.但 Python 也是一门很难精通的语言,因为简洁的语法背后隐藏了许多黑 ...

  7. 可能比文档还详细--VueRouter完全指北

    可能比文档还详细--VueRouter完全指北 前言 关于标题,应该算不上是标题党,因为内容真的很多很长很全面.主要是在官网的基础上又详细总结,举例了很多东西.确保所有新人都能理解!所以实际上很多东西 ...

  8. 关于supervisor的入门指北

    关于supervisor的入门指北 在目前这个时间点(2017/07/25),supervisor还是仅支持python2,所以我们要用版本管理pyenv来隔离环境. pyenv 根据官方文档的讲解, ...

  9. 关于Gevent的使用指北

    关于Gevent的使用指北 只是看了入门指南,和一个翻译文档.写一下个人读书心得. 其实看完之后,第一个反映就是asyncio这个系统库,感觉gevent现在所做的一些事情是与asyncio很像的,但 ...

随机推荐

  1. 一.javascript核心部分:1.词法结构

    本文作为个人学习笔记,一直也没有重视javascript的系统学习(javascript是最容易被人忽视的语言),我都是要用的时候百度一下查找下资料开始用,但没有系统的,学习,和整理过javascri ...

  2. ECMAScript 6

    参考网上其他帖子,整理如下   ES6 就是ECMAScript 6是新版本JavaScript语言的标准. 增加了如下   Promises Promises是处理异步操作的对象,使用了 Promi ...

  3. maven工程 添加本地jar依赖

    和第三方平台对接的时候要用到对方提供的一个jar包,jar包怎么直接添加到pom文件的依赖中呢? jar包一般都是公共的,要上传到私服仓库.我们都是直接登录私服,操作仓库. 登录私服可以在项目的pom ...

  4. appium 版本更新后的方法变化更新收集 ---持续更新

    在高版本的android手机(例如android 7.0 , 8.0等等),必须使用高版本的appium, 以及对应的selenium版本,那么很多的appium或者selenium方法会变得无法直接 ...

  5. 19-06 【phpunit和docker】

    phpunit简介 在用PHP做项目的时候,有时候我们需要写一些测试代码,其中可能包含单元测试(比如字符串处理,ip解析,mobile解析等). 我们常用的工具是phpunit,它很方便地帮我们组织测 ...

  6. Loadrunner 11.00录制App脚本篇(Win10)

    参考博文1:https://www.cnblogs.com/mxqh2016/p/6016866.html 参考博文2:https://blog.csdn.net/myohmy2008/article ...

  7. CentOS7 查看显卡信息

    A卡: [root@t1 ~]# lspci | grep -i vga 00:02.0 VGA compatible controller: Cirrus Logic GD 5446 N卡: [ro ...

  8. RDMA RC UC UD

    RC:面向连接的可靠服务 UC:面向连接的不可靠服务 UD:面向数据报的不可靠服务 RD:面向非连接(类似UDP)的可靠服务 面向连接 vs 面向数据报 相同点:两者的通信均包括双方QP对的参与 不同 ...

  9. apache的.htaccess文件作用和相关配置

    首先.htaccess什么? .htaccess是一个纯文本文件,它里面存放着Apache服务器配置相关的指令. 当我们使用apache部署一个网站代码准备部署到网上的时候,我们手中的apache的h ...

  10. leetcode 刷题进展

    最近没发什么博客了 凑个数 我的leetcode刷题进展 https://gitee.com/def/leetcode_practice 个人以为 刷题在透不在多  前200的吃透了 足以应付非算法岗 ...