Appium jenkins+appium 实现脚本自动运行功能

周小丽 · April 08, 2016 · Last by 周小丽 replied at January 13, 2021 · 3714 hits

最近一直再研究 jenkins 的自动化集成测试,设计思路:

  1. 构建 app 前做代码静态检测
  2. 检测成功后,自动构建 app
  3. 通过脚本将服务端的 app 自动推送到个人主机指定目录
  4. 通过 jenkins 自动启动 appium 服务,终端机自动安装指定目录的 app,并运行 testNG 的相关脚本
  5. 触发邮件,报告发送

好了,接下来看看具体是怎么操作的吧!

第一:先看下 jenkins 的项目配置


第二:远程 app 推送至本地指定目录

  1. 将远程服务端的 apk 文件夹共享
  2. 将共享的 apk 目录映射为本地的某个网络盘符 X
  3. 通过脚本将 X 盘符下的文件拷贝到指定目录
  # Filename: CopyPictures.py
  # coding=utf8
  import os
  import time,shutil  
  from os import listdir
  from os.path import isdir
  HOST = '192.168.1.82'
  PORT = 8080
  source_dir = 'X:\\'
  target_dir = 'E:\\DONG\\appium-testng\\apps'
  now = time.strftime('%Y%m%d')
  k=0
  filelist = listdir(source_dir)  #获取源目录下所有的文件
  print(filelist)

for name in filelist :
    srcFilename = source_dir + '\\' + name
    srcFilename = '"' + srcFilename + '"'
    desFilename = target_dir + '\\' + name
    desFilename = '"' + desFilename + '"'
    print 
    copy_command = "copy %s %s" % (srcFilename, desFilename)
    print copy_command
    if os.system(copy_command) == 0:
        k = k + 1
        print 'Successful backup to copy from', srcFilename, 'to' ,desFilename 
    else:
        print 'Fail to copy', srcFilename, 'to', desFilename
print 'total copy', k, 'files' 

第三:重点讲解下如何在 DOS 下运行 testNG 的脚本集

  1. 进入 eclipse 的工作目录,将 bin 下所有的.class 文件以及 testng.xml 压缩为.zip 包(注意:不包含 bin 文件夹)
  2. 然后将.zip 包的后缀名改成.jar 包
  3. 新建一 A 目录,拷入.jar 包和 testng.xml
  4. 将 A 目录配置为 classpath 的环境变量
  5. 导出 eclipse 中的程序包,否则运行 testng.xml 时会提示找不到程序包。(eclipse 工作根目录-->Export-->Java-->Runnable JAR file--> launch configuration-->Copy required libraries into a sub-folder next to the generated JAR)-------- 注意:launch configuration 的文件必须含 main 函数,且格式必须为 public static void main(String [] args);另外需注意导出路径一定要为 A 目录,导出成功后会在 A 目录自动创建一 lib 文件夹,比如 qshc_lib,qshc.jar

第四:bat 脚本编写

@echo off
@start appium -a 127.0.0.1 -p4723 -U32308bd2a27c7fb3  
ping /n 3 127.1 >nul
set LIB=C:\automation
set CLASSPATH=%LIB%\auto.jar;%LIB%\qshc.jar
java org.testng.TestNG %LIB%\testng.xml

第五:就可以执行 jenkins 的构建了,app 构建成功后,会自动执行 CMD 脚本,启动 appium 服务,执行 testNG 的用例集

抛出一问题:jenkins 邮件触发功能,我目前只能用系统自带的邮件功能,而扩展邮件的插件配置后总是没起作用,尤其是 developer 角色的邮件发送,请指导的人告知下,我先截个我配置的图给大伙看看



共收到 31 条回复 时间 点赞

最近也在看这块,马克一下~

关注一下

Jenkins+selenium 实现大同小异

—— 来自 TesterHome 官方 安卓客户端

待测的 app 需要连接网络吗?如果遇到随机性的网络延迟大或者中断,导致测试脚本失败。这时该怎么处理呢

不错不错

邮件的问题我也遇到了,构建步骤中的 Email Notification 可以实现,但是 Editable Email Notification 里面的触发邮件即使显示发送了,邮箱也没有收到。请问楼主解决这个问题没有?

大神,我的是用真机直接调试,不明白这里的 POM 上哪去寻找

如果是远程方式,例如 jenkins 安装在服务器上,请问是如何在机器上运行的呢,是使用的真机还是模拟器呢?

#8 楼 @601068603 jenkins 通过 web 方式是可以远程访问的。用的是真机

请问是怎么自动安装 APK 到手机的呢?没看到调用 adb shell 之类的脚本啊。

周小丽 #11 · May 31, 2017 Author
fanwo 回复

没有用到 adb shell,先通过 bash 脚本将远程服务器打包好的 app 推送到 appium 服务的目录下,然后通过 appium 脚本安装 app,File apps = new File("D:\QSHealthMD.apk");capabilities.setCapability("app", apps.getAbsolutePath());

周小丽 回复

多谢答复。好像大家都不喜欢用 adb uninstall,install,而是喜欢用 appium 来装 apk 啊。

大神,bat 脚本:@start appium -a 127.0.0.1 -p4723 -U32308bd2a27c7fb3
如果是 execute shell,远程到 Mac 上面怎么启动 appium 服务

uuu 回复

不好意思,没用过 mac 哦

邮件配置如果使用 Email Extension Plugin 插件的话 需要注意几点
1 有 3 处地方需要配置邮件用户 这 3 处必须一致
2 如果邮箱服务器启用了授权码(起码腾讯是)密码项需要填写授权码
如果还有问题可以询问我 刚把 robot 和 jenkins 集成完毕

周小丽 回复

问下哈,你是怎样实现远程在真机上跑自动化代码的呀,最近一直想把自动化脚本部署到服务器上,每天定时在真机上跑,但是网上找了很多资料都没有详细介绍的,如果楼主知道,不妨说说呀,求教求教

周小丽 #17 · April 10, 2018 Author
枫叶 回复

通过 Jenkins 启动 appium 服务,真机就可以自动去服务器下载相应的 app 执行用例

周小丽 回复

启动 appium 服务器后那脚本在哪里运行,本机还是远程服务器上?如果是远程服务器上的话,真机应该怎样连接上呢

周小丽 #19 · April 10, 2018 Author
枫叶 回复

appium 和脚本在测试服务器上,远程服务器可启动测试服务器的 appium 进程

周小丽 回复

那真机是属于无线连接的吧

周小丽 #21 · April 10, 2018 Author

usb 连测试机

周小丽 回复

OK,大概理解你的思路了,再自己研究研究,感谢答复哈

启动 appium 服务时,下面 set 设置的两个路径是什么路径,求指教!谢谢

您好,问下,你那个 LIB=d:aaa 这个没看懂,可以讲下吗,还有后面那个 auto.jar 是哪里来的

25Floor has deleted


楼主能解释下这 3 行是啥吗?

枫叶 回复

请问怎样才能使用服务器上的 jenkins 来启动本地的 appium 服务和连接上本地的真机?

Wenbo 回复

appium 服务可以通过命令启动,启动后自己跑脚本就能把真机运行起来的,可以网上搜下哈,这里贴个链接你可以了解下:https://blog.csdn.net/a_little_smallsharp/article/details/77338272

枫叶 回复

我使用 appium -a 127.0.0.1 命令跑起来的始终是服务器电脑上的 appium 服务,而不是我本地电脑的服务,是什么情况?

Wenbo 回复

127.0.0.1 这个就是本地的呀,所以调起的就是服务器本地的,你要去修改你电脑本地 appium 的 server address,然后 IP 换成你修改的就可以,具体实现可以百度查下哈,网上介绍很详细

如果是多台 Android 设备,Jenkins 怎么启动 Appium 呢?这种情况,我理解启动 Appium 是需要带上 deviceId,而 deviceId 是会变的

Anson 回复

没考虑哦

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up