前言
在上期文章“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)# 在所有用例执行之前运行的@classmethoddef setUpClass(cls):print('手机浏览器自动化开始')# 在所有用例都执行完之后运行的@classmethoddef 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为报表描述
相关参考资料
① Unittest用例按编写顺序执行:https://www.cnblogs.com/songzhenhua/p/9690198.html
② Unitest生成的报告如何输出为html:
https://blog.csdn.net/guobingjie123/article/details/78860272
以往文章
文章一:Airtest跨平台的UI自动化测试框架(一)
结尾
以上是小编最近在使用Airtest期间的总结,初步满足了项目需要,后续随着业务需求的增加,小编会继续总结Airtest的用法,欢迎大家批评指正。
后续文章
“Airtest跨平台的UI自动化测试之Unitest丰富报告”正在整理中,敬请期待……
搜狗测试微信号:Qa_xiaoming
搜狗测试QQ粉丝群:459645679