前言
在上期文章“Airtest跨平台的UI自动化测试框架(一)”中简单的介绍了Airtest的一些用法和注意事项,今天小编介绍一下如何将Airtest测试框架扩展到airtest + python + unitest +Configparser框架。这样做的目的是为了最大限度降低后期维护成本。
如何引入python库
单纯使用Airtest是无法引用多数的python第三方库,因此我们需要将Airtest和python结合起来,具体操作方法如下:
第一步,通过python的命令安装Airtest的相关库,airtest和 pocoui,参考命令:pip install airtest和pip install pocoui;
第二步,AirtestIDE配置python路径,如下图。
这样一来,python的库就可以尽情使用了......
如何引入数据驱动
数据驱动指的是将公共的,动态的数据集中化,也称“参数化”。通常用到的是全局变量和python参数配置库ConfigParser(pip install configparser),下图执行完毕如果没有报错,Configparser库就安装成功了。
Configparser具体操作方法
第一步,新建一个ini文件,例如config.ini,然后编辑session,key,value字段。
注释一:[]内的字段为“session”,大小写均可,例如上图中的[APPINFO]和[WEBINFO];key和value值为参数名以及对应的参数值,成对出现,例如上图中【InputText =11111】
注释二:参数配置库ConfigParser的常用方法。
① read(filename) 直接读取ini文件内容。
② sections() 得到所有的section,并以列表的形式返回。
③ options(section) 得到该section的所有option。
④ items(section) 得到该section的所有键值对。
⑤ get(section,option) 得到section中option的值,返回为string类型。
⑦ getint(section,option) 得到section中option的值,返回为int类型,还有相应的getboolean()和getfloat() 函数。
⑧ add_section(section) 添加一个新的section。
⑨ set( section,option,value) 对section中的option进行设置,需要调用write将内容写入配置文件。
注释三:如果读取的value值是中文,一定进行编码格式转化,encoding="utf-8-sig”。
第二步,为了减少维护成本和精简代码,先将读取配置文件方法封装,如下图:
第三步,传参调用,如下图:
注释一:建议大家采用全局变量,这样类中的其他方法也可以调用,同样可以减少维护成本和精简代码。
如何编写简单的报表
自动化报表展示建议大家使用Unitest库(pip install unittest(2.7需要安装 3.6版本自带了Unittest,不需要再次安装)),Airtest自带的report不太好用,关键是可参考的资料有限,扩展性也不如Unitest库好。
其次,在使用Unitest库时,建议大家使用BeautifulReport,不建议大家用HTMLTestRunner,因为HTMLTestRunner多数情况下需要修改内部代码,不太适用。
第一步,导入unitest以及相关库,如下图:
第二步,编写unitest报告类,各项注意事项已经注释,大家可以参考,如下代码:
import unittest # 单元测试模块from BeautifulReport import BeautifulReport as bf # 导入BeautifulReport模块,这个模块也是生成报告的模块,但是比HTMLTestRunner模板好看class Main(unittest.TestCase): # 每个用例运行之前运行的 def setUp(self): print('手机浏览器自动化环境预置') baseTest.bowserOfTearDown(packageName) # 每个用例运行之后运行的 def tearDown(self): print('手机浏览器自动化环境恢复') baseTest.bowserOfTearDown(packageName) # 在所有用例执行之前运行的 @classmethod def setUpClass(cls): print('手机浏览器自动化开始') # 在所有用例都执行完之后运行的 @classmethod def tearDownClass(cls): print('手机浏览器自动化结束') # 函数名要以test开头,否则不会被执行 def test01(self): # 用例描述,在函数下,用三个单引号里面写用例描述 print("恶意网站拦截模块") '''命中semob_malicious_promotion_blacklist配置文件内的域名,访问该域名的网址,显示特意网站提示窗''' x = MaliciousInterceptTest.testCase_01() self.assertTrue(x) def test02(self): '''打开命中恶意网站拦截的网页之后,此时点击拦截的继续访问按钮,此时可以继续打开原有网页(也有可能打开404页面,因为这类网站多为色情或者不正规网站,被封的可能性很高)''' x = MaliciousInterceptTest.testCase_02() self.assertTrue(x) def test03(self): '''打开命中恶意网站拦截的网页之后,此时点击拦截的继续访问按钮,打开原有网页之后,点击back键可以退出原网页''' x = MaliciousInterceptTest.testCase_03() self.assertTrue(x) suite = unittest.TestSuite() # 定义一个测试集合suite.addTest(unittest.makeSuite(Main)) # 把写的用例加进来(将运行类)加进来run =bf(suite) # 实例化BeautifulReport模块run.report(filename='BrowserAutoTest', description='手机浏览器自动化测试报告') # filename为报表名称;description为报表描述 |
输出的报告样式如下:
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理