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

周小丽 · 2016年04月08日 · 最后由 周小丽 回复于 2021年01月13日 · 7446 次阅读

最近一直再研究 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 之类的脚本啊。

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 集成完毕

周小丽 回复

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

枫叶 回复

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

周小丽 回复

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

枫叶 回复

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

周小丽 回复

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

usb 连测试机

周小丽 回复

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

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

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

25楼 已删除


楼主能解释下这 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 回复

没考虑哦

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册