Python脚本在Appium库上对移动应用实现自动化测试


Posted in Python onApril 17, 2015

 采用Appium进行自动化的功能性测试最酷的一点是,你可以使用具有最适合你的测试工具的任何一门语言来写你的测试代码。大家选择最多的一个测试编程语言就是Python。 使用Appium和Python为iOS和Android应用编写测试代码非常容易。

在这篇博文中我们将详细讲解使用Appium下的Python编写的测试的例子代码对一个iOS的样例应用进行测试所涉及的各个步骤,而对Android应用进行测试所需的步骤与此非常类似。

开始,先自https://github.com/appium/appiumfork并clone Appium,然后按照安装指南,在你的机器上安装好Appium。

我还需要安装Appium的所有依赖并对样例apps进行编译。在Appium的工作目录下运行下列命令即可完成此任务:
 

$ ./reset.sh --ios

编译完成后,就可以运行下面的命令启动Appium了:
 

$ grunt appium

现在,Appium已经运行起来了,然后就切换当前目录到sample-code/examples/python。接着使用pip命令安装所有依赖库(如果不是在虚拟环境virtualenv之下,你就需要使用sudo命令):
 

$ pip install -r requirements.txt

接下来运行样例测试:
 

$ nosetests simple.py

既然安装完所需软件并运行了测试代码,大致了解了Appium的工作过程,现在让我们进一步详细看看刚才运行的样例测试代码。该测试先是启动了样例应用,然后在几个输入框中填写了一些内容,最后对运行结果和所期望的结果进行了比对。首先,我们创建了测试类及其setUp方法:
 

classTestSequenceFunctions(unittest.TestCase):
 
  defsetUp(self):
    app=os.path.join(os.path.dirname(__file__),
              '../../apps/TestApp/build/Release-iphonesimulator',
              'TestApp.app')
    app=os.path.abspath(app)
    self.driver=webdriver.Remote(
      command_executor='http://127.0.0.1:4723/wd/hub',
      desired_capabilities={
        'browserName':'iOS',
        'platform':'Mac',
        'version':'6.0',
        'app': app
      })
    self._values=[]

“desired_capabilities”参数用来指定运行平台(iOS 6.0)以及我们想测试的应用。接下来我们还添加了一个tearDown方法,在每个测试完成后发送了退出命令:
 

deftearDown(self):
  self.driver.quit()

最后,我们定义了用于填写form的辅助方法和主测试方法:

 

def_populate(self):
  # populate text fields with two random number
  elems=self.driver.find_elements_by_tag_name('textField')
  foreleminelems:
    rndNum=randint(0,10)
    elem.send_keys(rndNum)
    self._values.append(rndNum)
 
deftest_ui_computation(self):
  # populate text fields with values
  self._populate()
  # trigger computation by using the button
  buttons=self.driver.find_elements_by_tag_name("button")
  buttons[0].click()
  # is sum equal ?
  texts=self.driver.find_elements_by_tag_name("staticText")
  self.assertEqual(int(texts[0].text),self._values[0]+self._values[1])

就是这样啦!Appium的样例测试代码中还有许多Python的例子。如果你对使用Nose和Python来运行Appium测试有任何问题或看法,烦请告知。

Python 相关文章推荐
Python3用tkinter和PIL实现看图工具
Jun 21 Python
Python BS4库的安装与使用详解
Aug 08 Python
Python实现字典排序、按照list中字典的某个key排序的方法示例
Dec 18 Python
spark dataframe 将一列展开,把该列所有值都变成新列的方法
Jan 29 Python
Python实现DDos攻击实例详解
Feb 02 Python
win10系统Anaconda和Pycharm的Tensorflow2.0之CPU和GPU版本安装教程
Dec 03 Python
Python使用Tkinter实现转盘抽奖器的步骤详解
Jan 06 Python
Python ORM编程基础示例
Feb 02 Python
Anconda环境下Vscode安装Python的方法详解
Mar 29 Python
使用Python解析Chrome浏览器书签的示例
Nov 13 Python
python 获取计算机的网卡信息
Feb 18 Python
python爬虫请求库httpx和parsel解析库的使用测评
May 10 Python
Python中生成器和yield语句的用法详解
Apr 17 #Python
使用Python脚本在Linux下实现部分Bash Shell的教程
Apr 17 #Python
使用Python的Scrapy框架编写web爬虫的简单示例
Apr 17 #Python
用Python的Django框架编写从Google Adsense中获得报表的应用
Apr 17 #Python
在Docker上开始部署Python应用的教程
Apr 17 #Python
使用Python装饰器在Django框架下去除冗余代码的教程
Apr 16 #Python
在服务器端实现无间断部署Python应用的教程
Apr 16 #Python
You might like
php 无限分类的树类代码
2009/12/03 PHP
PHP 删除文件与文件夹操作 unlink()与rmdir()这两个函数的使用
2011/07/17 PHP
强制PHP命令行脚本单进程运行的方法
2014/04/15 PHP
js 代码集(学习js的朋友可以看下)
2009/07/22 Javascript
input 和 textarea 输入框最大文字限制的jquery插件
2011/10/27 Javascript
jquery 选择器引擎sizzle浅析
2013/02/06 Javascript
javascript时间函数大全
2014/06/30 Javascript
jQuery中使用each处理json数据
2015/04/23 Javascript
JavaScript弹窗基础篇
2016/04/27 Javascript
Javascript的比较汇总
2016/07/25 Javascript
JS中动态创建元素的三种方法总结(推荐)
2016/10/20 Javascript
JS实现鼠标移上去显示图片或微信二维码
2016/12/14 Javascript
jquery对象与DOM对象转化
2017/02/08 Javascript
js简易版购物车功能
2017/06/17 Javascript
获取当前按钮或者html的ID名称实例(推荐)
2017/06/23 Javascript
浅谈Angular路由复用策略
2017/10/04 Javascript
JS严格模式知识点总结
2018/02/27 Javascript
vue项目中使用particles实现粒子背景效果及遇到的坑(按钮没有点击响应)
2020/02/11 Javascript
JavaScript实现滚动加载更多
2020/12/27 Javascript
[01:18]一目了然!DOTA2DotA快捷操作对比第一弹
2014/07/01 DOTA
Python3.6 Schedule模块定时任务(实例讲解)
2017/11/09 Python
Python通过matplotlib画双层饼图及环形图简单示例
2017/12/15 Python
python调用tcpdump抓包过滤的方法
2018/07/18 Python
django 微信网页授权认证api的步骤详解
2019/07/30 Python
详解Python 字符串相似性的几种度量方法
2019/08/29 Python
python求最大公约数和最小公倍数的简单方法
2020/02/13 Python
解决PyCharm无法使用lxml库的问题(图解)
2020/12/22 Python
matplotlib之pyplot模块之标题(title()和suptitle())
2021/02/22 Python
is_file和file_exists效率比较
2021/03/14 PHP
沙特阿拉伯网上购物:Sayidaty Mall
2018/05/06 全球购物
怎样让char类型的东西转换成int类型
2013/12/09 面试题
如何在发生故障的节点上重新安装 SQL Server
2013/03/14 面试题
公证书样本
2014/04/10 职场文书
追讨欠款律师函
2015/05/27 职场文书
优秀团员主要事迹材料
2015/11/05 职场文书
Windows 11要来了?微软文档揭示Win11太阳谷 / Win10有两个不同版本
2021/11/21 数码科技