如何在linux搭建airtest+chromeweb测试环境--(用命令行运行.air脚本)
大前堤:
如果你需要airtest提供的可视化测试报告,那你的操作系统,一定要有图形化界面.
否则运行你的airtest脚本 会遇到这样的问题
Xlib.error.DisplayNameError: Bad display name ""
你可能百度之后 遇到了xhost +命令
执行这个命令后,再运行测试脚本,又遇到这个问题

然后再百度,原来.Xauthority Xlib模块都是有操作系统图形化界面的模块
再看看为什么会报这个错呢?
因为在airtest_selenium模块下的proxy.py文件调用了这一句代码
from pynput.mouse import Controller, Button
pynput又是干什么的,是和鼠标键盘相关的模块
既然你的操作系统无图形化界面,而使用airtest_selenium又需要图形化界面,这就冲突了.
注释掉airtest_selenium关于pynput的相关代码会发现,程序可以跑了,但是生成的可视化报告就是这样的

所以如果你不需要 可视化的测试 报告,通过 修改proxy.py文件,你的airtest脚本是可以在无图形化的界面的linux系统跑的.如果你需要可视化报告,则可能需要在其它的有图形界面的系统中运行airtest web测试脚本
step1
创建虚拟环境 airtestVenv
mkvirtualenv airtestVenv
列出所有虚拟环境
lsvirtualenv
在虚拟环境中安装airtest pocoui
切换到airtestVenv虚拟环境
workon airtestVenv
pip3install airtest
pip3install pocoui
pip3 install selenium
pip3 install airtest_selenium
pip3 install pynput #有图形化界面的操作系统安装,无图形化界面安装也没用,会报错的
验证安装成功:
(airtestVenv) [root@67 wangju]# airtest
usage: airtest [-h] {run,info,report} ... positional arguments:
{run,info,report} run/info/report
run run script
info get & print author/title/desc info of script
report generate report of script optional arguments:
-h, --help show this help message and exit

step2:
安装chrome
参考:
https://blog.csdn.net/diyiday/article/details/83824878
1.安装浏览器
指定yum 源
[root@67 ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

安装
[root@67 ~]# curl https://intoli.com/install-google-chrome.sh | bash

验证安装情况
[root@67 ~]# google-chrome-stable --no-sandbox --headless --disable-gpu --screenshot https://www.baidu.com/

解决问题
nano /usr/bin/google-chrome
修改如下,即可正常打开浏览器了
将 exec -a "$0" "$HERE/chrome" "$@" 改为
exec -a "$0" "$HERE/chrome" "$@" --user-data-dir --no-sandbox

再次使用命令打开chrome浏览器
[root@67 ~]# google-chrome-stable --no-sandbox --headless --disable-gpu --screenshot https://www.baidu.com/
正常打开网页了

安装完成后在/opt目录下生成google安装目录

安装chromedriver
查看当前chrome版本
需选择与chrome对应的版本安装,
[root@67 ~]# google-chrome --version
Google Chrome 75.0.3770.80

我的chrome版本75.0.3770.8
下载地址:https://npm.taobao.org/mirrors/chromedriver/
在页面搜索75.0.3770.8



将下载在本地的webdriver传送至服务器
scp -r ./chromedriver root@10.2.1.92:/home/wangju/gitProject/Airtest/demoAir.air

如果下载在服务器使用unzip 解压
unzip chromedriver_linux64.zip
验证安装情况
./chromedriver
如图所示,即安装成功


建立软连接:
才明白原来linux的软链接就相当于windows的快捷方式呀
ln -s /opt/google/chromedriver /usr/bin/chromedriver
step3使用测试脚本测试
偷懒没有使用绝对路径,使用的相对路径,所以要自己切换路径
当前文件夹是demoAir.air
别忘记切换到airtest的虚拟环境

先运行一个selenium脚本测试
报错了
selenium.common.exceptions.WebDriverException: Message: unknown error: DevToolsActivePort file doesn't exist
解决办法:
先排除此错误是由于不兼容的ChromeDriver版本和正在使用的Chrome浏览器版本造成的,使用最新的Chrome浏览器版本68的Chrome Driver.exe(v2.41)
版本号是一致的

我明明在本地测试的时候是可以运行脚本的,但是为什么移到centOS就会出错了呢,是哪里有区别呢?
已经确定chrome和chromeDriver版本是一致的了,唯一不一样的是,我按照教程做了如下配置
nano /usr/bin/google-chrome

这是我的测试脚本
#coding=utf8
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
driver = webdriver.Chrome(executable_path="./chromedriver", chrome_options=chrome_options)
#driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
print(driver.page_source)
print(driver.current_url)
#driver.quit()
这篇教程是把禁止沙箱模式写到了chrome的配置文件中在代码中并没有体现下面这行代码
我观察了楼主的测试代码
chrome_options.add_argument('--no-sandbox') # 禁止沙箱模式,否则肯能会报错遇到chrome异常
所以猜测是不是配置chrome的配置文件后,所以楼主没有在脚本中再做配置了呢?
是不是我改chrome的配置文件改出问题呢?因为我在本地的时候并没有做这项配置,但在脚本中有 --no-sandbox脚本是可以跑通的
不管怎么说,这是我目前唯一想到有区别的地方了,先改回来试试
注释了增加的代码,而使用默认的配置

再次运行脚本就成功了

step4:修改proxy.py源文件
(指定chromedriver的位置,因为proxy.py默认是使用airtestIDE工具配置的chromedriver的位置的,如果脱离airtestIDE程序就会找不到chromedriver,所以需要自己手动配置)
增加这部分代码 :

先使用find命令查找proxy.py的所在位置
sudo find / -name airtest_selenium
执行如下命令 运行测试脚本,并生成日志文件,注意当前文件夹是demoAir.air:
wangju@wangju-HP-348-G4:~/Airtest/demoAir.air$ airtest run demoAir.py --log log/
执行如下命令,利用上一步生成的日志文件 生成可视化的测试报告 log.html,注意当前文件夹是Airtest
wangju@wangju-HP-348-G4:~/Airtest$ airtest report demoAir.air --log_root demoAir.air/log/ --outfile demoAir.air/log/log.html --lang zh
demoAir.air/log/log.html
如果看到demoAir.air/log/log.html表示已经在log文件夹下生成测试报告了,将该文件复制到本地,使用浏览器打开,查看脚本运行结果
在/home/wangju/Airtest/demoAir.air/log文件夹中找到log.html文件,打开该文件查看测试结果

如何在linux搭建airtest+chromeweb测试环境--(用命令行运行.air脚本)的更多相关文章
- Windows下搭建Android NDK开发环境及命令行编译
首先说明本文内的相关安装操作参考<Pro Android C++ with the NDK>一书. 安装 Windows搭建Android NDK开发环境需要安装如下部分(同时需要配置对应 ...
- 【android开发】如何在Linux平台下安装JDK环境
原文:http://android.eoe.cn/topic/android_sdk Linux平台JDK安装 本文主要描述如何在Linux平台下安装JDK环境.进入网页:http://www.ora ...
- 记录使用gogs,drone搭建自动部署测试环境
使用gogs,drone,docker搭建自动部署测试环境 Gogs是一个使用go语言开发的自助git服务,支持所有平台 Docker是使用go开发的开源容器引擎 Drone是一个基于容器技术的持续集 ...
- 手把手教你搭建hadoop+hive测试环境(新手向)
本文由 网易云发布. 作者:唐雕龙 本篇文章仅限内部分享,如需转载,请联系网易获取授权. 面向新手的hadoop+hive学习环境搭建,加对我走过的坑总结,避免大家踩坑. 对于hive相关docke ...
- docker-compose 搭建 Redis Sentinel 测试环境
docker-compose 搭建 Redis Sentinel 测试环境 本文介绍如何使用 docker-compose 快速搭建一个 Redis Sentinel 测试环境.其中 Redis 集群 ...
- 【Mac + Android】之Android Studio 环境搭建,AVD模拟器运行(包括:命令行运行AVD,并且Genymotion模拟器插件配置运行)
目录: 前提.Mac环境下手动配置Android SDK 一. Android Studio下载及配置 二.AVD模拟器配置运行 扩展:命令行运行AVD模拟器 三.在Android Studio 中配 ...
- webpack正式、测试环境接口地址本地运行及打包命令配置
声明:本文由w3h5原创,转载请注明出处:<webpack正式.测试环境接口地址本地运行及打包命令配置> https://www.w3h5.com/post/521.html 为了方便开发 ...
- 【读书笔记】Linux命令行与Shell脚本编程大全
Linux命令行与Shell脚本编程大全 5.2 shell 的父子关系 命令分组 Command Grouping 主要有两种形式: 一种以小括号包括,命令之间以冒号分隔.也被称为 进程列表: 注意 ...
- iOS系统提供开发环境下命令行编译工具:xcodebuild
iOS系统提供开发环境下命令行编译工具:xcodebuild[3] xcodebuild 在介绍xcodebuild之前,需要先弄清楚一些在XCode环境下的一些概念[4]: Workspace:简单 ...
随机推荐
- Project Perfect让Swift在server端跑起来-引言(一)
编者语:今天是大年初一.先和大家简单说一句猴年快乐! watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/ ...
- SQL语句多表连接查询语法
一.外连接 1.左连接 left join 或 left outer join SQL语句:select * from student left join score on student.Num= ...
- Angular常用标记
(如果没有特别指明,则所有的HTML元素都支持该标记) (如果没有特别指明,则 AngularJS 指令不会覆盖原生js的指令) 1.数据绑定类: 1.插值语法:{{}} 2.标签内容绑定:ng-bi ...
- 1245 最小的N个和(前k小ai+bi)
1245 最小的N个和 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description 有两个长度为 N ...
- IOS 数据存储之 Core Data具体解释
Core Date是ios3.0后引入的数据持久化解决方式,它是是苹果官方推荐使用的.不须要借助第三方框架.Core Date实际上是对SQLite的封装.提供了更高级的持久化方式.在对数据库操作时, ...
- Fiddler抓取https请求,解决“证书错误”警告
要抓取走HTTPS内容,Fiddler必须解密HTTPS流量. 但是,浏览器将会检查数字证书,并发现会话遭到窃听.为了骗过浏览 器,Fiddler通过使用另一个数字证书重新加密HTTPS流量. Fid ...
- Bing Maps进阶系列七:Bing Maps功能导航菜单华丽的变身
Bing Maps进阶系列七:Bing Maps功能导航菜单华丽的变身 Bing Maps Silverlight Control所提供的功能导航是非常强大的,在设计上对扩展的支持非常好,提供了许多用 ...
- 数据库异常 :java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
最近在新项目中突然出现了 java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES) ...
- E20171028-hm
stick n. 棍棒,棍枝; 枝条; 操纵杆; 球棍; stopwatch n. (赛跑等记时用的) 秒表,跑表; agency n. 代理; 机构; 力量; various adj. ...
- kmp的练习们
//poj3461 Oulipo //kmp模板 统计子串在母串中的位置 #include<iostream> #include<cstdio> #include<cst ...