如何将Airtest测试框架扩展?

发表于:2020-7-30 10:40  作者:songzhidong   来源:搜狗测试

字体: | 上一篇 | 下一篇 |我要投稿 | 推荐标签: 测试框架

  前言
  在上期文章“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),我们将立即处理

评 论

论坛新帖



建议使用IE 6.0以上浏览器,800×600以上分辨率,法律顾问:上海信义律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2021, 沪ICP备05003035号
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪公网安备 31010102002173号

51Testing官方微信

51Testing官方微博

扫一扫 测试知识全知道