全部产品

Python脚本测试

更新时间:2017-06-07 13:26:11   分享:   

1. 设置Desired Capabilities

在开始前,您可以点击下载本章所有测试相关文件

开始第一步,创建一个文件,名为:desired_capabilities.py。内容如下:

  1. #!/usr/bin/env python
  2. def get_desired_capabilities():
  3. desired_caps = {
  4. 'platformName': 'Android',
  5. 'platformVersion': '4.0.4',
  6. 'deviceName': 'V889F',
  7. 'appPackage': 'com.alibaba.mts.mtsdemoapp',
  8. 'appWaitPackage': 'com.alibaba.mts.mtsdemoapp',
  9. 'app': 'D:/home/mdp/result/GroovyTest/case1/task.apk',
  10. 'newCommandTimeout': 30,
  11. 'automationName': 'Appium'
  12. }
  13. return desired_caps
  14. def get_uri():
  15. return "http://localhost:50000/wd/hub"

里面包含两个函数:get_desired_capabilities()和get_uri()。

a. get_uri()

返回Appium Server的地址,比如这里我们在本地启动的Appium Server,并且设置默认监听端口为50000,得到的地址是http://localhost:50000/wd/hub

b. get_desired_capabilities()

获取本次会话的参数。这里主要设置了8个参数。用户可以根据自己的需求进行调整。

  1. platformName,我们测试的目标机器。

  2. platformVersion,测试目标设备的系统版本。

  3. deviceName,测试机器的名称(设备名称即可)。

  4. appPackage,被测应用的包名(只有Android测试才用)。

  5. appWaitPackage,测试时会等待(只有Android测试才用)。

  6. app,被测应用文件的所在位置

  7. newCommandTimeout,两条指令的最长时间间隔。如果超过这个间隔,Appium Server将会终止本次会话。

  8. automationName,本次会话所使用的自动化引擎。Android 4.2以下系统请使用Selendroid;IOS、Android 4.2以上(含)请使用Appium。

    更多的选项,请参见capabilities文档

2. 编写测试用例

MQC会执行用户上传的main.py,所以要创建这个入口脚本:main.py。我们以一个登录的脚本main.py作为例子进行说明,代码如下:

  1. # -*- coding: utf-8 -*-
  2. from appium import webdriver
  3. # 引入刚刚创建的同目录下的desired_capabilities.py
  4. import desired_capabilities
  5. # 我们使用python的unittest作为单元测试工具
  6. from unittest import TestCase
  7. # 我们使用python的unittest作为单元测试工具
  8. import unittest
  9. # 使用time.sleep(xx)函数进行等待
  10. import time
  11. class MqcTest(TestCase):
  12. global automationName
  13. def setUp(self):
  14. # 获取我们设定的capabilities,通知Appium Server创建相应的会话。
  15. desired_caps = desired_capabilities.get_desired_capabilities()
  16. # 获取server的地址。
  17. uri = desired_capabilities.get_uri()
  18. # 获取使用的测试框架
  19. self.automationName = desired_caps.get('automationName')
  20. # 创建会话,得到driver对象,driver对象封装了所有的设备操作。下面会具体讲。
  21. self.driver = webdriver.Remote(uri, desired_caps)
  22. def test_searchbox(self):
  23. # 找到包含”Tab4”字符串的控件。
  24. if self.automationName == 'Appium':
  25. tab4 = self.driver.find_element_by_name("Tab4")
  26. else:
  27. tab4 = self.driver.find_element_by_link_text("Tab4")
  28. # 点击.
  29. tab4.click()
  30. # 等待2秒钟
  31. time.sleep(2)
  32. # 通过控件类名找到用户名和密码输入框。
  33. editTexts = self.driver.find_elements_by_class_name("android.widget.EditText")
  34. # 第一个框为用户名输入框,输入用户名;第二个框为密码框,输入密码
  35. editTexts[0].send_keys("admin")
  36. editTexts[1].send_keys("admin")
  37. # 隐藏出现的软键盘
  38. self.driver.hide_keyboard()
  39. # 找到包含“登录”的按钮并点击
  40. if self.automationName == 'Appium':
  41. self.driver.find_element_by_name("登陆").click()
  42. else:
  43. self.driver.find_element_by_link_text("登陆").click()
  44. # 等待3秒钟,登录需要与服务器通讯。
  45. time.sleep(3)
  46. def tearDown(self):
  47. # 测试结束,退出会话。
  48. self.driver.quit()
  • 几种查找控件的方法(在类By下):

    1. ID : 通过resource-id查找。注意,测试Android应用时,Appium引擎和Selendroid引擎的id写法不同,Appium下类似这样:com.alibaba.mts.mtsdemoapp:id/login_login_button;而Selendroid下id是:login_login_button。所以,如果要写通用的脚本,建议使用其他查找方式。

    2. XPATH : 通过xpath寻找。例如查找一个包含“Add note”字符串的TextView控件:driver.findElement(By.XPATH, "//android.widget.TextView[contains(@text,'Add note')]")点击查看更多XPATH语法

    3. LINK_TEXT : (不支持Android 4.2.1以下)通过控件的文本文字查找,比如:driver.findElement(By.LINK_TEXT, “登录”),找到控件文字为“登录”控件。注意,它不会匹配“登录吧”、“快登录”等文字。建议使用下面的“PARTIAL_LINK_TEXT”。

    4. PARTIAL_LINK_TEXT : (不支持Android 4.2.1以下)类似LINK_TEXT,但是可以匹配“登录吧”、“快登录”等文本的控件。只要包含“登录”即可。

    5. NAME : 与ACCESSIBILITY_ID相同,通过content description查找。content description是为生理缺陷的人使用的,比如色盲人员看不清图片,可以通过TalkBack等软件朗读content description的内容。

    6. TAG_NAME : 通过控件类名查找,比如EditText、Button等等。

    7. CLASS_NAME : 通过控件全类名查找,比如android.widget.EditText 、android.widget.Button等。

    8. CSS_SELECTOR : 只用于Hybird APP,通过CSS选择器,查找WebView中的HTML控件。

    9. ACCESSIBILITY_ID : 同NAME。

      更多示例请参考:hybird app查找方法native app查找方法

  • 关于支持操作:

    Appium支持滑动、点击、输入、安装、启动等方法,请参考详细文档

3. 启动Appium Server

在本地的命令行中执行命令:

appium –p 50000

启动参数释义:

  1. “-p”: 指定appium server监听的端口号。

  2. “-a”: 指定appium server的ip地址。

  3. “-selendroid-port”: selendroid模式下,adb forward的端口。

  4. “-U”: 当挂载多个设备时,可以通过此参数指定某个设备的串号,这样Appium server就可以知道是要在这个设备上进行测试。

  5. “--full-reset”: 如果加上此参数,设备每个case完成时都会对设备进行完全的清理。

4. 执行测试用例

在命令行中执行命令:

python -m unittest main

其中main就是我们刚刚创建的测试用例:main.py

5. 提交到MQC云平台

本地测试通过之后,将所有测试文件打包成zip文件,然后在”Android功能测试”里,提交被测应用和打包后的脚本ZIP包。

注意,目前只支持一个main.py作为testsuite,并且请使用unittest作为用例测试工具。更多问题,请到我们的旺旺交流群(群号:335334143)中反馈。

本文导读目录
本文导读目录
以上内容是否对您有帮助?