AI考拉技术分享会—手把手教你入门UI 自动化测试 Appium
发布于 1 个月前 作者 kalengo 344 次浏览 最后一次编辑是 19 天前 来自 分享

AI考拉日常技术分享会,前有众多前后端以及android大神分享,这次测试老司机Eric也放招,手把手带devs入门UI自动化测试。话不多说,开课啦!

一、UI自动化框架的介绍

UI自动化包括哪些内容? UI自动化是通过工具或者脚本语言将测试过程模拟出来,并重复执行,用以验证功能是否正确的过程,包括:

  1. 界面层面(控件,元素,位置,显示等的识别)
  2. 功能交互层面(往往是通过代码或者测试框架来模拟真实用户的操作)

二、为什么要做UI自动化测试

  1. 敏捷开发的需要:满足产品敏捷开发、快速迭代的要求;
  2. 传统的手工测试重复度高,执行效率低;
  3. 迭代周期短,经常需要对原有功能进行回归测试。 一句话:提高测试效率,方便回归旧版本!

三、常见的框架有哪些

  1. Monkey:Android SDK自带的测试工具,发送伪随机事件(按键输入、触摸屏输入、手势输入等),无法自定义,主要用于压力测试;
  2. MonkeyRunner:Android SDK提供的测试工具,比monkey强大,支持编写脚本自定义事件;
  3. UiAutomator:Android提供的自动化测试框架,仅支持Java语言和Android平台,不支持WebView;
  4. Robotium:基于Google提供的Instrumentation的测试框架,仅支持Java语言和Android平台,不支持WebView;
  5. Appium:开源、跨平台的自动化测试工具,支持Java、python等多种语言,支持android和IOS,并且支持WebView; 给个框架对比图,感受下

UI自动化测试Appium对比图.png

综上,考拉团队选择了支持android以及ios版本、也支持WebView的Appium框架,自此打开了测试新大门。

框架选择.png


四、Appium环境安装

  1. 安装Appium Server:需要先安装Node.js,然后再通过命令安装:npm install -g appium
  2. 安装Android SDK
  3. 安装Appium Client:通过pip命令安装。Windows下执行命令:pip install Appium-Python-Client 安装.png
  4. 安装安卓模拟器:推荐下载安装GenyMotion;
  5. 自动化脚本demo (1)安装模拟器 (2)启动appium点击左上角“机器r人”按钮—点击右上角”三角“启动appium (3)通过python编写脚本
    from appium import webdriver
    desired_caps={}
    desired_caps['platformName']='Android'
    desired_caps['platformVersion']='4.3'
    desired_caps['deviceName']='Android Emulator'
    desired_caps['appPackage']='com.android.calendar'
    desired_caps['appActivity']='.AllInOneActivity'
    driver=webdriver.Remote('http://localhost:4723/wd/hub',desired_caps)
...
    driver.find_element_by_name("1").click()

    driver.find_element_by_name("5").click()

    driver.find_element_by_name("9").click()

    driver.find_element_by_name("delete").click()

    driver.find_element_by_name("9").click()

    driver.find_element_by_name("5").click()

    driver.find_element_by_name("+").click()

    driver.find_element_by_name("6").click()

    driver.find_element_by_name("=").click()

    driver.quit() 

五、Appium实践

  1. 启动App 启动_副本_副本.jpg
  2. 元素定位

(1)通过id方式定位 element=driver.find_element_by_id("ID") (2)通过name方式定位 element=driver.find_element_by_name("NAME") (3)通过class方式定位 element=driver.find_element_by_class_name("ClassName") (4)通过tag方式定位 element=driver.find_element_by_tag_name("TagName") (5)通过link方式定位 element=driver.find_element_by_link_text("LinkText") (6)通过partial link方式定位 element=driver.find_element_by_partial_link_text("LinkText") (7)通过css 方式定位 1)通过class属性定位,即 .class element=driver.find_element_by_css_selector(".ClassName") 2)通过id属性定位,即 #id element=driver.find_element_by_css_selector("#IdName") 3)通过标签名定位,即 Tag,不建议推荐 element=driver.find_element_by_css_selector("TagName") 4)通过父子关系定位,即父级属性>子级属性 element=driver.find_element_by_css_selector("父级属性>子级属性") 5)属性定位,即[属性=属性值],属性值可加引号,也可以不加 element=driver.find_element_by_css_selector("[autocomplete=off]") 6)组合定位 element=driver.find_element_by_css_selector("span.bg.s_ipt_wr.quickdelete-wrap.soutu_nomac>input.s_ipt") (8)通过xpath方式定位 1)通过元素属性定位 //表示当前页面某个目录下,input表示定位的元素的标签名,【@id=‘kw’】表示这个元素的id(name、class、元素的任意属性值)属性值等于kw,如果不想指定标签名,则可以使用星号(*)代替 element=browser.find_element_by_xpath(".//input[[@id](/user/id)='kw']") element=browser.find_element_by_xpath("//*[@autocomplete='off']")
2)通过绝对路径定位 element=browser.find_element_by_xpath("path") 3)通过层级与属性结合定位,即 上一级属性/下一层级 element=browser.find_element_by_xpath("//form[[@id](/user/id)='form']/span/input") 4)通过逻辑运算符定位 <input id="kw" class="su" name="ie"> <input id="kw" class="aa" name="ie"> <input id="bb" class="su" name="ie">
想要定位第一行元素,可以这样 element=find_element_by_xpath("//input[[@id](/user/id)='kw' and @class='su'"]

  1. 测试脚本
    测试脚本_副本.jpg
  2. 组织测试用例
    组织测试用例.png

六、实践中的block以及解决方法

  1. 如何让A机器上的代码运行在远程B机器上?

答:

step 1 :使用appium的主从远程控制,在B机器上安装好appium服务以及模拟器

step 2 :修改B机器的appium server address,改成B机器的主机IP

appium server Address.png

step 3:将A机器上的webdrive.remote的地址修改成B机器的appium server address

地址修改.png

  1. 如何让jenkins控制Windows下的模拟器执行appium代码? 答: 解决思路:使用jenkins的slave节点,将目标Windows主机设置成jenkins的slave节点 (1)添加jenkins节点 Jenkins增加节点.png (2)根据下图进行配置 1)其中Name是slave的唯一名称标志,可以是任意字符串 2)远程工作目录:指定该节点slave的工作目录路径,建议使用绝对路径 3)启动方法:一般使用jave web启动代理该配置 jenkins远程工作.png 4)环境变量:将python添加到里面 jenkins环境变量.png (3)slave设置 Slave主机安装Java JDK并配置环境,连接到jenkins的两种方法:
    1)下载slave.jar,在cmd下运行: java -jar agent.jar -jnlpUrl http://jenkins.app.kl/computer/UI_TEST_APPIUM/slave-agent.jnlp -secret 0ab4173808768b617b6f19f5a8f2af9d990d7fe21fc291e221d45eaf62b04f48 -workDir "D:jenkins" 2)点击Launch下载slave-agent.jnlp,直接双击运行 注意点:jenkins启动slave可能出现报错 com.sun.deploy.net.FailedDownloadException: Unable to load resource: http://127.0.0.1:8080/jnlpJars/remoting.jar at com.sun.deploy.net.DownloadEngine.actionDownload(Unknown Source) at com.sun.deploy.net.DownloadEngine.downloadResource(Unknown Source) at com.sun.deploy.cache.ResourceProviderImpl.getResource(Unknown Source) at com.sun.deploy.cache.ResourceProviderImpl.getResource(Unknown Source) at com.sun.javaws.LaunchDownload$DownloadTask.call(Unknown Source) at java.util.concurrent.FutureTask.run(Unknown Source) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source)

    修改办法: 到jenkins面板: http://127.0.0.1:8080, 进入Manage Jenkins ,选择Configure System, 修改Jenkins Location选项下面的Jenkins URL为master机器的http://IP:port, 然后重新生成jnlp文件发送到slave节点,然后右键选择Launch。 如果,不想修改Jenkins的 URL,那么用编辑器打开slave-agent.jnlp文件,将其中的127.0.0.1修改为master机器的IP或者域名即可。

    (4)新建一个job 新建job1.png


六、未来的发展?

  1. 支持多设备同时运行
  2. 将appium应用到IOS上
  3. 将客户端和服务端都部署在linux环境下,实现全自动化

写在最后的话

测试小哥哥为了这次的分享,做了很多准备,感动到我就想把他的微信号放上来了。但小哥哥为人低调,是个喜欢默默啃书的男人~ anyway,如果你也喜欢我们这样的分享环境,欢迎你投递简历到邮箱[email protected],我们欢迎技术的小哥哥们毛遂自荐!

Node.js的朋友们戳这里投简历:Node.js开发工程师
区块链的朋友们戳这里投简历:区块链开发工程师
量化开发的朋友们戳这里投简历:量化开发工程师

著作权归本文作者所有,未经授权,请勿转载,谢谢。

回到顶部