RobotFrame Work为我们提供了包括OS、Android、XML、FTP、HTTP、DataBase、Appium、AutoIt、Selenium、 Watir等大量的库。在使用过程中,除这些库之外,对于某些我们自己特定的应用逻辑,我们还需要开发自己的Library,以便于进行自动化测试。
本篇我们以baidu搜索英文时的自动翻译为例,介绍一下如何开发自己的Library。
0.目标
我们这次使用的示例的业务逻辑如下,打开baidu,搜索英文单词“Test”,查看页面中是否含有Test的自动翻译结果(我们以翻译结果“检验”做验证),手动执行效果如图
1.编写脚本
我们使用Python的urllib编写测试脚本,并保存到当前RobotFrame Work的测试项目目录下,文件名为MyLibrary.py 。
# -*- coding=utf-8 -*- import urllib import urllib2 class MyLibrary(): def Is_Translate(self,english,chinese): u''' 检查输入的英文单词在进行baidu搜索时,是否调用了baidu英文翻译引擎 ''' #url地址 #url='https://www.baidu.com/s' url='http://www.baidu.com/s' #参数 values={ 'ie':'UTF-8', 'wd':'test' } #进行参数封装 data=urllib.urlencode(values) #组装完整url #req=urllib2.Request(url,data) url=url+'?'+data #访问完整url #response = urllib2.urlopen(req) response = urllib2.urlopen(url) html=response.read() x=chinese in html print x def test(): lib=MyLibrary() lib.Is_Translate( "Test", "测验") if __name__ == '__main__': test() print 'finished'
在本地运行脚本,检验脚本的正确性。
2.引用自定义Library
在TestSuit节点上进行编辑,添加Library,Library名称为我们的脚本文件名MyLibrary.py 。
按F5键,查看刚刚引入的Library
3.添加测试用例
新建一个测试用例,命名为“百度翻译”。添加测试步骤“Is Translate”
此时看到所编辑行的两个单元格变为了红色,表示该关键字需要两个必填变量,对应我们的脚本中的两个参数。
添加变量,英文输入“Test”,对应检验结果为“测验”
4.运行测试
运行测试,此时,测试不通过
检查错误信息,错误信息为
Starting test: 百度搜索测试.兼容性测试.百度翻译 20150824 16:59:37.014 : FAIL : UnicodeDecodeError: 'ascii' codec can't decode byte 0xe7 in position 490: ordinal not in range(128) Ending test: 百度搜索测试.兼容性测试.百度翻译
表示是我们的TestCase中的中文字符编码格式错误,此时需要调整以下RobotFrame Work在调用脚本进行运行时的系统编码格式。
5.增加中文支持
向脚本中添加代码,设置系统默认编码为utf8
#添加中文支持 reload(sys) sys.setdefaultencoding('utf8')
6.再次执行
再 次执行测试,测试通过,结果为Pass,表示被打开的页面中出现了我们所需要的“测验”字符。(作为简单示例,此时暂不考虑其它搜索结果中的输出问题,如 果要进行严格的测试,应该对搜索后返回的html做解析,先定位到baidu翻译引擎的div位置,再对位置中的翻译结果做检查。)
总结:
本篇文章中,我们对如何建立自定义Library进行自动化测试,以及如何解决RobotFrame Work 自定义 Library 中的中文字符编码问题进行了介绍。通过编写自己的Library,可以更贴合自己的业务逻辑,更加符合实际使用情况。